"slice",
].concat(object_fns),
Boolean: object_fns,
+ Function: object_fns,
Number: [
"toExponential",
"toFixed",
});
def(AST_Function, function(compressor) {
if (compressor.option("unsafe")) {
- var node = this;
var fn = function() {};
+ fn.node = this;
fn.toString = function() {
- return node.print_to_string();
+ return this.node.print_to_string();
};
return fn;
}
} else {
val = exp._eval(compressor, depth + 1);
if (!val || val === exp || !HOP(val, key)) return this;
+ if (typeof val == "function") switch (key) {
+ case "name":
+ return val.node.name ? val.node.name.name : "";
+ case "length":
+ return val.node.argnames.length;
+ default:
+ return this;
+ }
}
return val[key];
}
console.log("function(){}");
}
}
+
+issue_2926_1: {
+ options = {
+ evaluate: true,
+ reduce_vars: true,
+ unsafe: true,
+ }
+ input: {
+ (function f(a) {
+ console.log(f.name.length, f.length);
+ })();
+ }
+ expect: {
+ (function f(a) {
+ console.log(1, 1);
+ })();
+ }
+ expect_stdout: "1 1"
+}
+
+issue_2926_2: {
+ options = {
+ evaluate: true,
+ unsafe: true,
+ }
+ input: {
+ console.log(typeof function() {}.valueOf());
+ }
+ expect: {
+ console.log("function");
+ }
+ expect_stdout: "function"
+}