marshal `mangle[.properties].reserved` from non-Array values (#2072)
authorAlex Lam S.L <alexlamsl@gmail.com>
Thu, 8 Jun 2017 20:29:12 +0000 (04:29 +0800)
committerGitHub <noreply@github.com>
Thu, 8 Jun 2017 20:29:12 +0000 (04:29 +0800)
lib/propmangle.js
lib/scope.js
test/mocha/cli.js

index efb31cc..f17909d 100644 (file)
@@ -78,7 +78,8 @@ function mangle_properties(ast, options) {
         reserved: null,
     });
 
-    var reserved = options.reserved || [];
+    var reserved = options.reserved;
+    if (!Array.isArray(reserved)) reserved = [];
     if (!options.builtins) find_builtins(reserved);
 
     var cache = options.cache;
index 8bc9607..ea43f75 100644 (file)
@@ -377,13 +377,15 @@ AST_Symbol.DEFMETHOD("global", function(){
 });
 
 AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
-    return defaults(options, {
+    options = defaults(options, {
         eval        : false,
         ie8         : false,
         keep_fnames : false,
         reserved    : [],
         toplevel    : false,
     });
+    if (!Array.isArray(options.reserved)) options.reserved = [];
+    return options;
 });
 
 AST_Toplevel.DEFMETHOD("mangle_names", function(options){
index 0a7f8f2..3228e4e 100644 (file)
@@ -546,4 +546,24 @@ describe("bin/uglifyjs", function () {
             done();
         });
     });
+    it("Should work with --mangle reserved=[]", function (done) {
+        var command = uglifyjscmd + ' test/input/issue-505/input.js -m reserved=[callback]';
+
+        exec(command, function (err, stdout) {
+            if (err) throw err;
+
+            assert.strictEqual(stdout, 'function test(callback){"aaaaaaaaaaaaaaaa";callback(err,data);callback(err,data)}\n');
+            done();
+        });
+    });
+    it("Should work with --mangle reserved=false", function (done) {
+        var command = uglifyjscmd + ' test/input/issue-505/input.js -m reserved=false';
+
+        exec(command, function (err, stdout) {
+            if (err) throw err;
+
+            assert.strictEqual(stdout, 'function test(a){"aaaaaaaaaaaaaaaa";a(err,data);a(err,data)}\n');
+            done();
+        });
+    });
 });