aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2019-03-23 14:21:54 +0800
committerGitHub <noreply@github.com>2019-03-23 14:21:54 +0800
commit7436977aa5d8c4685032600f6b23e9cada282cae (patch)
tree62f79f4d95329c79ef1e1d8ae2cd2b972d6e0291
parente3c565b46fef971bae75dae0ae012eccd7e18f5c (diff)
downloadtracifyjs-7436977aa5d8c4685032600f6b23e9cada282cae.tar.gz
tracifyjs-7436977aa5d8c4685032600f6b23e9cada282cae.zip
fix infinite loop triggered by #3347 (#3354)
fixes #3353
-rw-r--r--lib/compress.js30
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";