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
|
// XXX: intentionally falling down to the next case
|
||||||
case "==":
|
case "==":
|
||||||
case "!=":
|
case "!=":
|
||||||
if (compressor.option("unsafe")) {
|
if (this.left instanceof AST_UnaryPrefix
|
||||||
if (this.left instanceof AST_UnaryPrefix
|
&& this.left.operator == "typeof"
|
||||||
&& this.left.operator == "typeof"
|
&& this.right instanceof AST_String
|
||||||
&& this.right instanceof AST_String
|
&& this.right.value == "undefined") {
|
||||||
&& this.right.value == "undefined") {
|
if (!(this.left.expression instanceof AST_SymbolRef)
|
||||||
|
|| !this.left.expression.undeclared()) {
|
||||||
this.left = this.left.expression;
|
this.left = this.left.expression;
|
||||||
this.right = make_node(AST_Undefined, this.right).optimize(compressor);
|
this.right = make_node(AST_Undefined, this.right).optimize(compressor);
|
||||||
if (this.operator.length == 2) this.operator += "=";
|
if (this.operator.length == 2) this.operator += "=";
|
||||||
}
|
}
|
||||||
else if (this.left instanceof AST_String
|
}
|
||||||
&& this.left.value == "undefined"
|
else if (this.left instanceof AST_String
|
||||||
&& this.right instanceof AST_UnaryPrefix
|
&& this.left.value == "undefined"
|
||||||
&& this.right.operator == "typeof") {
|
&& 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.left = this.right.expression;
|
||||||
this.right = make_node(AST_Undefined, this.left).optimize(compressor);
|
this.right = make_node(AST_Undefined, this.left).optimize(compressor);
|
||||||
if (this.operator.length == 2) this.operator += "=";
|
if (this.operator.length == 2) this.operator += "=";
|
||||||
|
|||||||
Reference in New Issue
Block a user