Some small changes for SemanticAnalyzer
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
Bruder John 2024-07-05 09:13:27 +02:00
parent 5a12d61623
commit dbde4e8047
35 changed files with 32 additions and 8 deletions

View File

@ -4,5 +4,6 @@ public enum TypeEnum {
VOID, VOID,
INT, INT,
CHAR, CHAR,
BOOL BOOL,
NULL
} }

View File

@ -254,6 +254,11 @@ public class SemanticAnalyzer implements SemanticVisitor {
return new TypeCheckResult(true, type); return new TypeCheckResult(true, type);
} else if (currentScope.getLocalVar(toCheck.identifier) != null) { } else if (currentScope.getLocalVar(toCheck.identifier) != null) {
var type = currentScope.getLocalVar(toCheck.identifier); var type = currentScope.getLocalVar(toCheck.identifier);
MemberAccessNode memberAccessNode = new MemberAccessNode(false);
memberAccessNode.identifiers.add(currentClass.identifier);
memberAccessNode.identifiers.add(toCheck.identifier);
toCheck.memberAccess = memberAccessNode;
toCheck.setTypeNode(type);
return new TypeCheckResult(true, type); return new TypeCheckResult(true, type);
} }
} }
@ -328,7 +333,16 @@ public class SemanticAnalyzer implements SemanticVisitor {
if (toCheck.target != null) { if (toCheck.target != null) {
if(toCheck.target.memberAccess == null){ if(toCheck.target.memberAccess == null){
MemberAccessNode memberAccessNode = new MemberAccessNode(false); MemberAccessNode memberAccessNode = new MemberAccessNode(false);
var identifierType = currentFields.get(toCheck.target.identifier);
if(identifierType == null){
identifierType = currentScope.getLocalVar(toCheck.target.identifier);
}
if(identifierType instanceof ReferenceType referenceType){
memberAccessNode.identifiers.add(referenceType.getIdentifier());
} else {
memberAccessNode.identifiers.add(currentClass.identifier); memberAccessNode.identifiers.add(currentClass.identifier);
}
memberAccessNode.identifiers.add(toCheck.target.identifier); memberAccessNode.identifiers.add(toCheck.target.identifier);
toCheck.target.memberAccess = memberAccessNode; toCheck.target.memberAccess = memberAccessNode;
} }
@ -688,6 +702,9 @@ public class SemanticAnalyzer implements SemanticVisitor {
case BOOLEAN_VALUE -> { case BOOLEAN_VALUE -> {
return new TypeCheckResult(true, new BaseType(TypeEnum.BOOL)); return new TypeCheckResult(true, new BaseType(TypeEnum.BOOL));
} }
case NULL_VALUE -> {
return new TypeCheckResult(true, currentNullType);
}
default -> { default -> {
return new TypeCheckResult(false, null); return new TypeCheckResult(false, null);
} }

View File

@ -1,8 +1,14 @@
public class If { public class Class1 {
public If() { public int test(){
int intValue = 5; Class2 class2 = new Class2();
if(intValue == 5) { int a = class2.test();
intValue--; return a;
} }
} }
public class Class2
{
public int test(){
return 6+2*2;
}
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.