improve SymbolDef info in `--output ast` (#2778)
authorkzc <kzc@users.noreply.github.com>
Sat, 13 Jan 2018 17:40:51 +0000 (12:40 -0500)
committerAlex Lam S.L <alexlamsl@gmail.com>
Sat, 13 Jan 2018 17:40:51 +0000 (01:40 +0800)
* SymbolDef info (a.k.a. `thedef`) is now represented as a string containing `"ID name [mangled_name]"`.
* Enhance display of `globals`, `variables`, `functions` and `enclosed`.
* `SymbolDef.next_id` starts at `1` and the `id` is adjusted for `-o ast` display.

bin/uglifyjs
lib/scope.js

index 99248f1..9a3257e 100755 (executable)
@@ -227,28 +227,15 @@ function run() {
             result.ast.figure_out_scope({});
         }
         print(JSON.stringify(result.ast, function(key, value) {
-            switch (key) {
+            if (value) switch (key) {
               case "thedef":
-                if (typeof value == "object" && typeof value.id == "number") {
-                    return value.id;
-                }
-                return;
+                return symdef(value);
               case "enclosed":
-                return value.map(function(sym){
-                    return sym.id;
-                });
+                return value.length ? value.map(symdef) : undefined;
               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;
+                return value.size() ? value.map(symdef) : undefined;
             }
             if (skip_key(key)) return;
             if (value instanceof UglifyJS.AST_Token) return;
@@ -403,6 +390,12 @@ function skip_key(key) {
     return skip_keys.indexOf(key) >= 0;
 }
 
+function symdef(def) {
+    var ret = (1e6 + def.id) + " " + def.name;
+    if (def.mangled_name) ret += " " + def.mangled_name;
+    return ret;
+}
+
 function format_object(obj) {
     var lines = [];
     var padding = "";
index 55b3ddb..af852bb 100644 (file)
@@ -57,7 +57,7 @@ function SymbolDef(scope, orig, init) {
     this.id = SymbolDef.next_id++;
 };
 
-SymbolDef.next_id = 1e6;
+SymbolDef.next_id = 1;
 
 SymbolDef.prototype = {
     unmangleable: function(options) {