From a8c44dc13b206b3e9e3c9a991d40aaa243691cf3 Mon Sep 17 00:00:00 2001 From: ahmad Date: Sat, 11 May 2024 11:44:28 +0200 Subject: [PATCH] Implemented typeCheck of TypedFieldVarAccess --- .../typedclass/TypedFieldVarAccess.java | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedFieldVarAccess.java b/src/main/java/de/maishai/typedast/typedclass/TypedFieldVarAccess.java index d21bd72..490a11a 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedFieldVarAccess.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedFieldVarAccess.java @@ -3,7 +3,6 @@ package de.maishai.typedast.typedclass; import de.maishai.ast.records.*; import de.maishai.typedast.MethodContext; import de.maishai.typedast.TypedExpression; -import de.maishai.typedast.TypedNode; import de.maishai.typedast.Type; import lombok.Data; import lombok.NoArgsConstructor; @@ -28,21 +27,38 @@ public class TypedFieldVarAccess implements TypedExpression { field = unTypedFieldVarAccess.field(); recursiveOwnerChain = getKindOfExpression(localVar, clas, unTypedFieldVarAccess.recursiveOwnerChain()); name = unTypedFieldVarAccess.id(); - type = localVar.get(unTypedFieldVarAccess.id()); + + if(field) { + if (clas.isThereField(name)) { + type = clas.getFieldType(name); + } + } else if(localVar.containsKey(name)){ + type = localVar.get(name); + }else{ + throw new RuntimeException("Variable not declared"); + } + + + } @Override public Type typeCheck(Map localVar, TypedClass clas) { - Type type = localVar.get(name); - if (type == null) { - //TODO: check if field variable or local variable - if(name.startsWith("this.")){ - type = localVar.get(name.substring(5)); - }else{ - throw new RuntimeException("Variable " + name + " not declared"); + + if(field){ + if(clas.isThereField(name)){ + type = clas.getFieldType(name); + } + }else{ + if(clas.isParameterWitNameInMethod(name)){ + type = clas.getParameterType(name); + }else if(localVar.containsKey(name)){ + type = localVar.get(name); } } + + return type; }