diff --git a/src/main/java/abstractSyntaxTree/Expression/InstVarExpression.java b/src/main/java/abstractSyntaxTree/Expression/InstVarExpression.java index 05a5144..9290e6c 100644 --- a/src/main/java/abstractSyntaxTree/Expression/InstVarExpression.java +++ b/src/main/java/abstractSyntaxTree/Expression/InstVarExpression.java @@ -41,7 +41,6 @@ public class InstVarExpression extends AbstractType implements IExpression{ } TypeCheckResult result = new TypeCheckResult(); result.type = varType; - //TODO: Needed for methodCall codeGen setTypeCheckResult(result); return result; } diff --git a/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java b/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java index 5f748b7..7ab66d9 100644 --- a/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/BlockStatement.java @@ -120,7 +120,6 @@ public class BlockStatement extends AbstractType implements IStatement { // Create a new HashMap for the local variables of the block // It has every variable of the parent block // This Map is discarded at the end of the block - //TODO: Do this for every block --> if, while, ... LinkedHashMap blockLocalVars = new LinkedHashMap<>(localVars); for (IStatement statement : statements) { diff --git a/src/main/java/abstractSyntaxTree/Statement/IfElseStatement.java b/src/main/java/abstractSyntaxTree/Statement/IfElseStatement.java index 51a8b5d..9f90613 100644 --- a/src/main/java/abstractSyntaxTree/Statement/IfElseStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/IfElseStatement.java @@ -55,6 +55,8 @@ public class IfElseStatement extends AbstractType implements IStatement{ //TODO: There are 2 NOPs and one athrow on the stack between the if-Block and else-Block execution --> I have no idea why + // I think they are generated because of the jump operations below and can not be eliminated + // as they do not negatively impact the execution of the code logic wise we can ignore them @Override public void codeGen(MethodVisitor mv, LinkedHashMap localVars, HashMap> typeContext, HashMap>> methodContext) throws Exception { diff --git a/src/main/java/abstractSyntaxTree/Statement/ReturnStatement.java b/src/main/java/abstractSyntaxTree/Statement/ReturnStatement.java index 2af1a09..1f39162 100644 --- a/src/main/java/abstractSyntaxTree/Statement/ReturnStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/ReturnStatement.java @@ -34,9 +34,7 @@ public class ReturnStatement extends AbstractType implements IStatement{ return result; } - //TODO: We do not differentiate between primitive types and reference types - // This is a problem at "BinaryExpression" and here because we need to know the type to return - // At this point in time we can either return reference types or have an error message + @Override public void codeGen(MethodVisitor mv, LinkedHashMap localVars, HashMap> typeContext, HashMap>> methodContext) throws Exception { diff --git a/src/main/java/abstractSyntaxTree/Statement/WhileStatement.java b/src/main/java/abstractSyntaxTree/Statement/WhileStatement.java index 6edf070..4d7f316 100644 --- a/src/main/java/abstractSyntaxTree/Statement/WhileStatement.java +++ b/src/main/java/abstractSyntaxTree/Statement/WhileStatement.java @@ -55,8 +55,7 @@ public class WhileStatement extends AbstractType implements IStatement { mv.visitJumpInsn(Opcodes.IFEQ, conditionFalse); // Checks if the condition is false (0) statement.codeGen(mv, blockLocalVars, typeContext, methodContext); - //TODO: If the block ends with a return statement, we might have to pop it from the stack - // So the next iteration starts with a clean stack + mv.visitJumpInsn(Opcodes.GOTO, LoopStart); // Jump to the start of the while loop mv.visitLabel(conditionFalse);