var tok = S.token, ret;
switch (tok.type) {
case "name":
- ret = _make_symbol(AST_SymbolRef);
+ ret = _make_symbol(AST_SymbolRef, tok);
break;
case "num":
ret = new AST_Number({ start: tok, end: tok, value: tok.value });
var first = true, a = [];
while (!is("punc", "}")) {
if (first) first = false; else expect(",");
- if (!options.strict && is("punc", "}"))
- // allow trailing comma
- break;
+ // allow trailing comma
+ if (!options.strict && is("punc", "}")) break;
var start = S.token;
var type = start.type;
var name = as_property_name();
- if (type == "name" && !is("punc", ":")) {
- var key = new AST_SymbolAccessor({
- start: S.token,
- name: "" + as_property_name(),
- end: prev()
- });
- if (name == "get") {
- a.push(new AST_ObjectGetter({
- start : start,
- key : key,
- value : create_accessor(),
- end : prev()
- }));
- continue;
- }
- if (name == "set") {
- a.push(new AST_ObjectSetter({
- start : start,
- key : key,
- value : create_accessor(),
- end : prev()
- }));
- continue;
- }
+ if (!is("punc", ":") && type == "name") switch (name) {
+ case "get":
+ a.push(new AST_ObjectGetter({
+ start: start,
+ key: new AST_SymbolAccessor({
+ start: S.token,
+ name: "" + as_property_name(),
+ end: prev(),
+ }),
+ value: create_accessor(),
+ end: prev(),
+ }));
+ continue;
+ case "set":
+ a.push(new AST_ObjectSetter({
+ start: start,
+ key: new AST_SymbolAccessor({
+ start: S.token,
+ name: "" + as_property_name(),
+ end: prev(),
+ }),
+ value: create_accessor(),
+ end: prev(),
+ }));
+ continue;
+ default:
+ a.push(new AST_ObjectKeyVal({
+ start: start,
+ quote: start.quote,
+ key: "" + name,
+ value: _make_symbol(AST_SymbolRef, start),
+ end: prev(),
+ }));
+ continue;
}
expect(":");
a.push(new AST_ObjectKeyVal({
return name;
}
- function _make_symbol(type) {
- var name = S.token.value;
- return new (name == "this" ? AST_This : type)({
- name : String(name),
- start : S.token,
- end : S.token
+ function _make_symbol(type, token) {
+ var name = token.value;
+ return new (name === "this" ? AST_This : type)({
+ name: "" + name,
+ start: token,
+ end: token,
});
}
if (!noerror) croak("Name expected");
return null;
}
- var sym = _make_symbol(type);
+ var sym = _make_symbol(type, S.token);
if (S.input.has_directive("use strict") && sym instanceof AST_SymbolDeclaration) {
strict_verify_symbol(sym);
}
function createObjectLiteral(recurmax, stmtDepth, canThrow) {
recurmax--;
var obj = ["({"];
- for (var i = rng(6); --i >= 0;) {
- if (rng(20) == 0) {
- obj.push(createAccessor(recurmax, stmtDepth, canThrow));
- } else {
- var key = KEYS[rng(KEYS.length)];
- obj.push(key + ":(" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "),");
- }
+ for (var i = rng(6); --i >= 0;) switch (rng(20)) {
+ case 0:
+ obj.push(createAccessor(recurmax, stmtDepth, canThrow));
+ break;
+ case 1:
+ obj.push(getVarName() + ",");
+ break;
+ default:
+ obj.push(KEYS[rng(KEYS.length)] + ":(" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "),");
+ break;
}
obj.push("})");
return obj.join("\n");