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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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;

View File

@ -4,6 +4,8 @@ var obj = {
"c": false,
d: {
a: 123,
"b": {}
"b": {},
c,
d: d
}
};

View File

@ -4,6 +4,8 @@ var obj = {
"c": false,
d: {
a: 123,
"b": {}
"b": {},
c,
d: d
}
};