diff --git a/pom.xml b/pom.xml index 685dd23..ac18ace 100644 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,7 @@ Compiler + NichtHaskellCompiler jar-with-dependencies diff --git a/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java b/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java index ee4fed3..c277bce 100644 --- a/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java +++ b/src/main/java/abstractSyntaxTree/Expression/BinaryExpression.java @@ -15,8 +15,9 @@ import java.util.Objects; public class BinaryExpression extends AbstractType implements IExpression{ public String operator; - public IExpression left; // This needs TypeCheckResult + public IExpression left; public IExpression right; + public String thisClass; public BinaryExpression(String operator, IExpression left, IExpression right) { this.operator = operator; @@ -28,6 +29,10 @@ public class BinaryExpression extends AbstractType implements IExpression{ public TypeCheckResult typeCheck(HashMap>> methodContext, HashMap> typeContext, HashMap localVars) throws TypeCheckException { TypeCheckResult result = new TypeCheckResult(); + if(left instanceof LocalVarIdentifier localVarIdentifier) + localVarIdentifier.thisClass = this.thisClass; + if(right instanceof LocalVarIdentifier localVarIdentifier) + localVarIdentifier.thisClass = this.thisClass; TypeCheckResult leftType = left.typeCheck(methodContext, typeContext, localVars); TypeCheckResult rightType = right.typeCheck(methodContext, typeContext, localVars); diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java index 07f311d..076fceb 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java @@ -4,6 +4,7 @@ import TypeCheck.AbstractType; import TypeCheck.TypeCheckException; import TypeCheck.TypeCheckHelper; import TypeCheck.TypeCheckResult; +import abstractSyntaxTree.Expression.BinaryExpression; import abstractSyntaxTree.Expression.IExpression; import abstractSyntaxTree.Expression.InstVarExpression; import abstractSyntaxTree.Expression.LocalVarIdentifier; @@ -54,6 +55,8 @@ public class AssignStatementExpression extends AbstractType implements IExpressi methodCallStatementExpression.thisClass = this.thisClass; if(right instanceof LocalVarIdentifier localVarIdentifierRight) localVarIdentifierRight.thisClass = this.thisClass; + if(right instanceof BinaryExpression binaryExpression) + binaryExpression.thisClass = this.thisClass; TypeCheckResult rightType = right.typeCheck(methodContext, typeContext, localVars);