diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index b2a79b63a7fdf83f56cf42685125980dad18ebe8..8b7a059d3598299dd3d54809a4a6cd538e6d6f8a 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -183,8 +183,6 @@ public class CodeGenImpl extends CodeGenBase { emitPush(tmpReg, null); backend.emitMV(tmpReg, SP, "Return STR OBJ address."); } - - } // Every function needs a register manager. @@ -466,13 +464,8 @@ public class CodeGenImpl extends CodeGenBase { epilogue = generateLocalLabel(); } - // FIXME: Example of statement. @Override public RiscVBackend.Register analyze(ReturnStmt node) { - // FIXME: Here, we emit an instruction that does nothing. Clearly, - // this is wrong, and you'll have to fix it. - // This is here just to demonstrate how to emit a - // RISC-V instruction. RiscVBackend.Register returnValReg = node.value.dispatch(this); if (returnValReg == null) return null; @@ -505,7 +498,8 @@ public class CodeGenImpl extends CodeGenBase { @Override public RiscVBackend.Register analyze(ExprStmt node) { - node.expr.dispatch(this); + RiscVBackend.Register ret = node.expr.dispatch(this); + regMgr.returnOne(ret); return null; }