1
0

WHILEを実�

This commit is contained in:
otya128
2015-07-12 12:24:21 +09:00
parent 4d58b0ff56
commit ccfb25751b

View File

@@ -438,6 +438,17 @@ class Compiler
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)
{
foreach(Statement v ; node.define)
@@ -638,6 +649,9 @@ class Compiler
}
}
break;
case NodeType.While:
compileWhile(cast(While)i, s);
break;
default:
stderr.writeln("Compile:NotImpl ", i.type);
}