fuzion
fuzion copied to clipboard
`x.this.type` should report an error if `x` is not an outer feature.
see this:
> cat test_wrong_this.fz
test_wrong_this is
a is
say b.this.type
b is
say a.this.type
c : a is
d : b is
a
b
c
d
unit
> ./build/bin/fz test_wrong_this.fz
Type of 'test_wrong_this'
Type of 'test_wrong_this'
Type of 'test_wrong_this'
Type of 'test_wrong_this'
with contracts enabled:
error 1: java.lang.Error: check-condition failed: dev.flang.air.Clazz:findOuter:2172
at dev.flang.util.ANY.check(ANY.java:423)
at dev.flang.air.Clazz.findOuter(Clazz.java:2172)
at dev.flang.air.Clazz.replaceThisType(Clazz.java:666)
at dev.flang.air.Clazz.lambda$actualGenerics$2(Clazz.java:726)
at dev.flang.util.List.map(List.java:460)
at dev.flang.air.Clazz.actualGenerics(Clazz.java:726)
at dev.flang.air.Clazzes.findClazzes(Clazzes.java:727)
at dev.flang.air.Clazz$EV.action(Clazz.java:133)
at dev.flang.ast.Expr.visitExpressions(Expr.java:258)
at dev.flang.ast.AbstractCall.visitExpressions(AbstractCall.java:101)
at dev.flang.ast.Box.visitExpressions(Box.java:155)
at dev.flang.ast.AbstractCall.visitExpressions(AbstractCall.java:95)
at dev.flang.ast.AbstractBlock.visitExpressions(AbstractBlock.java:99)
at dev.flang.ast.AbstractFeature.visitExpressions(AbstractFeature.java:1444)
at dev.flang.air.Clazz.inspectCode(Clazz.java:1504)
at dev.flang.air.Clazz.findAllClasses(Clazz.java:1551)
at dev.flang.air.Clazzes.findAllClasses(Clazzes.java:411)
at dev.flang.fuir.FUIR.<init>(FUIR.java:200)
at dev.flang.opt.Optimizer.fuir(Optimizer.java:73)
at dev.flang.tools.Fuzion$Backend.processFrontEnd(Fuzion.java:454)
at dev.flang.tools.Fuzion.lambda$parseArgsForBackend$3(Fuzion.java:920)
at dev.flang.tools.Tool.lambda$run$0(Tool.java:140)
at dev.flang.util.Errors.runAndExit(Errors.java:878)
at dev.flang.tools.Tool.run(Tool.java:140)
at dev.flang.tools.Fuzion.main(Fuzion.java:569)
Still broken, here is a smaller example:
> PRECONDITIONS=true POSTCONDITIONS=true ./build//bin/fz -e "say unit.this.type"
error 1: java.lang.Error: check-condition failed: Clazz.java:2181 "(Errors.any() || i == o || i != null && i.isThisRef() && i.inheritsFrom(o));"
at dev.flang.util.ANY.check(ANY.java:439)
at dev.flang.air.Clazz.findOuter(Clazz.java:2181)