From 1fb6f3f08565e29f2f00e172dbe4752e50b9e27f Mon Sep 17 00:00:00 2001 From: Apoorva Ranade Date: Wed, 28 Apr 2021 15:32:07 +0530 Subject: [PATCH] While loop --- src/main/java/chocopy/pa3/CodeGenImpl.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index bd0626c..ec55c3f 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -381,7 +381,19 @@ public class CodeGenImpl extends CodeGenBase { return null; } - + @Override + public Void analyze(WhileStmt node) + { + Label startLoop = generateLocalLabel(); + backend.emitLocalLabel(startLoop, "Beginning of while loop"); + node.condition.dispatch(this); + Label endLoop = elseBlock; + for(Stmt stmt:node.body) + stmt.dispatch(this); + backend.emitJ(startLoop, "Jump to beginning of loop"); + backend.emitLocalLabel(endLoop, "End of while loop"); + return null; + } @Override public Void analyze(ForStmt node) { // control flow @@ -415,11 +427,7 @@ public class CodeGenImpl extends CodeGenBase - @Override - public Void analyze(WhileStmt node) { - // control flow - return defaultAction(node); - } + } /**