dplassgit / d2lang

D2 is a strongly-typed, statically-typed, (mostly) inferred-type compiled language.
MIT License
6 stars 0 forks source link

Java compile-time exception when an unknown variable is used in a unary expression #217

Closed dplassgit closed 1 year ago

dplassgit commented 1 year ago
Exception in thread "main" java.lang.IllegalArgumentException: Cannot set to unknown
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
        at com.plasstech.lang.d2.parse.node.AbstractNode.setVarType(AbstractNode.java:32)
        at com.plasstech.lang.d2.parse.node.UnaryNode.setVarType(UnaryNode.java:30)
        at com.plasstech.lang.d2.type.StaticChecker.visit(StaticChecker.java:725)
        at com.plasstech.lang.d2.parse.node.UnaryNode.accept(UnaryNode.java:44)
        at com.plasstech.lang.d2.type.StaticChecker.visit(StaticChecker.java:735)
        at com.plasstech.lang.d2.parse.node.IfNode.accept(IfNode.java:53)
        at com.plasstech.lang.d2.type.StaticChecker.lambda$visit$1(StaticChecker.java:755)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at com.plasstech.lang.d2.type.StaticChecker.visit(StaticChecker.java:753)
        at com.plasstech.lang.d2.parse.node.IfNode.accept(IfNode.java:53)
        at com.plasstech.lang.d2.type.StaticChecker.lambda$visit$1(StaticChecker.java:755)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at com.plasstech.lang.d2.type.StaticChecker.visit(StaticChecker.java:753)
        at com.plasstech.lang.d2.parse.node.IfNode.accept(IfNode.java:53)
        at com.plasstech.lang.d2.parse.node.BlockNode.lambda$accept$0(BlockNode.java:35)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at com.plasstech.lang.d2.parse.node.BlockNode.accept(BlockNode.java:35)
        at com.plasstech.lang.d2.type.StaticChecker.visit(StaticChecker.java:960)
        at com.plasstech.lang.d2.parse.node.ProcedureNode.accept(ProcedureNode.java:55)
        at com.plasstech.lang.d2.parse.node.BlockNode.lambda$accept$0(BlockNode.java:35)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at com.plasstech.lang.d2.parse.node.BlockNode.accept(BlockNode.java:35)
        at com.plasstech.lang.d2.parse.node.ProgramNode.accept(ProgramNode.java:18)
        at com.plasstech.lang.d2.type.StaticChecker.execute(StaticChecker.java:193)
        at com.plasstech.lang.d2.type.StaticChecker.execute(StaticChecker.java:173)
        at com.plasstech.lang.d2.D2Compiler.main(D2Compiler.java:53)

I think this is similar to another bug where a global is referenced in a proc before it's defined?

dplassgit commented 1 year ago

The "fix" is a more expansive catch of IAE.