diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-03-01 02:03:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-01 02:03:47 +0800 |
commit | b34fa11a13221b7ad26ea48f18fcf2f5903c94c1 (patch) | |
tree | 3e17aeb5807984d63c9e903814072fcb9cdc722f | |
parent | 320984c5f59128e2973243b1ac80ae57179fd84d (diff) | |
download | tracifyjs-b34fa11a13221b7ad26ea48f18fcf2f5903c94c1.tar.gz tracifyjs-b34fa11a13221b7ad26ea48f18fcf2f5903c94c1.zip |
fix `evaluate` on object getter & setter (#1515)
-rw-r--r-- | lib/compress.js | 15 | ||||
-rw-r--r-- | test/compress/evaluate.js | 26 |
2 files changed, 36 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js index 294cb616..0349e45f 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1148,11 +1148,14 @@ merge(Compressor.prototype, { def(AST_Statement, function(){ throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start)); }); + // XXX: AST_Accessor and AST_Function both inherit from AST_Scope, + // which itself inherits from AST_Statement; however, they aren't + // really statements. This could bite in other places too. :-( + // Wish JS had multiple inheritance. + def(AST_Accessor, function(){ + throw def; + }); def(AST_Function, function(){ - // XXX: AST_Function inherits from AST_Scope, which itself - // inherits from AST_Statement; however, an AST_Function - // isn't really a statement. This could byte in other - // places too. :-( Wish JS had multiple inheritance. throw def; }); function ev(node, compressor) { @@ -1180,7 +1183,9 @@ merge(Compressor.prototype, { for (var i = 0, len = this.properties.length; i < len; i++) { var prop = this.properties[i]; var key = prop.key; - if (key instanceof AST_Node) { + if (key instanceof AST_Symbol) { + key = key.name; + } else if (key instanceof AST_Node) { key = ev(key, compressor); } if (typeof Object.prototype[key] === 'function') { diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 6bed73fb..f84436df 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -337,6 +337,32 @@ unsafe_object_repeated: { } } +unsafe_object_accessor: { + options = { + evaluate: true, + reduce_vars: true, + unsafe: true, + } + input: { + function f() { + var a = { + get b() {}, + set b() {} + }; + return {a:a}; + } + } + expect: { + function f() { + var a = { + get b() {}, + set b() {} + }; + return {a:a}; + } + } +} + unsafe_function: { options = { evaluate : true, |