diff --git a/Source/Compiler.java b/Source/Compiler.java index ad8fd7d..f3ef3b6 100644 --- a/Source/Compiler.java +++ b/Source/Compiler.java @@ -8,7 +8,7 @@ import java.util.List; public class Compiler { - public static void Main(String[] args) throws Exception{ + public static void main(String[] args) throws Exception{ // get file @@ -20,6 +20,5 @@ public class Compiler { abstractSyntaxTree.typeCheck(); abstractSyntaxTree.codeGen(); - } } diff --git a/Source/abstractSyntaxTree/Class/FieldDecl.java b/Source/abstractSyntaxTree/Class/FieldDecl.java index 071b559..a02fb36 100644 --- a/Source/abstractSyntaxTree/Class/FieldDecl.java +++ b/Source/abstractSyntaxTree/Class/FieldDecl.java @@ -35,7 +35,7 @@ public class FieldDecl extends AbstractType implements IClass{ } @Override - public TypeCheckResult typeCheck() throws Exception { + public TypeCheckResult typeCheck(HashMap>>> methodContext, HashMap> typeContext, List fieldsOrMethods) throws Exception { return null; } diff --git a/Source/abstractSyntaxTree/Class/IClass.java b/Source/abstractSyntaxTree/Class/IClass.java index 6af7dec..cfd14e3 100644 --- a/Source/abstractSyntaxTree/Class/IClass.java +++ b/Source/abstractSyntaxTree/Class/IClass.java @@ -4,12 +4,13 @@ import TypeCheck.TypeCheckResult; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.TypeReference; +import java.util.HashMap; import java.util.List; public interface IClass { // visit method for code generation - TypeCheckResult typeCheck() throws Exception; + TypeCheckResult typeCheck(HashMap>>> methodContext, HashMap> typeContext, List fieldsOrMethods) throws Exception; void codeGen(ClassWriter cw) throws Exception; } diff --git a/Source/abstractSyntaxTree/Class/MethodDecl.java b/Source/abstractSyntaxTree/Class/MethodDecl.java index 15f96ac..6e12a51 100644 --- a/Source/abstractSyntaxTree/Class/MethodDecl.java +++ b/Source/abstractSyntaxTree/Class/MethodDecl.java @@ -18,7 +18,7 @@ public class MethodDecl implements IClass { //TODO: Move this into the typeCheck private HashMap localVars; // (type, identifier) // add content here - public TypeCheckResult typeCheck(HashMap>> methodContext, HashMap> typeContext, List fieldsOrMethods) throws Exception { + public TypeCheckResult typeCheck(HashMap>>> methodContext, HashMap> typeContext, List fieldsOrMethods) throws Exception { // write localvars diff --git a/Source/abstractSyntaxTree/Class/RefType.java b/Source/abstractSyntaxTree/Class/RefType.java index d511e37..79a4a22 100644 --- a/Source/abstractSyntaxTree/Class/RefType.java +++ b/Source/abstractSyntaxTree/Class/RefType.java @@ -20,14 +20,13 @@ public class RefType extends AbstractType implements IClass { public List fieldDecls; public List methodDecls; private HashMap> typeContext; // (class, (type, identifier)) - private HashMap>> methodContext; // (class, (returntype, (identifier, parameter) - + public HashMap>>> methodContext; // (class, (returntype, (identifier, parameter))) private boolean hasMain; public RefType(List fieldDecls, List methodDecls, HashMap> typeContext, - HashMap>> methodContext){ + HashMap>>> methodContext){ this.fieldDecls = fieldDecls; this.methodDecls = methodDecls; this.typeContext = typeContext; @@ -37,7 +36,7 @@ public class RefType extends AbstractType implements IClass { @Override - public TypeCheckResult typeCheck() throws Exception { + public TypeCheckResult typeCheck(HashMap>>> methodContext, HashMap> typeContext, List fieldsOrMethods) throws Exception { TypeCheckResult result = new TypeCheckResult(); for (FieldDecl fieldDecl : fieldDecls) { diff --git a/Source/abstractSyntaxTree/Program.java b/Source/abstractSyntaxTree/Program.java index 2b86ffa..05e7962 100644 --- a/Source/abstractSyntaxTree/Program.java +++ b/Source/abstractSyntaxTree/Program.java @@ -39,7 +39,7 @@ public class Program { methodContext.put(oneClass.name, returnTypeAndMethod); - oneClass.typeCheck(); + oneClass.typeCheck(methodContext, typeContext, oneClass.methodDecls); } return null; } diff --git a/Source/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java b/Source/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java index 5538467..4085494 100644 --- a/Source/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java +++ b/Source/abstractSyntaxTree/StatementExpression/AssignStatementExpression.java @@ -33,9 +33,9 @@ public class AssignStatementExpression extends AbstractType implements IExpressi } @Override - public void CodeGen(MethodVisitor mv) throws Exception { - left.CodeGen(mv); - right.CodeGen(mv); + public void codeGen(MethodVisitor mv) throws Exception { + left.codeGen(mv); + right.codeGen(mv); if (left instanceof VarRefExpression varRef) { //TODO: Implement the handling of a variable reference --> I need a list of local variables diff --git a/Source/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java b/Source/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java index 3cfcc98..2907a43 100644 --- a/Source/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java +++ b/Source/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java @@ -6,6 +6,7 @@ import abstractSyntaxTree.Class.MethodDecl; import abstractSyntaxTree.Class.RefType; import abstractSyntaxTree.Expression.IExpression; import abstractSyntaxTree.Statement.IStatement; +import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -42,17 +43,12 @@ public class MethodCallStatementExpression extends AbstractType implements IExpr return result; } - @Override - public void codeGen(MethodVisitor mv) throws Exception { - - } - //Errors occur due to the change in parameter in the RefType class @Override - public void CodeGen(MethodVisitor mv) throws Exception { + public void codeGen(MethodVisitor mv) throws Exception { //Generate Bytecode for the receiver if(classThatHasTheMethodIfNotThis != null){ - classThatHasTheMethodIfNotThis.codeGen(); + classThatHasTheMethodIfNotThis.codeGen(new ClassWriter(ClassWriter.COMPUTE_FRAMES)); } else { mv.visitVarInsn(Opcodes.ALOAD, 0); } diff --git a/Source/abstractSyntaxTree/StatementExpression/NewStatementExpression.java b/Source/abstractSyntaxTree/StatementExpression/NewStatementExpression.java index 9992585..f54986c 100644 --- a/Source/abstractSyntaxTree/StatementExpression/NewStatementExpression.java +++ b/Source/abstractSyntaxTree/StatementExpression/NewStatementExpression.java @@ -13,7 +13,7 @@ public class NewStatementExpression extends AbstractType implements IExpression, } @Override - public void CodeGen(MethodVisitor mv) throws Exception { + public void codeGen(MethodVisitor mv) throws Exception { throw new Exception("CodeGen not implemented for NewStatementExpression"); } }