* Implement getter/setter with computed value * Fix parsing getter/setter after static or generator token * Allow storing expressions for computed expression in AST_SymbolMethod * Allow get and set in shorthand properties in object literals Fixes #1094, #1146 and #1221
264 lines
5.2 KiB
JavaScript
264 lines
5.2 KiB
JavaScript
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(){}}}"
|
|
}
|
|
|
|
computed_property_names: {
|
|
input: {
|
|
obj({ ["x" + "x"]: 6 });
|
|
}
|
|
expect_exact: 'obj({["x"+"x"]:6});'
|
|
}
|
|
|
|
shorthand_properties: {
|
|
mangle = true;
|
|
input: (function() {
|
|
var prop = 1;
|
|
const value = {prop};
|
|
return value;
|
|
})();
|
|
expect: (function() {
|
|
var n = 1;
|
|
const r = {prop:n};
|
|
return r;
|
|
})();
|
|
}
|
|
|
|
concise_methods: {
|
|
input: {
|
|
x = {
|
|
foo(a, b) {
|
|
return x;
|
|
}
|
|
}
|
|
y = {
|
|
foo([{a}]) {
|
|
return a;
|
|
},
|
|
bar(){}
|
|
}
|
|
}
|
|
expect_exact: "x={foo(a,b){return x}};y={foo([{a}]){return a},bar(){}};"
|
|
}
|
|
|
|
concise_methods_with_computed_property: {
|
|
options = {
|
|
evaluate: true
|
|
}
|
|
input: {
|
|
var foo = {
|
|
[Symbol.iterator]() {
|
|
return { /* stuff */ }
|
|
},
|
|
[1 + 2]() {
|
|
return 3;
|
|
}
|
|
}
|
|
}
|
|
expect: {
|
|
var foo = {
|
|
[Symbol.iterator]() {
|
|
return { /* stuff */ }
|
|
},
|
|
[3]() {
|
|
return 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
concise_methods_and_mangle_props: {
|
|
mangle_props = {
|
|
regex: /_/
|
|
};
|
|
input: {
|
|
function x() {
|
|
obj = {
|
|
_foo() { return 1; }
|
|
}
|
|
}
|
|
}
|
|
expect: {
|
|
function x() {
|
|
obj = {
|
|
a() { return 1; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
concise_generators: {
|
|
input: {
|
|
x = {
|
|
*foo(a, b) {
|
|
return x;
|
|
}
|
|
}
|
|
y = {
|
|
*foo([{a}]) {
|
|
yield a;
|
|
},
|
|
bar(){}
|
|
}
|
|
}
|
|
expect_exact: "x={*foo(a,b){return x}};y={*foo([{a}]){yield a},bar(){}};"
|
|
}
|
|
|
|
concise_methods_and_keyword_names: {
|
|
input: {
|
|
x = {
|
|
catch() {},
|
|
throw() {}
|
|
}
|
|
}
|
|
expect: {
|
|
x={catch(){},throw(){}};
|
|
}
|
|
}
|
|
|
|
|
|
getter_setter_with_computed_value: {
|
|
input: {
|
|
class C {
|
|
get ['a']() {
|
|
return 'A';
|
|
}
|
|
set ['a'](value) {
|
|
do_something(a);
|
|
}
|
|
}
|
|
var x = {
|
|
get [a.b]() {
|
|
return 42;
|
|
}
|
|
};
|
|
class MyArray extends Array {
|
|
get [Symbol.species]() {
|
|
return Array;
|
|
}
|
|
}
|
|
}
|
|
expect: {
|
|
class C {
|
|
get ['a']() {
|
|
return 'A';
|
|
}
|
|
set ['a'](value) {
|
|
do_something(a);
|
|
}
|
|
}
|
|
var x = {
|
|
get [a.b]() {
|
|
return 42;
|
|
}
|
|
};
|
|
class MyArray extends Array {
|
|
get [Symbol.species]() {
|
|
return Array;
|
|
}
|
|
}
|
|
}
|
|
}
|