diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2018-01-19 00:36:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-19 00:36:30 +0800 |
commit | 082e004b872ecb158e5a28702898688742b5da86 (patch) | |
tree | 81b5183f9f108c64680d106c0d51af43c4751e5a /lib/compress.js | |
parent | 983e69128b0e6da78d71ad9b77d798f31a10ca44 (diff) | |
download | tracifyjs-082e004b872ecb158e5a28702898688742b5da86.tar.gz tracifyjs-082e004b872ecb158e5a28702898688742b5da86.zip |
compress `undefined` property names (#2811)
- enforce property names as string
- handle `void 0` as `undefined` in `hoist_props` & `reduce_vars`
Diffstat (limited to 'lib/compress.js')
-rw-r--r-- | lib/compress.js | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js index 89056796..bda5d7a6 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -404,14 +404,15 @@ merge(Compressor.prototype, { } function read_property(obj, key) { - if (key instanceof AST_Constant) key = key.getValue(); - if (key instanceof AST_Node) return null; + key = get_value(key); + if (key instanceof AST_Node) return; var value; if (obj instanceof AST_Array) { var elements = obj.elements; if (key == "length") return make_node_from_constant(elements.length, obj); if (typeof key == "number" && key in elements) value = elements[key]; } else if (obj instanceof AST_Object) { + key = "" + key; var props = obj.properties; for (var i = props.length; --i >= 0;) { var prop = props[i]; @@ -1855,6 +1856,18 @@ merge(Compressor.prototype, { })); }; + function get_value(key) { + if (key instanceof AST_Constant) { + return key.getValue(); + } + if (key instanceof AST_UnaryPrefix + && key.operator == "void" + && key.expression instanceof AST_Constant) { + return; + } + return key; + } + function is_undefined(node, compressor) { return node.is_undefined || node instanceof AST_Undefined @@ -3295,9 +3308,7 @@ merge(Compressor.prototype, { if (node instanceof AST_PropAccess && node.expression instanceof AST_SymbolRef) { var defs = defs_by_id[node.expression.definition().id]; if (defs) { - var key = node.property; - if (key instanceof AST_Node) key = key.getValue(); - var def = defs.get(key); + var def = defs.get(get_value(node.property)); var sym = make_node(AST_SymbolRef, node, { name: def.name, scope: node.expression.scope, |