From: Alex Lam S.L Date: Thu, 1 Jun 2017 10:11:16 +0000 (+0800) Subject: fix non-identifier getter/setter name (#2041) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=bac14ba881729fa573effa1fb4afdb76a7c5662e;p=UglifyJS.git fix non-identifier getter/setter name (#2041) fixes #2040 --- diff --git a/lib/output.js b/lib/output.js index e9765f7c..2fb7441b 100644 --- a/lib/output.js +++ b/lib/output.js @@ -1234,9 +1234,8 @@ function OutputStream(options) { }); else output.print("{}"); }); - DEFPRINT(AST_ObjectKeyVal, function(self, output){ - var key = self.key; - var quote = self.quote; + + function print_property_name(key, quote, output) { if (output.option("quote_keys")) { output.print_string(key + ""); } else if ((typeof key == "number" @@ -1253,20 +1252,24 @@ function OutputStream(options) { } else { output.print_string(key, quote); } + } + + DEFPRINT(AST_ObjectKeyVal, function(self, output){ + print_property_name(self.key, self.quote, output); output.colon(); self.value.print(output); }); - DEFPRINT(AST_ObjectSetter, function(self, output){ - output.print("set"); + AST_ObjectProperty.DEFMETHOD("_print_getter_setter", function(type, output) { + output.print(type); output.space(); - self.key.print(output); - self.value._do_print(output, true); + print_property_name(this.key.name, this.quote, output); + this.value._do_print(output, true); + }); + DEFPRINT(AST_ObjectSetter, function(self, output){ + self._print_getter_setter("set", output); }); DEFPRINT(AST_ObjectGetter, function(self, output){ - output.print("get"); - output.space(); - self.key.print(output); - self.value._do_print(output, true); + self._print_getter_setter("get", output); }); DEFPRINT(AST_Symbol, function(self, output){ var def = self.definition(); diff --git a/test/compress/properties.js b/test/compress/properties.js index 3e06dc1e..d49b9ea4 100644 --- a/test/compress/properties.js +++ b/test/compress/properties.js @@ -555,3 +555,20 @@ native_prototype: { "".indexOf.call(e, "bar"); } } + +issue_2040: { + input: { + var a = 1; + var b = { + get "a-b"() { + return a; + }, + set "a-b"(c) { + a = c; + } + }; + console.log(b["a-b"], b["a-b"] = 2, b["a-b"]); + } + expect_exact: 'var a=1;var b={get"a-b"(){return a},set"a-b"(c){a=c}};console.log(b["a-b"],b["a-b"]=2,b["a-b"]);' + expect_stdout: "1 2 2" +}