diff --git a/bin/uglifyjs b/bin/uglifyjs index 747fb151..8cb2f0df 100755 --- a/bin/uglifyjs +++ b/bin/uglifyjs @@ -428,10 +428,11 @@ async.eachLimit(files, 1, function (file, cb) { var SCOPE_IS_NEEDED = COMPRESS || MANGLE || ARGS.lint var TL_CACHE = readNameCache("vars"); + if (MANGLE) MANGLE.cache = TL_CACHE; if (SCOPE_IS_NEEDED) { time_it("scope", function(){ - TOPLEVEL.figure_out_scope({ screw_ie8: screw_ie8, cache: TL_CACHE }); + TOPLEVEL.figure_out_scope(MANGLE || { screw_ie8: screw_ie8, cache: TL_CACHE }); if (ARGS.lint) { TOPLEVEL.scope_warnings(); } @@ -446,7 +447,7 @@ async.eachLimit(files, 1, function (file, cb) { if (SCOPE_IS_NEEDED) { time_it("scope", function(){ - TOPLEVEL.figure_out_scope({ screw_ie8: screw_ie8, cache: TL_CACHE }); + TOPLEVEL.figure_out_scope(MANGLE || { screw_ie8: screw_ie8, cache: TL_CACHE }); if (MANGLE && !TL_CACHE) { TOPLEVEL.compute_char_frequency(MANGLE); } @@ -454,7 +455,6 @@ async.eachLimit(files, 1, function (file, cb) { } if (MANGLE) time_it("mangle", function(){ - MANGLE.cache = TL_CACHE; TOPLEVEL.mangle_names(MANGLE); }); diff --git a/test/input/issue-1431/sample.js b/test/input/issue-1431/sample.js new file mode 100644 index 00000000..32068cb2 --- /dev/null +++ b/test/input/issue-1431/sample.js @@ -0,0 +1,14 @@ +function f(x) { + return function() { + function n(a) { + return a * a; + } + return x(n); + }; +} + +function g(op) { + return op(1) + op(2); +} + +console.log(f(g)() == 5); \ No newline at end of file diff --git a/test/mocha/cli.js b/test/mocha/cli.js index bebd4d9d..a8de05c5 100644 --- a/test/mocha/cli.js +++ b/test/mocha/cli.js @@ -55,7 +55,7 @@ describe("bin/uglifyjs", function () { exec(command, function (err, stdout) { if (err) throw err; - assert.strictEqual(stdout, "var bar=function(){function foo(bar){return bar}return foo}();\n" + + assert.strictEqual(stdout, "var bar=function(){function foo(bar){return bar}return foo}();\n" + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxHQUFJQSxLQUFNLFdBQ04sUUFBU0MsS0FBS0QsS0FDVixNQUFPQSxLQUdYLE1BQU9DIn0=\n"); done(); }); @@ -70,4 +70,34 @@ describe("bin/uglifyjs", function () { done(); }); }); + it("Should work with --keep-fnames (mangle only)", function (done) { + var command = uglifyjscmd + ' test/input/issue-1431/sample.js --keep-fnames -m'; + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, "function f(r){return function(){function n(n){return n*n}return r(n)}}function g(n){return n(1)+n(2)}console.log(f(g)()==5);\n"); + done(); + }); + }); + it("Should work with --keep-fnames (mangle & compress)", function (done) { + var command = uglifyjscmd + ' test/input/issue-1431/sample.js --keep-fnames -m -c'; + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, "function f(r){return function(){function n(n){return n*n}return r(n)}}function g(n){return n(1)+n(2)}console.log(5==f(g)());\n"); + done(); + }); + }); + it("Should work with keep_fnames under mangler options", function (done) { + var command = uglifyjscmd + ' test/input/issue-1431/sample.js -m keep_fnames=true'; + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, "function f(r){return function(){function n(n){return n*n}return r(n)}}function g(n){return n(1)+n(2)}console.log(f(g)()==5);\n"); + done(); + }); + }); });