Merge 4b818056cf into 37d7cb8565
This commit is contained in:
commit
1c5274a8ae
|
|
@ -625,7 +625,18 @@ merge(Compressor.prototype, {
|
|||
var e = this.expression;
|
||||
switch (this.operator) {
|
||||
case "!": return !ev(e);
|
||||
case "typeof": return typeof ev(e);
|
||||
case "typeof":
|
||||
// Function would be evaluated to an array and so typeof would
|
||||
// incorrectly return 'object'. Hence making is a special case.
|
||||
if (e instanceof AST_Function) return typeof function(){};
|
||||
|
||||
e = ev(e);
|
||||
|
||||
// typeof <RegExp> returns "object" or "function" on different platforms
|
||||
// so cannot evaluate reliably
|
||||
if (e instanceof RegExp) throw def;
|
||||
|
||||
return typeof e;
|
||||
case "void": return void ev(e);
|
||||
case "~": return ~ev(e);
|
||||
case "-":
|
||||
|
|
|
|||
25
test/compress/typeof.js
Normal file
25
test/compress/typeof.js
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
typeof_evaluation: {
|
||||
options = {
|
||||
evaluate: true
|
||||
};
|
||||
input: {
|
||||
a = typeof 1;
|
||||
b = typeof 'test';
|
||||
c = typeof [];
|
||||
d = typeof {};
|
||||
e = typeof /./;
|
||||
f = typeof false;
|
||||
g = typeof function(){};
|
||||
h = typeof undefined;
|
||||
}
|
||||
expect: {
|
||||
a='number';
|
||||
b='string';
|
||||
c=typeof[];
|
||||
d=typeof{};
|
||||
e=typeof/./;
|
||||
f='boolean';
|
||||
g='function';
|
||||
h='undefined';
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user