diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2019-03-23 14:21:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-23 14:21:54 +0800 |
commit | 7436977aa5d8c4685032600f6b23e9cada282cae (patch) | |
tree | 62f79f4d95329c79ef1e1d8ae2cd2b972d6e0291 | |
parent | e3c565b46fef971bae75dae0ae012eccd7e18f5c (diff) | |
download | tracifyjs-7436977aa5d8c4685032600f6b23e9cada282cae.tar.gz tracifyjs-7436977aa5d8c4685032600f6b23e9cada282cae.zip |
fix infinite loop triggered by #3347 (#3354)
fixes #3353
-rw-r--r-- | lib/compress.js | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js index fe6e72d1..6c12d2bd 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2246,7 +2246,11 @@ merge(Compressor.prototype, { }); def(AST_SymbolRef, function() { var fixed = this.fixed_value(); - return fixed && fixed.is_truthy(); + if (!fixed) return false; + this.is_truthy = return_false; + var result = fixed.is_truthy(); + delete this.is_truthy; + return result; }); })(function(node, func) { node.DEFMETHOD("is_truthy", func); @@ -2300,7 +2304,11 @@ merge(Compressor.prototype, { if (is_undeclared_ref(this) && this.is_declared(compressor)) return false; if (this.is_immutable()) return false; var fixed = this.fixed_value(); - return !fixed || fixed._dot_throw(compressor); + if (!fixed) return true; + this._dot_throw = return_true; + var result = fixed._dot_throw(compressor); + delete this._dot_throw; + return result; }); def(AST_UnaryPrefix, function() { return this.operator == "void"; @@ -2342,7 +2350,11 @@ merge(Compressor.prototype, { }); def(AST_SymbolRef, function(compressor) { var fixed = this.fixed_value(); - return fixed && fixed.is_boolean(compressor); + if (!fixed) return false; + this.is_boolean = return_false; + var result = fixed.is_boolean(compressor); + delete this.is_boolean; + return result; }); var unary = makePredicate("! delete"); def(AST_UnaryPrefix, function() { @@ -2427,7 +2439,11 @@ merge(Compressor.prototype, { }); def(AST_SymbolRef, function(compressor) { var fixed = this.fixed_value(); - return fixed && fixed.is_number(compressor); + if (!fixed) return false; + this.is_number = return_false; + var result = fixed.is_number(compressor); + delete this.is_number; + return result; }); var unary = makePredicate("+ - ~ ++ --"); def(AST_Unary, function() { @@ -2456,7 +2472,11 @@ merge(Compressor.prototype, { def(AST_String, return_true); def(AST_SymbolRef, function(compressor) { var fixed = this.fixed_value(); - return fixed && fixed.is_string(compressor); + if (!fixed) return false; + this.is_string = return_false; + var result = fixed.is_string(compressor); + delete this.is_string; + return result; }); def(AST_UnaryPrefix, function() { return this.operator == "typeof"; |