diff --git a/src/main/java/de/hsrm/compiler/Klang/types/NamedType.java b/src/main/java/de/hsrm/compiler/Klang/types/NamedType.java index 8ea4bdf..3dd028a 100644 --- a/src/main/java/de/hsrm/compiler/Klang/types/NamedType.java +++ b/src/main/java/de/hsrm/compiler/Klang/types/NamedType.java @@ -21,7 +21,7 @@ public class NamedType extends Type { @Override public Type combine(Type that) { - if(this.equals(that)) { + if(this.equals(that) || (that instanceof NullType)) { return this; } diff --git a/src/test/java/NaughtTest.java b/src/test/java/NaughtTest.java new file mode 100644 index 0000000..14c057f --- /dev/null +++ b/src/test/java/NaughtTest.java @@ -0,0 +1,72 @@ +import de.hsrm.compiler.Klang.ContextAnalysis; +import org.antlr.v4.runtime.tree.ParseTree; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class NaughtTest { + @Test + void shouldBeComparableToStruct() { + ParseTree tree = Helper.prepareParser(""" + struct bar { a: int; } + + function foo(): int { + let a: bar = create bar(1); + if (a == naught) { + return -1; + } + return 1; + } + + foo(); + """); + var ctxAnal = new ContextAnalysis( + Helper.getFuncs(tree), + Helper.getStructs(tree), + Helper.getEnums(tree) + ); + + assertDoesNotThrow(() -> ctxAnal.visit(tree)); + } + + @Test + void shouldBeAssignableToStruct() { + ParseTree tree = Helper.prepareParser(""" + struct bar { a: int; } + + function foo(): int { + let a: bar = naught; + return 1; + } + + foo(); + """); + var ctxAnal = new ContextAnalysis( + Helper.getFuncs(tree), + Helper.getStructs(tree), + Helper.getEnums(tree) + ); + + assertDoesNotThrow(() -> ctxAnal.visit(tree)); + } + + @Test + void shouldBeReturnable() { + ParseTree tree = Helper.prepareParser(""" + struct bar { a: int; } + + function foo(): bar { + return naught; + } + + foo(); + """); + var ctxAnal = new ContextAnalysis( + Helper.getFuncs(tree), + Helper.getStructs(tree), + Helper.getEnums(tree) + ); + + assertDoesNotThrow(() -> ctxAnal.visit(tree)); + } +} \ No newline at end of file