From 851b48e4a3ecdbe7d77ec827f94d67092d2890ef Mon Sep 17 00:00:00 2001 From: Mihai Bazon Date: Sat, 13 Oct 2012 12:56:56 +0300 Subject: [PATCH] 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 :-\ --- lib/compress.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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(); -- 2.34.1