From 64c5899d80d7ff190f3e290b063e20ea42e5839c Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Sat, 27 Apr 2019 20:46:41 -0700 Subject: [PATCH] return statement works --- src/main/java/chocopy/pa3/CodeGenImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 43acc8f..f70984c 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -352,8 +352,9 @@ public class CodeGenImpl extends CodeGenBase { stmt.dispatch(stmtAnalyzer); } - backend.emitMV(A0, ZERO, "Returning None implicitly"); betterBackend.emitFunctionEnd(funcInfo.getFuncName(), stmtAnalyzer.regMgr, "BEGIN FUNCTION"); + // the following instructions are ignored. + // backend.emitMV(A0, ZERO, "Returning None implicitly"); backend.emitLocalLabel(stmtAnalyzer.epilogue, "Epilogue"); // FIXME: {... reset fp etc. ...} @@ -424,8 +425,12 @@ public class CodeGenImpl extends CodeGenBase { // this is wrong, and you'll have to fix it. // This is here just to demonstrate how to emit a // RISC-V instruction. - backend.emitMV(ZERO, ZERO, "No-op"); - return null; + RiscVBackend.Register returnValReg = node.value.dispatch(this); + if(returnValReg == null) + return null; + backend.emitMV(A0, returnValReg, "put return value!"); + regMgr.returnOne(returnValReg); + return null; // Statement always return null. } // FIXME: More, of course. -- GitLab