only do the typeof x == "undefined" optimization if x is a symbol reference and it's declared in scope, or x is not a symbol reference.
This commit is contained in:
@@ -1371,19 +1371,23 @@ function Compressor(options, false_by_default) {
|
||||
// XXX: intentionally falling down to the next case
|
||||
case "==":
|
||||
case "!=":
|
||||
if (compressor.option("unsafe")) {
|
||||
if (this.left instanceof AST_UnaryPrefix
|
||||
&& this.left.operator == "typeof"
|
||||
&& this.right instanceof AST_String
|
||||
&& this.right.value == "undefined") {
|
||||
if (!(this.left.expression instanceof AST_SymbolRef)
|
||||
|| !this.left.expression.undeclared()) {
|
||||
this.left = this.left.expression;
|
||||
this.right = make_node(AST_Undefined, this.right).optimize(compressor);
|
||||
if (this.operator.length == 2) this.operator += "=";
|
||||
}
|
||||
}
|
||||
else if (this.left instanceof AST_String
|
||||
&& this.left.value == "undefined"
|
||||
&& this.right instanceof AST_UnaryPrefix
|
||||
&& this.right.operator == "typeof") {
|
||||
if (!(this.right.expression instanceof AST_SymbolRef)
|
||||
|| !this.right.expression.undeclared()) {
|
||||
this.left = this.right.expression;
|
||||
this.right = make_node(AST_Undefined, this.left).optimize(compressor);
|
||||
if (this.operator.length == 2) this.operator += "=";
|
||||
|
||||
Reference in New Issue
Block a user