diff --git a/src/main/java/de/maishai/typedast/ExceptionHandler/InvalidWhileConditionException.java b/src/main/java/de/maishai/typedast/ExceptionHandler/InvalidWhileConditionException.java new file mode 100644 index 0000000..b63adac --- /dev/null +++ b/src/main/java/de/maishai/typedast/ExceptionHandler/InvalidWhileConditionException.java @@ -0,0 +1,7 @@ +package de.maishai.typedast.ExceptionHandler; + +public class InvalidWhileConditionException extends RuntimeException{ + public InvalidWhileConditionException() { + super("Invalid while condition"); + } +} diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedDeclaration.java b/src/main/java/de/maishai/typedast/typedclass/TypedDeclaration.java index 7039786..e37c6bc 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedDeclaration.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedDeclaration.java @@ -19,11 +19,11 @@ public final class TypedDeclaration implements TypedNode { private Type type; public TypedDeclaration(TypedProgram typedProgram, Declaration declaration) { - convertToTypedDeclaration(typedProgram, declaration); + convertToTypedDeclaration(declaration); typeCheck(typedProgram); } - private void convertToTypedDeclaration(TypedProgram typedProgram, Declaration declaration) { + private void convertToTypedDeclaration(Declaration declaration) { name = declaration.name(); type = declaration.type(); } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java b/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java index d9f50cf..2481951 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedIfElse.java @@ -35,15 +35,17 @@ public class TypedIfElse implements TypedStatement { @Override public Type typeCheck(TypedProgram typedProgram) { + Type ifType = ifTypedBlock.typeCheck(typedProgram); + Type elseType = elseTypedBlock.typeCheck(typedProgram); - if (ifTypedBlock.typeCheck(typedProgram) == elseTypedBlock.typeCheck(typedProgram)) { - type = ifTypedBlock.typeCheck(typedProgram); + if (ifType == elseType) { + type = ifType; } - if (elseTypedBlock.typeCheck(typedProgram) == Type.VOID) { - type = ifTypedBlock.typeCheck(typedProgram); + if (elseType == Type.VOID) { + type = ifType; } - if (ifTypedBlock.typeCheck(typedProgram) == Type.VOID) { - type = elseTypedBlock.typeCheck(typedProgram); + if (ifType == Type.VOID) { + type = elseType; } return type; diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java b/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java index 475a9d2..4bf5b91 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedWhile.java @@ -1,6 +1,7 @@ package de.maishai.typedast.typedclass; import de.maishai.ast.records.While; +import de.maishai.typedast.ExceptionHandler.InvalidWhileConditionException; import de.maishai.typedast.MethodContext; import de.maishai.typedast.Type; import de.maishai.typedast.TypedExpression; @@ -28,11 +29,10 @@ public class TypedWhile implements TypedStatement { cond = convertExpression(typedProgram, unTypedWhile.cond()); typedBlock = new TypedBlock(typedProgram, unTypedWhile.block()); } - @Override public Type typeCheck(TypedProgram typedProgram) { if (cond.typeCheck(typedProgram) != Type.BOOL) { - throw new RuntimeException("While condition must be a boolean"); + throw new InvalidWhileConditionException(); } type = typedBlock.typeCheck(typedProgram); return type;