From 0cf471578282fe13a6426735c83fe6831a88c0db Mon Sep 17 00:00:00 2001 From: i22035 Date: Thu, 4 Jul 2024 22:24:50 +0200 Subject: [PATCH] Fixes of Constructor --- src/main/java/ast/members/ConstructorNode.java | 6 +----- src/main/java/bytecode/MethodCodeGen.java | 2 +- src/main/java/semantic/SemanticAnalyzer.java | 9 ++------- src/test/resources/input/endabgabeTests/Person.java | 7 +++++++ 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/ast/members/ConstructorNode.java b/src/main/java/ast/members/ConstructorNode.java index 33a0f25..4cfe5e8 100644 --- a/src/main/java/ast/members/ConstructorNode.java +++ b/src/main/java/ast/members/ConstructorNode.java @@ -11,12 +11,8 @@ import java.util.List; import java.util.Objects; public class ConstructorNode extends MethodNode implements Visitable { - public AccessModifierNode accessType; - public String identifier; - public List parameters = new ArrayList<>(); - public ConstructorNode(String accessType, String identifier, BlockNode block) { - this.accessType = new AccessModifierNode(accessType); + this.accesModifier = new AccessModifierNode(accessType); this.identifier = identifier; this.block = block; } diff --git a/src/main/java/bytecode/MethodCodeGen.java b/src/main/java/bytecode/MethodCodeGen.java index 3f72de5..fd18370 100644 --- a/src/main/java/bytecode/MethodCodeGen.java +++ b/src/main/java/bytecode/MethodCodeGen.java @@ -53,7 +53,7 @@ public class MethodCodeGen implements bytecode.visitor.MethodVisitor { @Override public void visit(ConstructorNode constructorNode) { methodVisitor = - classWriter.visitMethod(mapper.mapAccessTypeToOpcode(constructorNode.accessType), + classWriter.visitMethod(mapper.mapAccessTypeToOpcode(constructorNode.accesModifier), "", mapper.generateMethodDescriptor(new BaseType(TypeEnum.VOID), constructorNode.parameters), null, diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java index c0be3cf..4c4ec07 100644 --- a/src/main/java/semantic/SemanticAnalyzer.java +++ b/src/main/java/semantic/SemanticAnalyzer.java @@ -1,6 +1,5 @@ package semantic; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -25,15 +24,11 @@ import ast.statementexpressions.methodcallstatementnexpressions.ChainedMethodNod import ast.statementexpressions.methodcallstatementnexpressions.MethodCallNode; import ast.statementexpressions.methodcallstatementnexpressions.TargetNode; import ast.statements.*; -import ast.type.AccessModifierNode; import ast.type.EnumAccessModifierNode; import ast.type.ValueNode; import ast.type.type.*; -import com.sun.jdi.IntegerType; -import semantic.context.ClassContext; import semantic.context.Context; import semantic.exceptions.*; -import semantic.TypeCheckResult; public class SemanticAnalyzer implements SemanticVisitor { @@ -311,7 +306,7 @@ public class SemanticAnalyzer implements SemanticVisitor { var resultIf = toCheck.ifStatement.accept(this); var validElseIf = true; - if(toCheck.elseIfStatements.size() != 0) { + if(!toCheck.elseIfStatements.isEmpty()) { for(IfNode ifNode : toCheck.elseIfStatements) { var resultIfFor = ifNode.accept(this); validElseIf = validElseIf && resultIfFor.isValid(); @@ -365,6 +360,7 @@ public class SemanticAnalyzer implements SemanticVisitor { if (toCheck.target.thisTar) { var type = getTypeFromMethod(toCheck, new ReferenceType(currentClass.identifier)); if (type != null) { + toCheck.type = type; return new TypeCheckResult(true, type); } } @@ -376,7 +372,6 @@ public class SemanticAnalyzer implements SemanticVisitor { } } } else { - ReferenceType reference = new ReferenceType(currentClass.identifier); if (!toCheck.chainedMethods.isEmpty()) { for (ChainedMethodNode chainedMethod : toCheck.chainedMethods) { diff --git a/src/test/resources/input/endabgabeTests/Person.java b/src/test/resources/input/endabgabeTests/Person.java index 2285bc4..f7aa503 100644 --- a/src/test/resources/input/endabgabeTests/Person.java +++ b/src/test/resources/input/endabgabeTests/Person.java @@ -8,4 +8,11 @@ public class Person { public int getAge() { return this.age; } +} + +public class Person2 { + public void greet() { + Person person = new Person(10); + person.getAge(); + } } \ No newline at end of file