From ccfb25751b475a9c920fc4e6ab3b412f635e4f01 Mon Sep 17 00:00:00 2001 From: otya128 Date: Sun, 12 Jul 2015 12:24:21 +0900 Subject: [PATCH] =?UTF-8?q?WHILE=E3=82=92=E5=AE=9F=EF=BF=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/compiler.d | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index 6323656..45497a9 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -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); }