Enable parsing of tuple expressions

This commit is contained in:
Sam Vervaeck 2022-09-16 10:25:24 +02:00
parent f11ad9028e
commit a378f8276d

View file

@ -259,17 +259,32 @@ export class Parser {
} }
private parseExpressionWithParens(): Expression { private parseExpressionWithParens(): Expression {
const elements = [];
const lparen = this.expectToken(SyntaxKind.LParen) const lparen = this.expectToken(SyntaxKind.LParen)
let rparen;
for (;;) {
const t1 = this.peekToken(); const t1 = this.peekToken();
// FIXME should be able to parse tuples
if (t1.kind === SyntaxKind.RParen) { if (t1.kind === SyntaxKind.RParen) {
rparen = t1;
this.getToken(); this.getToken();
return new TupleExpression(lparen, [], t1); break;
} else {
const expression = this.parseExpression();
const t2 = this.expectToken(SyntaxKind.RParen);
return new NestedExpression(lparen, expression, t2);
} }
const expression = this.parseExpression();
elements.push(expression);
const t2 = this.getToken();
if (t2.kind === SyntaxKind.Comma) {
continue;
} else if (t2.kind === SyntaxKind.RParen) {
rparen = t2;
break;
} else {
this.raiseParseError(t2, [ SyntaxKind.Comma, SyntaxKind.RParen ]);
}
}
if (elements.length === 1) {
return new NestedExpression(lparen, elements[0], rparen);
}
return new TupleExpression(lparen, elements, rparen);
} }
private parsePrimitiveExpression(): Expression { private parsePrimitiveExpression(): Expression {