type neg is (int n) where n < 0
type pos is (int n) where n > 0
type exp1 is neg | {exp1 rest}
type exp2 is pos | {exp2 rest}
function f(exp1 e1) -> exp2:
return (exp2) e1
This currently generates an internal failure:
wycc.lang.Syntactic$Exception
at wyil.check.FlowTypeCheck.internalFailure(FlowTypeCheck.java:3486)
at wyil.check.FlowTypeCheck.checkStatement(FlowTypeCheck.java:406)
at wyil.check.FlowTypeCheck.checkBlock(FlowTypeCheck.java:330)
at wyil.check.FlowTypeCheck.checkFunctionOrMethodDeclaration(FlowTypeCheck.java:272)
at wyil.check.FlowTypeCheck.checkDeclaration(FlowTypeCheck.java:210)
at wyil.check.FlowTypeCheck.checkUnit(FlowTypeCheck.java:223)
at wyil.check.FlowTypeCheck.checkDeclaration(FlowTypeCheck.java:194)
at wyil.check.FlowTypeCheck.check(FlowTypeCheck.java:182)
Test
001135
is this:This currently generates an internal failure: