}
function can_inject_vars(catches, safe_to_inject) {
- var len = fn.body.length;
- for (var i = 0; i < len; i++) {
+ for (var i = 0, len = fn.body.length; i < len; i++) {
var stat = fn.body[i];
if (!(stat instanceof AST_Var)) continue;
if (!safe_to_inject) return false;
if (scope.fixed_value() instanceof AST_Scope) return false;
}
} while (!(scope instanceof AST_Scope));
- var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;
+ var safe_to_inject = (!(scope instanceof AST_Toplevel) || compressor.toplevel.vars)
+ && fn.parent_scope === compressor.find_parent(AST_Scope);
var inline = compressor.option("inline");
if (!can_inject_vars(catches, inline >= 3 && safe_to_inject)) return false;
if (!can_inject_args(catches, inline >= 2 && safe_to_inject)) return false;
issue_2657: {
options = {
inline: true,
+ passes: 2,
+ reduce_funcs: true,
reduce_vars: true,
sequences: true,
unused: true,
inline: true,
join_vars: true,
passes: 3,
+ reduce_funcs: true,
reduce_vars: true,
sequences: true,
side_effects: true,
}).processBulk([1, 2, 3]);
}
expect: {
- function function1(c) {
+ function function1(u) {
return {
- processBulk: function n(o) {
- var r, t, u = c();
- o && 0 < o.length && (r = {
- param1: o.shift(),
+ processBulk: function n(r) {
+ var o, t = u();
+ r && 0 < r.length && (o = {
+ param1: r.shift(),
param2: {
- subparam1: u
+ subparam1: t
}
- }, t = function() {
- n(o);
- }, console.log(JSON.stringify(r)), t());
+ },
+ console.log(JSON.stringify(o)),
+ n(r));
}
};
}
'{"param1":3,"param2":{"subparam1":42}}',
]
}
+
+cross_references_1: {
+ options = {
+ inline: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ var Math = {
+ square: function(n) {
+ return n * n;
+ }
+ };
+ console.log((function(factory) {
+ return factory();
+ })(function() {
+ return function(Math) {
+ return function(n) {
+ return Math.square(n);
+ };
+ }(Math);
+ })(3));
+ }
+ expect: {
+ var Math = {
+ square: function(n) {
+ return n * n;
+ }
+ };
+ console.log(function(Math) {
+ return function(n) {
+ return Math.square(n);
+ };
+ }(Math)(3));
+ }
+ expect_stdout: "9"
+}
+
+cross_references_2: {
+ options = {
+ collapse_vars: true,
+ evaluate: true,
+ hoist_props: true,
+ inline: true,
+ passes: 4,
+ pure_getters: true,
+ reduce_vars: true,
+ sequences: true,
+ side_effects: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ var Math = {
+ square: function(n) {
+ return n * n;
+ }
+ };
+ console.log((function(factory) {
+ return factory();
+ })(function() {
+ return function(Math) {
+ return function(n) {
+ return Math.square(n);
+ };
+ }(Math);
+ })(3));
+ }
+ expect: {
+ console.log(9);
+ }
+ expect_stdout: "9"
+}
+
+cross_references_3: {
+ options = {
+ inline: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ var Math = {
+ square: function(n) {
+ return n * n;
+ },
+ cube: function(n) {
+ return n * n * n;
+ }
+ };
+ console.log(function(factory) {
+ return factory();
+ }(function() {
+ return function(Math) {
+ return function(n) {
+ Math = {
+ square: function(x) {
+ return "(SQUARE" + x + ")";
+ },
+ cube: function(x) {
+ return "(CUBE" + x + ")";
+ }
+ };
+ return Math.square(n) + Math.cube(n);
+ };
+ }(Math);
+ })(2));
+ console.log(Math.square(3), Math.cube(3));
+ }
+ expect: {
+ var Math = {
+ square: function(n) {
+ return n * n;
+ },
+ cube: function(n) {
+ return n * n * n;
+ }
+ };
+ console.log(function(Math) {
+ return function(n) {
+ Math = {
+ square: function(x) {
+ return "(SQUARE" + x + ")";
+ },
+ cube: function(x) {
+ return "(CUBE" + x + ")";
+ }
+ };
+ return Math.square(n) + Math.cube(n);
+ };
+ }(Math)(2));
+ console.log(Math.square(3), Math.cube(3));
+ }
+ expect_stdout: [
+ "(SQUARE2)(CUBE2)",
+ "9 27",
+ ]
+}