simplify traversal logic (#4063)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 22 Aug 2020 21:45:35 +0000 (05:45 +0800)
committerGitHub <noreply@github.com>
Sat, 22 Aug 2020 21:45:35 +0000 (05:45 +0800)
lib/output.js
lib/scope.js

index a9e0ca7..19c37b2 100644 (file)
@@ -1174,10 +1174,7 @@ function OutputStream(options) {
     });
 
     /* -----[ other expressions ]----- */
-    DEFPRINT(AST_Call, function(self, output) {
-        self.expression.print(output);
-        if (self instanceof AST_New && !need_constructor_parens(self, output))
-            return;
+    function print_call_args(self, output) {
         if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {
             output.add_mapping(self.start);
         }
@@ -1187,11 +1184,16 @@ function OutputStream(options) {
                 expr.print(output);
             });
         });
+    }
+    DEFPRINT(AST_Call, function(self, output) {
+        self.expression.print(output);
+        print_call_args(self, output);
     });
     DEFPRINT(AST_New, function(self, output) {
         output.print("new");
         output.space();
-        AST_Call.prototype._codegen(self, output);
+        self.expression.print(output);
+        if (need_constructor_parens(self, output)) print_call_args(self, output);
     });
     DEFPRINT(AST_Sequence, function(self, output) {
         self.expressions.forEach(function(node, index) {
index 3297b8e..450c106 100644 (file)
@@ -559,21 +559,23 @@ AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options) {
     options = _default_mangler_options(options);
     base54.reset();
     try {
-        AST_Node.prototype.print = function(stream, force_parens) {
-            this._print(stream, force_parens);
-            if (this instanceof AST_Symbol && !this.unmangleable(options)) {
-                base54.consider(this.name, -1);
-            } else if (options.properties) {
-                if (this instanceof AST_Dot) {
-                    base54.consider(this.property, -1);
-                } else if (this instanceof AST_Sub) {
-                    skip_string(this.property);
-                }
-            }
+        var fn = AST_Symbol.prototype.add_source_map;
+        AST_Symbol.prototype.add_source_map = function() {
+            if (!this.unmangleable(options)) base54.consider(this.name, -1);
         };
+        if (options.properties) {
+            AST_Dot.prototype.add_source_map = function() {
+                base54.consider(this.property, -1);
+            };
+            AST_Sub.prototype.add_source_map = function() {
+                skip_string(this.property);
+            };
+        }
         base54.consider(this.print_to_string(), 1);
     } finally {
-        AST_Node.prototype.print = AST_Node.prototype._print;
+        AST_Symbol.prototype.add_source_map = fn;
+        delete AST_Dot.prototype.add_source_map;
+        delete AST_Sub.prototype.add_source_map;
     }
     base54.sort();