Allow get and set in shorthand properties in object literals

Fixed by @kzc
Fixes #1146
This commit is contained in:
Anthony Van de Gejuchte 2016-07-18 17:55:21 +02:00
parent 842ac27efb
commit d65276e110
2 changed files with 115 additions and 5 deletions

View File

@ -1622,6 +1622,8 @@ function parse($TEXT, options) {
}
ret = _make_symbol(AST_SymbolRef);
break;
default:
return undefined;
}
next();
return ret;
@ -1865,19 +1867,21 @@ function parse($TEXT, options) {
});
}
if (name == "get") {
return new AST_ObjectGetter({
var atom = as_atom_node();
if (atom) return new AST_ObjectGetter({
start : start,
static: is_static,
key : as_atom_node(),
key : atom,
value : function_(AST_Accessor),
end : prev()
});
}
if (name == "set") {
return new AST_ObjectSetter({
else if (name == "set") {
var atom = as_atom_node();
if (atom) return new AST_ObjectSetter({
start : start,
static: is_static,
key : as_atom_node(),
key : atom,
value : function_(AST_Accessor),
end : prev()
});

106
test/compress/object.js Normal file
View File

@ -0,0 +1,106 @@
getter_setter: {
input: {
var get = "bar";
var a = {
get,
set: "foo",
get bar() {
return this.get;
},
get 5() {
return "five";
},
get 0xf55() {
return "f five five";
},
get "five"() {
return 5;
},
set one(value) {
this._one = value;
},
set 9(value) {
this._nine = value;
},
set 0b1010(value) {
this._ten = value;
},
set "eleven"(value) {
this._eleven = value;
}
};
var b = {
get() { return "gift"; },
set: function(code) { return "Storing code " + code; }
};
var c = {
["get"]: "foo",
["set"]: "bar"
};
var d = {
get: "foo",
set: "bar"
};
}
expect: {
var get = "bar";
var a = {
get,
set: "foo",
get bar() {
return this.get;
},
get 5() {
return "five";
},
get 0xf55() {
return "f five five";
},
get "five"() {
return 5;
},
set one(value) {
this._one = value;
},
set 9(value) {
this._nine = value;
},
set 0b1010(value) {
this._ten = value;
},
set "eleven"(value) {
this._eleven = value;
}
};
var b = {
get() { return "gift"; },
set: function(code) { return "Storing code " + code; }
};
var c = {
["get"]: "foo",
["set"]: "bar"
};
var d = {
get: "foo",
set: "bar"
};
}
}
getter_setter_mangler: {
mangle = {}
input: {
function f(get,set) {
return {
get,
set,
get g(){},
set s(n){},
c,
a:1,
m(){}
};
}
}
expect_exact: "function f(t,e){return{get:t,set:e,get g(){},set s(t){},c,a:1,m(){}}}"
}