Support object literal shorthands

This commit is contained in:
dcodeIO
2018-07-14 15:18:45 +02:00
parent c636eddcd2
commit 10a9f407bf
6 changed files with 25 additions and 12 deletions

View File

@ -446,9 +446,15 @@ export class ASTBuilder {
for (let i = 1; i < numElements; ++i) {
sb.push(",\n");
indent(sb, this.indentLevel);
this.visitNode(names[i]);
sb.push(": ");
this.visitNode(values[i]);
let name = names[i];
let value = values[i];
if (name === value) {
this.visitNode(name);
} else {
this.visitNode(name);
sb.push(": ");
this.visitNode(value);
}
}
sb.push("\n");
indent(sb, --this.indentLevel);

View File

@ -3093,17 +3093,20 @@ export class Parser extends DiagnosticEmitter {
} else {
name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());
}
if (!tn.skip(Token.COLON)) {
names.push(name);
if (tn.skip(Token.COLON)) {
let value = this.parseExpression(tn, Precedence.COMMA + 1);
if (!value) return null;
values.push(value);
} else if (!name.is(CommonFlags.QUOTED)) {
values.push(name);
} else {
this.error(
DiagnosticCode._0_expected,
tn.range(), ":"
);
return null;
}
let value = this.parseExpression(tn, Precedence.COMMA + 1);
if (!value) return null;
names.push(name);
values.push(value);
if (!tn.skip(Token.COMMA)) {
if (tn.skip(Token.CLOSEBRACE)) {
break;