dplassgit / d2lang

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

Compile-time Java exception for `length(string)` #211

Closed dplassgit closed 1 year ago

dplassgit commented 1 year ago

Possibly caused by:

p:proc(v:value) {
  hash = 17 + length(string)  /// note: STRING not "v"
}
Exception in thread "main" java.lang.ClassCastException: com.plasstech.lang.d2.lex.Token cannot be cast to com.plasstech.lang.d2.lex.ConstToken
        at com.plasstech.lang.d2.parse.Parser.atom(Parser.java:814)
        at com.plasstech.lang.d2.parse.Parser.compositeDereference(Parser.java:767)
        at com.plasstech.lang.d2.parse.Parser.unary(Parser.java:751)
        at com.plasstech.lang.d2.parse.Parser.lambda$mulDiv$10(Parser.java:638)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.mulDiv(Parser.java:638)
        at com.plasstech.lang.d2.parse.Parser.lambda$addSub$9(Parser.java:634)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.addSub(Parser.java:634)
        at com.plasstech.lang.d2.parse.Parser.lambda$shift$8(Parser.java:630)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.shift(Parser.java:630)
        at com.plasstech.lang.d2.parse.Parser.lambda$compare$7(Parser.java:626)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.compare(Parser.java:618)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolAnd$6(Parser.java:613)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolAnd(Parser.java:613)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolXor$5(Parser.java:609)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolXor(Parser.java:609)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolOr$4(Parser.java:605)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolOr(Parser.java:605)
        at com.plasstech.lang.d2.parse.Parser.expr(Parser.java:601)
        at com.plasstech.lang.d2.parse.Parser.unary(Parser.java:738)
        at com.plasstech.lang.d2.parse.Parser.lambda$mulDiv$10(Parser.java:638)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.mulDiv(Parser.java:638)
        at com.plasstech.lang.d2.parse.Parser.lambda$addSub$9(Parser.java:634)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:658)
        at com.plasstech.lang.d2.parse.Parser.addSub(Parser.java:634)
        at com.plasstech.lang.d2.parse.Parser.lambda$shift$8(Parser.java:630)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.shift(Parser.java:630)
        at com.plasstech.lang.d2.parse.Parser.lambda$compare$7(Parser.java:626)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.compare(Parser.java:618)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolAnd$6(Parser.java:613)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolAnd(Parser.java:613)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolXor$5(Parser.java:609)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolXor(Parser.java:609)
        at com.plasstech.lang.d2.parse.Parser.lambda$boolOr$4(Parser.java:605)
        at com.plasstech.lang.d2.parse.Parser.binOpFn(Parser.java:653)
        at com.plasstech.lang.d2.parse.Parser.boolOr(Parser.java:605)
        at com.plasstech.lang.d2.parse.Parser.expr(Parser.java:601)
        at com.plasstech.lang.d2.parse.Parser.startsWithVariableStmt(Parser.java:270)
        at com.plasstech.lang.d2.parse.Parser.statement(Parser.java:231)
        at com.plasstech.lang.d2.parse.Parser.statements(Parser.java:160)
        at com.plasstech.lang.d2.parse.Parser.block(Parser.java:177)
        at com.plasstech.lang.d2.parse.Parser.procedureDecl(Parser.java:418)
        at com.plasstech.lang.d2.parse.Parser.declaration(Parser.java:349)
        at com.plasstech.lang.d2.parse.Parser.startsWithVariableStmt(Parser.java:275)
        at com.plasstech.lang.d2.parse.Parser.statement(Parser.java:231)
        at com.plasstech.lang.d2.parse.Parser.statements(Parser.java:160)
        at com.plasstech.lang.d2.parse.Parser.program(Parser.java:150)
        at com.plasstech.lang.d2.parse.Parser.parse(Parser.java:127)
        at com.plasstech.lang.d2.parse.Parser.execute(Parser.java:117)
        at com.plasstech.lang.d2.D2Compiler.main(D2Compiler.java:42)
dplassgit commented 1 year ago

This is because TokenType.STRING indicates the keyword STRING but it is overloaded in ConstToken to indicate "string literal"