Skip to content

Commit 0c069c9

Browse files
committed
Fixed handling number of arguments in locals calculation
1 parent d3f0780 commit 0c069c9

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/main/pt/up/fe/comp2023/jasmin/JVMInstructionUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public static String getLoadInstruction(Element element, HashMap<String, Descrip
3333
else
3434
elementType = element.getType().getTypeOfElement();
3535
int virtualReg = varTable.get(((Operand)element).getName()).getVirtualReg();
36+
if (virtualReg > JVMInstructionUtils.numLocals)
37+
numLocals = virtualReg;
38+
3639
switch (elementType) {
3740
case THIS:
3841
return "\taload_0\n";

src/main/pt/up/fe/comp2023/jasmin/JasminUtils.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,11 +197,15 @@ public static String createConstructMethod(String superClassName) {
197197

198198
public static String createMethodDirective(Method method) {
199199
JVMInstructionUtils.numLocals = 0;
200-
JVMInstructionUtils.stackSize = 0;
200+
JVMInstructionUtils.stackSize = 99;
201201
String instructions = handleMethodStatements(method);
202-
JVMInstructionUtils.numLocals += method.getParams().size();
203-
if (!method.isStaticMethod())
202+
if (method.isStaticMethod() && method.getParams().size() > 0)
204203
JVMInstructionUtils.numLocals++;
204+
else if (!method.isStaticMethod()) {
205+
if (JVMInstructionUtils.numLocals < method.getParams().size())
206+
JVMInstructionUtils.numLocals += method.getParams().size();
207+
JVMInstructionUtils.numLocals++;
208+
}
205209

206210
String methodDirective = ".method ";
207211
methodDirective += createMethodDeclaration(method);

0 commit comments

Comments
 (0)