RESTORE (式)に対応
This commit is contained in:
@@ -1332,6 +1332,26 @@ class RestoreCode : Code
|
|||||||
return "restore " ~ label.to!string;
|
return "restore " ~ label.to!string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class RestoreExprCode : Code
|
||||||
|
{
|
||||||
|
DataTable datatable;
|
||||||
|
this(DataTable datatable)
|
||||||
|
{
|
||||||
|
this.datatable = datatable;
|
||||||
|
}
|
||||||
|
override void execute(VM vm)
|
||||||
|
{
|
||||||
|
Value label;
|
||||||
|
vm.pop(label);
|
||||||
|
if(!label.isString)
|
||||||
|
throw new TypeMismatch();
|
||||||
|
datatable.dataIndex = datatable.label[label.stringValue];
|
||||||
|
}
|
||||||
|
override string toString(VM vm)
|
||||||
|
{
|
||||||
|
return "restore expr";
|
||||||
|
}
|
||||||
|
}
|
||||||
class PushSystemVariable : Code
|
class PushSystemVariable : Code
|
||||||
{
|
{
|
||||||
SystemVariable var;
|
SystemVariable var;
|
||||||
|
|||||||
@@ -699,6 +699,18 @@ class BuiltinFunction
|
|||||||
{
|
{
|
||||||
p.getBG(layer).rot(rot);
|
p.getBG(layer).rot(rot);
|
||||||
}
|
}
|
||||||
|
static void EFCON()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void EFCOFF()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void EFCSET(Value[])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void EFCWET(Value[])
|
||||||
|
{
|
||||||
|
}
|
||||||
//alias void function(PetitComputer, Value[], Value[]) BuiltinFunc;
|
//alias void function(PetitComputer, Value[], Value[]) BuiltinFunc;
|
||||||
static BuiltinFunction[wstring] builtinFunctions;
|
static BuiltinFunction[wstring] builtinFunctions;
|
||||||
static this()
|
static this()
|
||||||
@@ -1066,7 +1078,6 @@ template AddFuncArg(int L, int N, int M, int O, T, string NAME, P...)
|
|||||||
}
|
}
|
||||||
template OutArgsInit(T, string N, int I = 0, int J = 0)
|
template OutArgsInit(T, string N, int I = 0, int J = 0)
|
||||||
{
|
{
|
||||||
enum tuple = ParameterStorageClassTuple!(__traits(getMember, T, N))[I];
|
|
||||||
alias param = ParameterTypeTuple!(__traits(getMember, T, N));
|
alias param = ParameterTypeTuple!(__traits(getMember, T, N));
|
||||||
static if(!param.length)
|
static if(!param.length)
|
||||||
{
|
{
|
||||||
@@ -1074,6 +1085,7 @@ template OutArgsInit(T, string N, int I = 0, int J = 0)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
enum tuple = ParameterStorageClassTuple!(__traits(getMember, T, N))[I];
|
||||||
static if(tuple & ParameterStorageClass.out_)
|
static if(tuple & ParameterStorageClass.out_)
|
||||||
{
|
{
|
||||||
enum add = 1;
|
enum add = 1;
|
||||||
|
|||||||
@@ -847,7 +847,22 @@ class Compiler
|
|||||||
compileRead(cast(Read)i, s);
|
compileRead(cast(Read)i, s);
|
||||||
break;
|
break;
|
||||||
case NodeType.Restore:
|
case NodeType.Restore:
|
||||||
genCode(new RestoreCodeS((cast(Constant)(cast(Restore)i).label).value.stringValue));
|
{
|
||||||
|
Restore restore = cast(Restore)i;
|
||||||
|
Expression label = restore.label;
|
||||||
|
if(label.type == NodeType.Constant)
|
||||||
|
{
|
||||||
|
Constant cons = cast(Constant)label;
|
||||||
|
if(cons.value.isString)
|
||||||
|
{
|
||||||
|
genCode(new RestoreCodeS(cons.value.stringValue));
|
||||||
|
break;
|
||||||
|
//文字列じゃないならば定数でも実行時エラー
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileExpression(label, s);
|
||||||
|
genCode(new RestoreExprCode(s.data));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NodeType.On:
|
case NodeType.On:
|
||||||
compileOn(cast(On)i, s);
|
compileOn(cast(On)i, s);
|
||||||
|
|||||||
@@ -856,10 +856,11 @@ class PetitComputer
|
|||||||
//とりあえず
|
//とりあえず
|
||||||
auto parser = new Parser(
|
auto parser = new Parser(
|
||||||
//readText("./SYS/GAME6TALK.TXT").to!wstring
|
//readText("./SYS/GAME6TALK.TXT").to!wstring
|
||||||
|
readText("./SYS/GAME4SHOOTER.TXT").to!wstring
|
||||||
//readText("./SYS/GAME2RPG.TXT").to!wstring
|
//readText("./SYS/GAME2RPG.TXT").to!wstring
|
||||||
//readText("./SYS/GAME1DOTRC.TXT").to!wstring
|
//readText("./SYS/GAME1DOTRC.TXT").to!wstring
|
||||||
//readText(input("LOAD PROGRAM:", true).to!string).to!wstring
|
//readText(input("LOAD PROGRAM:", true).to!string).to!wstring
|
||||||
readText("./SYS/EX8TECDEMO.TXT").to!wstring
|
//readText("./SYS/EX8TECDEMO.TXT").to!wstring
|
||||||
//readText("./SYS/EX1TEXT.TXT").to!wstring
|
//readText("./SYS/EX1TEXT.TXT").to!wstring
|
||||||
//readText("FIZZBUZZ.TXT").to!wstring
|
//readText("FIZZBUZZ.TXT").to!wstring
|
||||||
//readText("TEST.TXT").to!wstring
|
//readText("TEST.TXT").to!wstring
|
||||||
|
|||||||
Reference in New Issue
Block a user