From 622a0951f3d919daac84d7fc8c59695661bcba06 Mon Sep 17 00:00:00 2001 From: Ahmad Date: Wed, 8 May 2024 16:30:52 +0200 Subject: [PATCH] Updated the method converToTypedAST --- .../typedast/typedclass/TypedAssignment.java | 7 ------- .../de/maishai/typedast/typedclass/TypedBlock.java | 13 +++++++------ .../de/maishai/typedast/typedclass/TypedBreak.java | 5 +++++ .../maishai/typedast/typedclass/TypedDoWhile.java | 3 ++- .../de/maishai/typedast/typedclass/TypedField.java | 3 ++- .../de/maishai/typedast/typedclass/TypedFor.java | 4 +++- .../de/maishai/typedast/typedclass/TypedIfElse.java | 7 +++++-- .../de/maishai/typedast/typedclass/TypedMethod.java | 13 ++++++------- .../maishai/typedast/typedclass/TypedParameter.java | 10 ++++++++-- .../de/maishai/typedast/typedclass/TypedWhile.java | 3 ++- 10 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java b/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java index a53f1b1..4281e28 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java @@ -31,13 +31,6 @@ public class TypedAssignment implements TypedStatement { } throw new RuntimeException("type of left not equals with type of right"); } - // int y = 5; - // int x = (y + 5 + z); - //TypedAssignment([ - // localVar("x", "int"), - // localVar("y","int") - // ], - // "int") @Override public TypedNode convertToTypedAST(Map localVar, Map classes, de.maishai.ast.records.Node unTypedAST) { diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedBlock.java b/src/main/java/de/maishai/typedast/typedclass/TypedBlock.java index 27f0454..ad51f5c 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedBlock.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedBlock.java @@ -9,6 +9,7 @@ import de.maishai.typedast.Type; import lombok.Data; import org.objectweb.asm.MethodVisitor; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -51,18 +52,18 @@ public class TypedBlock implements TypedNode { public TypedNode convertToTypedAST(Map localVar, Map classes, de.maishai.ast.records.Node unTypedAST) { Block untyped = (Block) unTypedAST; TypedBlock typedBlock = new TypedBlock(); + typedBlock.setStmts(new ArrayList<>()); + typedBlock.setVars(new ArrayList<>()); for (Declaration var : untyped.localVariables()) { TypedLocalVariable typedVar = new TypedLocalVariable(); - typedVar.convertToTypedAST(localVar, classes, var); + typedVar.setName(var.name()); + typedVar.setType(var.type()); typedBlock.getVars().add(typedVar); } + typedBlock.getStmts().add((TypedStatement) untyped.stmts()); - for (de.maishai.ast.records.Statement stmt : untyped.stmts()) { - - //TODO: Implement the conversion of the statements - } - return null; + return typedBlock; } public void codeGen(MethodVisitor mv, MethodContext ctx) { diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedBreak.java b/src/main/java/de/maishai/typedast/typedclass/TypedBreak.java index c4e4cdd..a780c82 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedBreak.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedBreak.java @@ -1,5 +1,6 @@ package de.maishai.typedast.typedclass; +import de.maishai.ast.records.Break; import de.maishai.typedast.MethodContext; import de.maishai.typedast.TypedNode; import de.maishai.typedast.TypedStatement; @@ -17,6 +18,10 @@ public class TypedBreak implements TypedStatement { @Override public TypedNode convertToTypedAST(Map localVar, Map classes, de.maishai.ast.records.Node unTypedAST) { + Break untyped = (Break) unTypedAST; + if(untyped == null) { + throw new RuntimeException("Break not found"); + } return new TypedBreak(); } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedDoWhile.java b/src/main/java/de/maishai/typedast/typedclass/TypedDoWhile.java index 074d998..3b499f8 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedDoWhile.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedDoWhile.java @@ -24,7 +24,8 @@ public class TypedDoWhile implements TypedStatement { DoWhile untyped = (DoWhile) unTypedAST; TypedDoWhile typedDoWhile = new TypedDoWhile(); - typedDoWhile.setTypedBlock( (TypedBlock) typedBlock.convertToTypedAST(localVar, classes, untyped.block())); + TypedBlock typedBlock = new TypedBlock(); + typedDoWhile.setTypedBlock(typedBlock.unTypedBlockToTypedBlock(untyped.block())); typedDoWhile.setCond((TypedExpression) cond.convertToTypedAST(localVar, classes, untyped.cond())); return typedDoWhile; diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedField.java b/src/main/java/de/maishai/typedast/typedclass/TypedField.java index c0810ae..aeb9925 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedField.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedField.java @@ -39,8 +39,9 @@ public class TypedField implements TypedNode { public TypedNode convertToTypedAST(Map localVar, Map classes, de.maishai.ast.records.Node unTypedAST) { Declaration untypedDeclaration = (Declaration) unTypedAST; TypedField typedField = new TypedField(); - typedField.setVarName(untypedDeclaration.name()); + typedField.setType(untypedDeclaration.type()); + typedField.setVarName(untypedDeclaration.name()); return typedField; } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedFor.java b/src/main/java/de/maishai/typedast/typedclass/TypedFor.java index de83cee..9979504 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedFor.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedFor.java @@ -34,7 +34,9 @@ public class TypedFor implements TypedStatement { typedFor.setAssign((TypedExpression) assign.convertToTypedAST(localVar, classes, untyped.assign())); typedFor.setCond((TypedExpression) cond.convertToTypedAST(localVar, classes, untyped.cond())); typedFor.setInc((TypedExpression) inc.convertToTypedAST(localVar, classes, untyped.inc())); - typedFor.setTypedBlock((TypedBlock) typedBlock.convertToTypedAST(localVar, classes, untyped.block())); + + TypedBlock typedBlock = new TypedBlock(); + typedFor.setTypedBlock(typedBlock.unTypedBlockToTypedBlock(untyped.block())); return typedFor; } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java b/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java index afb8b6f..6c0fe4e 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java @@ -32,8 +32,11 @@ public class TypedIfElse implements TypedStatement { TypedIfElse typedIfElse = new TypedIfElse(); typedIfElse.setTypedCon((TypedExpression) typedCon.convertToTypedAST(localVar, classes, ifElse.cond())); - typedIfElse.setIfTypedBlock((TypedBlock) ifTypedBlock.convertToTypedAST(localVar, classes, ifElse.ifBlock())); - typedIfElse.setElseTypedBlock((TypedBlock) elseTypedBlock.convertToTypedAST(localVar, classes, ifElse.elseBlock())); + + TypedBlock ifTypedBlock = new TypedBlock(); + TypedBlock elseTypedBlock = new TypedBlock(); + typedIfElse.setIfTypedBlock(ifTypedBlock.unTypedBlockToTypedBlock(ifElse.ifBlock())); + typedIfElse.setElseTypedBlock(elseTypedBlock.unTypedBlockToTypedBlock(ifElse.elseBlock())); return typedIfElse; } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedMethod.java b/src/main/java/de/maishai/typedast/typedclass/TypedMethod.java index cbfdf3b..6526e89 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedMethod.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedMethod.java @@ -8,12 +8,12 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import java.util.ArrayList; import java.util.List; import java.util.Map; @Data public class TypedMethod implements TypedNode { - private Boolean isPublic; private String name; private Type returnType; private List typedParameters; @@ -50,20 +50,19 @@ public class TypedMethod implements TypedNode { Method untypedMethod = (Method) unTypedAST; TypedMethod typedMethod = new TypedMethod(); + typedMethod.setTypedParameters(new ArrayList<>()); typedMethod.setName(untypedMethod.methodName()); typedMethod.setReturnType(untypedMethod.type()); - if(untypedMethod.params().isEmpty()){ - //TODO: Implement this - } - for(Parameter parameter : untypedMethod.params()) { - TypedParameter typedParameter = getTypedParameter(parameter); + TypedParameter typedParameter = new TypedParameter(); + typedParameter.setParaName(parameter.name()); + typedParameter.setType(parameter.type()); typedMethod.getTypedParameters().add(typedParameter); } TypedBlock typedBlock = new TypedBlock(); - typedMethod.setTypedBlock((TypedBlock) typedBlock.convertToTypedAST(localVar, classes, untypedMethod.block())); + typedMethod.setTypedBlock(typedBlock.unTypedBlockToTypedBlock(untypedMethod.block())); return typedMethod; } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedParameter.java b/src/main/java/de/maishai/typedast/typedclass/TypedParameter.java index c385734..7da26f3 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedParameter.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedParameter.java @@ -1,15 +1,18 @@ package de.maishai.typedast.typedclass; +import de.maishai.ast.records.Parameter; import de.maishai.typedast.TypedNode; import de.maishai.typedast.Type; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import java.util.Map; @AllArgsConstructor @RequiredArgsConstructor +@NoArgsConstructor @Data public class TypedParameter implements TypedNode { private String paraName; @@ -23,10 +26,13 @@ public class TypedParameter implements TypedNode { localVar.put(paraName, type); return type; } - @Override public TypedNode convertToTypedAST(Map localVar, Map classes, de.maishai.ast.records.Node unTypedAST) { - return null; + Parameter untyped = (Parameter) unTypedAST; + TypedParameter typedParameter = new TypedParameter(); + typedParameter.setParaName(untyped.name()); + typedParameter.setType(untyped.type()); + return typedParameter; } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java b/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java index 0e50247..c98ebf7 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java @@ -24,7 +24,8 @@ public class TypedWhile implements TypedStatement { While untyped = (While) unTypedAST; TypedWhile typedWhile = new TypedWhile(); typedWhile.setCond((TypedExpression) cond.convertToTypedAST(localVar, classes, untyped.cond())); - typedWhile.setTypedBlock((TypedBlock) typedBlock.convertToTypedAST(localVar, classes, untyped.block())); + TypedBlock typedBlock = new TypedBlock(); + typedWhile.setTypedBlock(typedBlock.unTypedBlockToTypedBlock(untyped.block())); return typedWhile; }