Fixed Bugs in bytecode generation

This commit is contained in:
Jochen Seyfried 2024-06-22 16:33:53 +02:00
parent 87e863e773
commit 9ff069827a
4 changed files with 8 additions and 8 deletions

View File

@ -24,7 +24,7 @@ public class TypeCheckHelper {
}
public static boolean typeExists(String type, List<String> customTypeslist) {
if(type.equals("int") || type.equals("bool") || type.equals("char")){
if(type.equals("int") || type.equals("boolean") || type.equals("char")){
return true;
}
return customTypeslist.contains(type);

View File

@ -125,7 +125,7 @@ public class MethodDecl implements Node {
for (Parameter param : parameters.parameterList) {
switch (param.type) {
case "int" -> descriptor.append("I");
case "bool" -> descriptor.append("Z");
case "boolean" -> descriptor.append("Z");
case "char" -> descriptor.append("C");
case "void" -> descriptor.append("V");
default -> {
@ -144,11 +144,12 @@ public class MethodDecl implements Node {
} else {
switch (returnType) {
case "int" -> descriptor.append("I");
case "bool" -> descriptor.append("Z");
case "boolean" -> descriptor.append("Z");
case "char" -> descriptor.append("C");
case "void" -> descriptor.append("V");
default -> {
// object
// methodContext (class, (returnType, (identifier, parameter)))
HashMap<String, HashMap<String, ParameterList>> classMethods = methodContext.get(classThatContainsMethod);
HashMap<String, ParameterList> methodDetails = classMethods.get(name);

View File

@ -51,7 +51,7 @@ public class LocalVarDecl extends AbstractType implements IStatement{
mv.visitInsn(Opcodes.ICONST_0);
mv.visitVarInsn(Opcodes.ISTORE, index);
break;
case "bool":
case "boolean":
mv.visitInsn(Opcodes.ICONST_0);
mv.visitVarInsn(Opcodes.ISTORE, index);
break;

View File

@ -47,7 +47,7 @@ public class AssignStatementExpression extends AbstractType implements IExpressi
String upperbound = helper.upperBound(leftType.type, rightType.type);
if(Objects.equals(leftType.type, "boolean"))
leftType.type = "bool";
leftType.type = "boolean";
if (!Objects.equals(upperbound, leftType.type)) {
throw new TypeCheckException("The upper bound of assignment is not the left type.");
}
@ -78,7 +78,7 @@ public class AssignStatementExpression extends AbstractType implements IExpressi
int counter = 0;
for (String key : localVars.keySet()) {
if (key.equals(varName)) {
index = counter;
index = counter+1;
break;
}
counter++;
@ -90,8 +90,7 @@ public class AssignStatementExpression extends AbstractType implements IExpressi
String type = localVars.get(localVar.getIdentifier());
switch (type) {
case "int":
case "bool":
case "int", "char", "boolean":
mv.visitVarInsn(Opcodes.ISTORE, index);
break;
default: