Skip to content

Commit e62d99b

Browse files
authored
fix: Member precedence (#33)
1 parent 6afe55e commit e62d99b

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

src/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ function parseExpression(tokens: Token[], minBindingPower: number = 0): Expressi
216216
lhs = { type: 'MemberExpression', object: lhs, property: rhs!, computed: true }
217217
}
218218
} else if (token.value === '.') {
219-
const rhs = parseExpression(tokens, 0)
219+
const rhs = parseExpression(tokens, leftBindingPower)
220220
lhs = { type: 'MemberExpression', object: lhs, property: rhs, computed: false }
221221
} else if (token.value === '--' || token.value === '++') {
222222
lhs = { type: 'UpdateExpression', operator: token.value as UpdateOperator, prefix: false, argument: lhs }

tests/parser.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,14 @@ describe('parser', () => {
236236
{
237237
type: 'ExpressionStatement',
238238
expression: {
239-
type: 'MemberExpression',
240-
object: { type: 'Identifier', name: 'array' },
241-
property: { type: 'CallExpression', callee: { type: 'Identifier', name: 'length' }, arguments: [] },
242-
computed: false,
239+
type: 'CallExpression',
240+
callee: {
241+
type: 'MemberExpression',
242+
object: { type: 'Identifier', name: 'array' },
243+
property: { type: 'Identifier', name: 'length' },
244+
computed: false,
245+
},
246+
arguments: [],
243247
},
244248
},
245249
])

tests/precedence.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ colRel = vec3(float(rel1), float(rel2), float(rel3));
7070
colLog = vec3(float(log1), float(log2), float(log3));
7171
colTern = vec3((tern1 + tern2) / 20.0, 0.5, 0.0);
7272
colBits = vec3(float(bit1 & 1), float(bit2 & 1), float(bit3 & 1));
73+
member1 = vec.x + 1 + 2;
7374
`.trim()
7475

7576
const grouped = /* glsl */ `
@@ -95,6 +96,7 @@ colRel = vec3(float(rel1), float(rel2), float(rel3));
9596
colLog = vec3(float(log1), float(log2), float(log3));
9697
colTern = vec3((tern1 + tern2) / 20.0, 0.5, 0.0);
9798
colBits = vec3(float(bit1 & 1), float(bit2 & 1), float(bit3 & 1));
99+
member1 = ((vec.x + 1) + 2);
98100
`.trim()
99101

100102
describe('parser', () => {

0 commit comments

Comments
 (0)