Enable parsing of tuple expressions
This commit is contained in:
parent
f11ad9028e
commit
a378f8276d
1 changed files with 23 additions and 8 deletions
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue