diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 53608f3..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - - { - "type": "java", - "name": "Launch Current File", - "request": "launch", - "classPaths": ["chocopy-ref.jar:target/assignment.jar"], - "mainClass": "chocopy.ChocoPy", - //"args": [ "--pass=rrs", "--test","--dir", "src/test/data/pa3/sample/list_set_element_oob_1.py"], - "args": [ "--pass=rrs", "--test","--dir", "test.py"], - "sourcePaths": [] - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c5f3f6b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "interactive" -} \ No newline at end of file diff --git a/conslist b/conslist deleted file mode 100644 index f4b83a2..0000000 --- a/conslist +++ /dev/null @@ -1,27 +0,0 @@ - - addi sp, sp, -8 - sw ra, 4(sp) - sw fp, 0(sp) - addi fp, sp, 8 - lw a1, 0(fp) - la a0, $.list$prototype - beqz a1, conslist_done - addi a1, a1, @listHeaderWords - jal alloc2 - lw t0, 0(fp) - sw t0, @.__len__(a0) - slli t1, t0, 2 - add t1, t1, fp - addi t2, a0, @.__elts__ -conslist_1: - lw t3, 0(t1) - sw t3, 0(t2) - addi t1, t1, -4 - addi t2, t2, 4 - addi t0, t0, -1 - bnez t0, conslist_1 -conslist_done: - lw ra, -4(fp) - lw fp, -8(fp) - addi sp, sp, 8 - jr ra \ No newline at end of file diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 00bd7b6..5844f46 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -1,18 +1,18 @@ package chocopy.pa3; -import java.net.Socket; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Stack; -import chocopy.common.analysis.AbstractNodeAnalyzer; -import chocopy.common.analysis.SymbolTable; +import chocopy.common.analysis.*; import chocopy.common.astnodes.*; import chocopy.common.analysis.types.*; import chocopy.common.codegen.*; -import static chocopy.common.codegen.RiscVBackend.Register.*; import chocopy.common.codegen.RiscVBackend.Register; +import static chocopy.common.codegen.RiscVBackend.Register.*; /** @@ -33,12 +33,12 @@ public class CodeGenImpl extends CodeGenBase { /** Label for built-in routines. */ protected final Label makeintLabel = new Label("makeint"); - protected final Label strneqlLablel = new Label("strneql"); - protected final Label streqlLablel = new Label("streql"); + protected final Label strneqlLabel = new Label("strneql"); + protected final Label streqlLabel = new Label("streql"); protected final Label makeboolLabel = new Label("makebool"); - protected final Label strcatLablel = new Label("strcat"); - protected final Label concatLablel = new Label("concat"); - protected final Label conslistLablel = new Label("conslist"); + protected final Label strcatLabel = new Label("strcat"); + protected final Label concatLabel = new Label("concat"); + protected final Label conslistLabel = new Label("conslist"); @@ -91,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); } @@ -148,7 +150,6 @@ public class CodeGenImpl extends CodeGenBase varSlotMap.put(var.getVarName(), requiredStackSpace-emptySlotNum*wordSize); emptySlotNum++; } - // --- Function Body --- // statements load all the variables that caller put on stack // statements use fp to load the variables @@ -157,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"); @@ -208,11 +207,8 @@ public class CodeGenImpl extends CodeGenBase private final FuncInfo funcInfo; /** Label of code that exits from block. */ - protected Label elseBlock; + protected Stack