From db49daf365598986106c95def10e619e4e6ba4a0 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 6 Apr 2018 17:10:36 +0800 Subject: [PATCH] mangle `Object.defineProperty()` (#3059) fixes #869 --- lib/propmangle.js | 8 +++++ test/compress/properties.js | 58 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/lib/propmangle.js b/lib/propmangle.js index ffc8faf8..1bca1ad4 100644 --- a/lib/propmangle.js +++ b/lib/propmangle.js @@ -150,6 +150,10 @@ function mangle_properties(ast, options) { else if (node instanceof AST_Sub) { addStrings(node.property, add); } + else if (node instanceof AST_Call + && node.expression.print_to_string() == "Object.defineProperty") { + addStrings(node.args[1], add); + } })); // step 2: transform the tree, renaming properties @@ -167,6 +171,10 @@ function mangle_properties(ast, options) { else if (!options.keep_quoted && node instanceof AST_Sub) { node.property = mangleStrings(node.property); } + else if (node instanceof AST_Call + && node.expression.print_to_string() == "Object.defineProperty") { + node.args[1] = mangleStrings(node.args[1]); + } })); // only function declarations after this line diff --git a/test/compress/properties.js b/test/compress/properties.js index 419c7f85..ec99c090 100644 --- a/test/compress/properties.js +++ b/test/compress/properties.js @@ -1640,3 +1640,61 @@ issue_2893_2: { } expect_stdout: "PASS" } + +issue_869_1: { + mangle = { + properties: { + reserved: [ "get" ] + }, + } + input: { + var o = { p: "FAIL" }; + Object.defineProperty(o, "p", { + get: function() { + return "PASS"; + } + }); + console.log(o.p); + } + expect: { + var o = { o: "FAIL" }; + Object.defineProperty(o, "o", { + get: function() { + return "PASS"; + } + }); + console.log(o.o); + } + expect_stdout: "PASS" +} + +issue_869_2: { + mangle = { + properties: { + reserved: [ "get" ] + }, + } + input: { + var o = { p: "FAIL" }; + Object.defineProperties(o, { + p: { + get: function() { + return "PASS"; + } + } + }); + console.log(o.p); + } + expect: { + var o = { o: "FAIL" }; + Object.defineProperties(o, { + o: { + get: function() { + return "PASS"; + } + } + }); + console.log(o.o); + } + expect_stdout: "PASS" +} -- 2.34.1