Skip to content

Commit cb612a2

Browse files
mozilla AST output: correctly input and output object keys with quotes
1 parent e2f48a7 commit cb612a2

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

lib/mozilla-ast.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,9 @@ import { is_basic_identifier_string } from "./parse.js";
355355
start : my_start_token(key || M.value),
356356
end : my_end_token(M.value),
357357
key : key.type == "Identifier" ? key.name : key.value,
358+
quote : !key.computed && key.type === "Literal" && typeof key.value === "string"
359+
? '"'
360+
: null,
358361
value : from_moz(M.value)
359362
};
360363
if (M.computed) {
@@ -387,7 +390,6 @@ import { is_basic_identifier_string } from "./parse.js";
387390
if (M.kind == "method") {
388391
args.async = M.value.async;
389392
args.is_generator = M.value.generator;
390-
args.quote = M.computed ? "\"" : null;
391393
return new AST_ConciseMethod(args);
392394
}
393395
},
@@ -1595,7 +1597,7 @@ import { is_basic_identifier_string } from "./parse.js";
15951597
def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {
15961598
var key = M.key instanceof AST_Node ? to_moz(M.key) : {
15971599
type: "Identifier",
1598-
value: M.key
1600+
value: M.key,
15991601
};
16001602
if (typeof M.key === "number") {
16011603
key = {
@@ -1604,10 +1606,16 @@ import { is_basic_identifier_string } from "./parse.js";
16041606
};
16051607
}
16061608
if (typeof M.key === "string") {
1607-
key = {
1608-
type: "Identifier",
1609-
name: M.key
1610-
};
1609+
key = M.quote
1610+
? {
1611+
type: "Literal",
1612+
value: M.key,
1613+
raw: JSON.stringify(M.key),
1614+
}
1615+
: {
1616+
type: "Identifier",
1617+
name: M.key,
1618+
};
16111619
}
16121620
var kind;
16131621
var string_or_num = typeof M.key === "string" || typeof M.key === "number";

test/input/spidermonkey/input.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ var a = {
165165
get "five"() {
166166
return 5;
167167
},
168+
get ""() {
169+
return "";
170+
},
168171
set one(value) {
169172
this._one = value;
170173
},
@@ -177,13 +180,20 @@ var a = {
177180
set "eleven"(value) {
178181
this._eleven = value;
179182
},
183+
set ""(value) {
184+
this[""] = value
185+
},
180186
*"%"() {
181187
return 2;
182188
},
183189
*["%"]() {
184190
return 2;
185191
},
186-
[a]() {}
192+
a() {},
193+
[a]() {},
194+
"": a,
195+
""() { },
196+
"a": a,
187197
};
188198

189199
// RegExp literals

0 commit comments

Comments
 (0)