Skip to content

Parser: Wrong operator precedence #342

@phillipc

Description

@phillipc

Parser operator precedence inverts JS semantics for bitwise operators
File: packages/utils.parser/src/operators.ts:172–192

Issue: Bitwise operators |(12), ^(11), &(10) have higher precedence than relational (11) and equality (10) operators — the exact inverse of JavaScript. Expression a < b | c parses as a < (b | c) instead of (a < b) | c. ^ collides with < at 11; & collides with === at 10.

Current:

operators['|'].precedence = 12
operators['^'].precedence = 11
operators['&'].precedence = 10
operators['<'].precedence = 11
operators['==='].precedence = 10

Recommended (match JS/MDN precedence):

operators['<'].precedence = 12   // relational
operators['<='].precedence = 12
operators['>'].precedence = 12
operators['>='].precedence = 12
operators['=='].precedence = 11  // equality
operators['!='].precedence = 11
operators['==='].precedence = 11
operators['!=='].precedence = 11
operators['&'].precedence = 10   // bitwise AND
operators['^'].precedence = 9    // bitwise XOR
operators['|'].precedence = 8    // bitwise OR

Detected in #297

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions