From 9ff069827a845ec392e01bb8ee3fd6b19cbeba97 Mon Sep 17 00:00:00 2001 From: Jochen Seyfried Date: Sat, 22 Jun 2024 16:33:53 +0200 Subject: [PATCH] Fixed Bugs in bytecode generation --- src/main/java/TypeCheck/TypeCheckHelper.java | 2 +- src/main/java/abstractSyntaxTree/Class/MethodDecl.java | 5 +++-- .../java/abstractSyntaxTree/Statement/LocalVarDecl.java | 2 +- .../StatementExpression/AssignStatementExpression.java | 7 +++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/TypeCheck/TypeCheckHelper.java b/src/main/java/TypeCheck/TypeCheckHelper.java index 6e7542a..b9c9384 100644 --- a/src/main/java/TypeCheck/TypeCheckHelper.java +++ b/src/main/java/TypeCheck/TypeCheckHelper.java @@ -24,7 +24,7 @@ public class TypeCheckHelper { } public static boolean typeExists(String type, List 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); diff --git a/src/main/java/abstractSyntaxTree/Class/MethodDecl.java b/src/main/java/abstractSyntaxTree/Class/MethodDecl.java index 04c7525..b4cfcab 100644 --- a/src/main/java/abstractSyntaxTree/Class/MethodDecl.java +++ b/src/main/java/abstractSyntaxTree/Class/MethodDecl.java @@ -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> classMethods = methodContext.get(classThatContainsMethod); HashMap methodDetails = classMethods.get(name); diff --git a/src/main/java/abstractSyntaxTree/Statement/LocalVarDecl.java b/src/main/java/abstractSyntaxTree/Statement/LocalVarDecl.java index fd748c3..78b36c2 100644 --- a/src/main/java/abstractSyntaxTree/Statement/LocalVarDecl.java +++ b/src/main/java/abstractSyntaxTree/Statement/LocalVarDecl.java @@ -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; diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java index eb31a57..e80fb12 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java @@ -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: