add SymbolDef IDs to --output ast (#2772)
authorkzc <kzc@users.noreply.github.com>
Fri, 12 Jan 2018 07:41:09 +0000 (02:41 -0500)
committerAlex Lam S.L <alexlamsl@gmail.com>
Fri, 12 Jan 2018 07:41:09 +0000 (15:41 +0800)
bin/uglifyjs
lib/scope.js

index 3891713..99248f1 100755 (executable)
@@ -11,7 +11,7 @@ var path = require("path");
 var program = require("commander");
 var UglifyJS = require("../tools/node");
 
-var skip_keys = [ "cname", "enclosed", "inlined", "parent_scope", "scope", "thedef", "uses_eval", "uses_with" ];
+var skip_keys = [ "cname", "inlined", "parent_scope", "scope", "uses_eval", "uses_with" ];
 var files = {};
 var options = {
     compress: false,
@@ -223,7 +223,33 @@ function run() {
         }
         fatal(ex);
     } else if (program.output == "ast") {
+        if (!options.compress && !options.mangle) {
+            result.ast.figure_out_scope({});
+        }
         print(JSON.stringify(result.ast, function(key, value) {
+            switch (key) {
+              case "thedef":
+                if (typeof value == "object" && typeof value.id == "number") {
+                    return value.id;
+                }
+                return;
+              case "enclosed":
+                return value.map(function(sym){
+                    return sym.id;
+                });
+              case "variables":
+              case "functions":
+              case "globals":
+                if (value && value.size()) {
+                    var ret = {};
+                    value.each(function(val, key) {
+                        // key/val inverted for readability.
+                        ret[val.id] = key;
+                    });
+                    return ret;
+                }
+                return;
+            }
             if (skip_key(key)) return;
             if (value instanceof UglifyJS.AST_Token) return;
             if (value instanceof UglifyJS.Dictionary) return;
index af852bb..55b3ddb 100644 (file)
@@ -57,7 +57,7 @@ function SymbolDef(scope, orig, init) {
     this.id = SymbolDef.next_id++;
 };
 
-SymbolDef.next_id = 1;
+SymbolDef.next_id = 1e6;
 
 SymbolDef.prototype = {
     unmangleable: function(options) {