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 :-\
This commit is contained in:
Mihai Bazon
2012-10-13 12:56:56 +03:00
parent 708abb1ab1
commit 851b48e4a3

View File

@@ -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();