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)
const t1 = this.peekToken(); let rparen;
// FIXME should be able to parse tuples for (;;) {
if (t1.kind === SyntaxKind.RParen) { const t1 = this.peekToken();
this.getToken(); if (t1.kind === SyntaxKind.RParen) {
return new TupleExpression(lparen, [], t1); rparen = t1;
} else { this.getToken();
break;
}
const expression = this.parseExpression(); const expression = this.parseExpression();
const t2 = this.expectToken(SyntaxKind.RParen); elements.push(expression);
return new NestedExpression(lparen, expression, t2); 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 {