From 3818a9e9c1a1c7a3831c438c6fc77dcd63da8498 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 1 Jun 2017 18:11:16 +0800 Subject: [PATCH] fix non-identifier getter/setter name (#2041) fixes #2040 --- lib/output.js | 25 ++++++++++++++----------- test/compress/properties.js | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/lib/output.js b/lib/output.js index 0731fb49..78e24877 100644 --- a/lib/output.js +++ b/lib/output.js @@ -1207,9 +1207,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" @@ -1226,20 +1225,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 29bdfe2a..d56d7865 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" +}