From: Mihai Bazon Date: Sat, 13 Oct 2012 09:56:56 +0000 (+0300) Subject: fix compressing benchmark.js (it tried to evaluate a statement) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=851b48e4a3ecdbe7d77ec827f94d67092d2890ef;p=UglifyJS.git fix compressing benchmark.js (it tried to evaluate a statement) the following code in benchmark.js triggered the issue: support.decompilation = Function( 'return (' + (function(x) { return { 'x': '' + (1 + x) + '', 'y': 0 }; }) + ')' )()(0).x === '1'; technically that could be resolved into a constant expression, but seems it's being used here for browser bugs detection :-\ --- diff --git a/lib/compress.js b/lib/compress.js index c13421ea..78d9d0c0 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -534,7 +534,14 @@ merge(Compressor.prototype, { } }); def(AST_Statement, function(){ - throw new Error("Cannot evaluate a statement"); + throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start)); + }); + def(AST_Function, function(){ + // XXX: AST_Function inherits from AST_Scope, which itself + // inherits from AST_Statement; however, an AST_Function + // isn't really a statement. This could byte in other + // places too. :-( Wish JS had multiple inheritance. + return [ this ]; }); function ev(node) { return node._eval();