Fix typeof evaluation for regex and function

This commit is contained in:
Roman Bataev
2013-04-03 22:34:38 -04:00
parent b956e5f1d9
commit 4b818056cf

View File

@@ -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 "-":