ceylon / ceylon.ast

Apache License 2.0
18 stars 3 forks source link

too picky about precedence (violated is AssigningExpression right) #121

Closed jvasileff closed 8 years ago

jvasileff commented 8 years ago

The typechecker accepts

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)
lucaswerkmeister commented 8 years ago

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.