WHILEを実�
This commit is contained in:
@@ -438,6 +438,17 @@ class Compiler
|
|||||||
breakAddr.address = code.length;
|
breakAddr.address = code.length;
|
||||||
s.breakAddr.address = code.length;
|
s.breakAddr.address = code.length;
|
||||||
}
|
}
|
||||||
|
void compileWhile(While node, Scope s)
|
||||||
|
{
|
||||||
|
auto whilestart = code.length;
|
||||||
|
s = new Scope(new GotoAddr(-1), new GotoAddr(whilestart), s);
|
||||||
|
compileExpression(node.condExpression, s);
|
||||||
|
auto breakAddr = genCodeGotoFalse();
|
||||||
|
compileStatements(node.statements, s);
|
||||||
|
genCode(s.continueAddr);
|
||||||
|
s.breakAddr.address = code.length;
|
||||||
|
breakAddr.address = code.length;
|
||||||
|
}
|
||||||
void compileVar(Var node, Scope sc)
|
void compileVar(Var node, Scope sc)
|
||||||
{
|
{
|
||||||
foreach(Statement v ; node.define)
|
foreach(Statement v ; node.define)
|
||||||
@@ -638,6 +649,9 @@ class Compiler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NodeType.While:
|
||||||
|
compileWhile(cast(While)i, s);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
stderr.writeln("Compile:NotImpl ", i.type);
|
stderr.writeln("Compile:NotImpl ", i.type);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user