@@ -1828,12 +1828,17 @@ merge(Compressor.prototype, {
|
|||||||
return this;
|
return this;
|
||||||
});
|
});
|
||||||
def(AST_UnaryPrefix, function(compressor){
|
def(AST_UnaryPrefix, function(compressor){
|
||||||
|
var e = this.expression;
|
||||||
// Function would be evaluated to an array and so typeof would
|
// Function would be evaluated to an array and so typeof would
|
||||||
// incorrectly return 'object'. Hence making is a special case.
|
// incorrectly return 'object'. Hence making is a special case.
|
||||||
if (this.operator == "typeof" && this.expression instanceof AST_Function) {
|
if (compressor.option("typeofs")
|
||||||
|
&& this.operator == "typeof"
|
||||||
|
&& (e instanceof AST_Lambda
|
||||||
|
|| e instanceof AST_SymbolRef
|
||||||
|
&& e.fixed_value() instanceof AST_Lambda)) {
|
||||||
return typeof function(){};
|
return typeof function(){};
|
||||||
}
|
}
|
||||||
var e = ev(this.expression, compressor);
|
e = ev(e, compressor);
|
||||||
if (e === this.expression) return this;
|
if (e === this.expression) return this;
|
||||||
switch (this.operator) {
|
switch (this.operator) {
|
||||||
case "!": return !e;
|
case "!": return !e;
|
||||||
@@ -1894,7 +1899,6 @@ merge(Compressor.prototype, {
|
|||||||
return value === node ? this : value;
|
return value === node ? this : value;
|
||||||
});
|
});
|
||||||
def(AST_SymbolRef, function(compressor){
|
def(AST_SymbolRef, function(compressor){
|
||||||
if (!compressor.option("reduce_vars")) return this;
|
|
||||||
var fixed = this.fixed_value();
|
var fixed = this.fixed_value();
|
||||||
if (!fixed) return this;
|
if (!fixed) return this;
|
||||||
this._eval = return_this;
|
this._eval = return_this;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
typeof_evaluation: {
|
typeof_evaluation: {
|
||||||
options = {
|
options = {
|
||||||
evaluate: true
|
evaluate: true,
|
||||||
|
typeofs: true,
|
||||||
};
|
};
|
||||||
input: {
|
input: {
|
||||||
a = typeof 1;
|
a = typeof 1;
|
||||||
@@ -60,3 +61,80 @@ issue_1668: {
|
|||||||
if (1);
|
if (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typeof_defun_1: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
inline: true,
|
||||||
|
passes: 2,
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
toplevel: true,
|
||||||
|
typeofs: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f() {
|
||||||
|
console.log("YES");
|
||||||
|
}
|
||||||
|
function g() {
|
||||||
|
h = 42;
|
||||||
|
console.log("NOPE");
|
||||||
|
}
|
||||||
|
function h() {
|
||||||
|
console.log("YUP");
|
||||||
|
}
|
||||||
|
g = 42;
|
||||||
|
"function" == typeof f && f();
|
||||||
|
"function" == typeof g && g();
|
||||||
|
"function" == typeof h && h();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function g() {
|
||||||
|
h = 42;
|
||||||
|
console.log("NOPE");
|
||||||
|
}
|
||||||
|
function h() {
|
||||||
|
console.log("YUP");
|
||||||
|
}
|
||||||
|
g = 42;
|
||||||
|
console.log("YES");
|
||||||
|
"function" == typeof g && g();
|
||||||
|
h();
|
||||||
|
}
|
||||||
|
expect_stdout: [
|
||||||
|
"YES",
|
||||||
|
"YUP",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
typeof_defun_2: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel: true,
|
||||||
|
typeofs: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var f = function() {
|
||||||
|
console.log(x);
|
||||||
|
};
|
||||||
|
var x = 0;
|
||||||
|
x++ < 2 && typeof f == "function" && f();
|
||||||
|
x++ < 2 && typeof f == "function" && f();
|
||||||
|
x++ < 2 && typeof f == "function" && f();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var f = function() {
|
||||||
|
console.log(x);
|
||||||
|
};
|
||||||
|
var x = 0;
|
||||||
|
x++ < 2 && f();
|
||||||
|
x++ < 2 && f();
|
||||||
|
x++ < 2 && f();
|
||||||
|
}
|
||||||
|
expect_stdout: [
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user