diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 4cd9c6f..7ef4ccc 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -434,8 +434,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"); @@ -447,8 +448,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"); @@ -737,13 +739,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; }