class A(shared variable Anything b = null) {}
A().b = () => "violated is AssigningExpression right";
but ceylon.ast throws:
Assertion failed: Check precedence
unviolated is ThenElseExpression left = expressionToCeylon(assignOperation.leftTerm, update)
violated is AssigningExpression right = expressionToCeylon(assignOperation.rightTerm, update)
ceylon.language.AssertionError "Assertion failed: Check precedence
unviolated is ThenElseExpression left = expressionToCeylon(assignOperation.leftTerm, update)
violated is AssigningExpression right = expressionToCeylon(assignOperation.rightTerm, update)"
at ceylon.ast.redhat.assignOperationToCeylon_.assignOperationToCeylon(AssignOperation.ceylon:16)
at ceylon.ast.redhat.assignmentOperationToCeylon_.assignmentOperationToCeylon(AssignmentOperation.ceylon:20)
at ceylon.ast.redhat.assignmentStatementToCeylon_.assignmentStatementToCeylon(AssignmentStatement.ceylon:16)
at ceylon.ast.redhat.expressionStatementToCeylon_.expressionStatementToCeylon(ExpressionStatement.ceylon:20)
It looks like the parser accepts any expression to the right-hand side of any assigning expression (including +=), so precedence just doesn’t exist on the rhs apparently.
The typechecker accepts
but
ceylon.ast
throws: