From d7ae4fc9edecd2f23e90661c281c7f466a3583c8 Mon Sep 17 00:00:00 2001 From: bill Date: Tue, 4 May 2021 22:16:58 +0800 Subject: [PATCH] modified: src/main/java/chocopy/pa3/CodeGenImpl.java --- src/main/java/chocopy/pa3/CodeGenImpl.java | 191 +++++++++++++++------ 1 file changed, 137 insertions(+), 54 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 7376ce0..1cb954f 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Stack; import chocopy.common.analysis.*; import chocopy.common.astnodes.*; @@ -90,6 +91,8 @@ public class CodeGenImpl extends CodeGenBase { stmt.dispatch(stmtAnalyzer); } + stmtAnalyzer.emitSizeLabel(); + backend.emitLI(A0, EXIT_ECALL, "Code for ecall: exit"); backend.emitEcall(null); } @@ -155,10 +158,8 @@ public class CodeGenImpl extends CodeGenBase for (Stmt stmt : funcInfo.getStatements()) { stmt.dispatch(stmtAnalyzer); } + stmtAnalyzer.emitSizeLabel(); backend.emitJ(stmtAnalyzer.epilogue, "Jump to function epilogue"); - - - // --- Epilogue --- backend.emitLocalLabel(stmtAnalyzer.epilogue, "Epilogue"); backend.emitLW(RA, FP, -4, "Get return address"); @@ -206,7 +207,7 @@ public class CodeGenImpl extends CodeGenBase private final FuncInfo funcInfo; /** Label of code that exits from block. */ - protected Label elseBlock; + protected Stack