From 54b792ba1085ed8417c4bcea5ae216440663e1c5 Mon Sep 17 00:00:00 2001 From: Apoorva Ranade Date: Sun, 2 May 2021 20:11:59 +0530 Subject: [PATCH 1/2] Fixing while --- src/main/java/chocopy/pa3/CodeGenImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index d2b7b33..021a450 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -718,13 +718,13 @@ public class CodeGenImpl extends CodeGenBase { Label startLoop = generateLocalLabel(); backend.emitLocalLabel(startLoop, "Beginning of while loop"); - node.condition.dispatch(this); + Register result = node.condition.dispatch(this); Label endLoop = elseBlock; + backend.emitBEQZ(result, endLoop,"Jump to beginning of loop"); 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; } From 9e2b344bd2574191a63506b2272435fedd6b265b Mon Sep 17 00:00:00 2001 From: Apoorva Ranade Date: Sun, 2 May 2021 20:20:52 +0530 Subject: [PATCH 2/2] Fixed Ifs --- src/main/java/chocopy/pa3/CodeGenImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 021a450..c3de1f5 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -415,8 +415,9 @@ public class CodeGenImpl extends CodeGenBase @Override public Register analyze(IfExpr node) { - node.condition.dispatch(this); + Register result = node.condition.dispatch(this); Label ln = generateLocalLabel(); + backend.emitBEQZ(result, ln,"Jump to beginning of loop"); node.thenExpr.dispatch(this); backend.emitJ(ln, "Jump to end of if expression"); backend.emitLocalLabel(elseBlock, "Else part of if expression"); @@ -428,8 +429,9 @@ public class CodeGenImpl extends CodeGenBase @Override public Register analyze(IfStmt node) { - node.condition.dispatch(this); + Register result = node.condition.dispatch(this); Label ln = generateLocalLabel(); + backend.emitBEQZ(result, ln,"Jump to beginning of loop"); for(Stmt s:node.thenBody) s.dispatch(this); backend.emitJ(ln, "Jump to end of if statement");