var path = require("path");
var UglifyJS = require("../tools/node");
-var skip_keys = [ "cname", "inlined", "parent_scope", "scope", "uses_eval", "uses_with" ];
+var skip_keys = [ "cname", "fixed", "inlined", "parent_scope", "scope", "uses_eval", "uses_with" ];
var files = {};
var options = {};
var short_forms = {
}
print(JSON.stringify(result.ast, function(key, value) {
if (value) switch (key) {
- case "thedef":
- return symdef(value);
case "enclosed":
return value.length ? value.map(symdef) : undefined;
- case "variables":
case "functions":
case "globals":
+ case "variables":
return value.size() ? value.map(symdef) : undefined;
+ case "thedef":
+ return symdef(value);
}
if (skip_key(key)) return;
if (value instanceof UglifyJS.AST_Token) return;
var value = iife.args[i];
scan_declaration(tw, compressor, arg, function() {
var j = fn.argnames.indexOf(arg);
- return (j < 0 ? value : iife.args[j]) || make_node(AST_Undefined, iife);
+ var arg = j < 0 ? value : iife.args[j];
+ if (arg instanceof AST_Sequence && arg.expressions.length < 2) arg = arg.expressions[0];
+ return arg || make_node(AST_Undefined, iife);
}, visit);
});
if (fn.rest) scan_declaration(tw, compressor, fn.rest, compressor.option("rests") && function() {
// methods to determine if an expression has a numeric result type
(function(def) {
def(AST_Node, return_false);
- var binary = makePredicate("- * / % & | ^ << >> >>>");
+ var binary = makePredicate("- * / % ** & | ^ << >> >>>");
def(AST_Assign, function(compressor) {
return binary[this.operator.slice(0, -1)]
|| this.operator == "=" && this.right.is_number(compressor);
expect_stdout: "5"
node_version: ">=8"
}
+
+issue_4664: {
+ options = {
+ collapse_vars: true,
+ evaluate: true,
+ reduce_vars: true,
+ side_effects: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function f() {
+ new function(a) {
+ console.log(typeof f, a, typeof this);
+ }((A = 0, (NaN ^ 1) * 2 ** 30), 0);
+ }
+ f();
+ }
+ expect: {
+ (function f() {
+ new function(a) {
+ console.log(typeof f, 2 ** 30, typeof this);
+ }(0, A = 0);
+ })();
+ }
+ expect_stdout: "function 1073741824 object"
+ node_version: ">=8"
+}