From: Mihai Bazon Date: Wed, 3 Oct 2012 12:41:11 +0000 (+0300) Subject: AST cleanup (dropped AST_StatementBase) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=3412498795cfeb4c5700c39e05f895c96412695f;p=UglifyJS.git AST cleanup (dropped AST_StatementBase) --- diff --git a/lib/ast.js b/lib/ast.js index 185328a1..d80d7152 100644 --- a/lib/ast.js +++ b/lib/ast.js @@ -114,31 +114,28 @@ AST_Node.warn = function(txt, props) { /* -----[ statements ]----- */ -var AST_StatementBase = DEFNODE("StatementBase", null, { +var AST_Statement = DEFNODE("Statement", null, { + $documentation: "Base class of all statements", }); -var AST_Statement = DEFNODE("Statement", "body", { - $documentation: "Base class of all statements", +var AST_Debugger = DEFNODE("Debugger", null, { + $documentation: "Represents a debugger statement", +}, AST_Statement); + +var AST_Directive = DEFNODE("Directive", "value scope", { + $documentation: "Represents a directive, like \"use strict\";", +}, AST_Statement); + +var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", { + $documentation: "A statement consisting of an expression, i.e. a = 1 + 2.", _walk: function(visitor) { return visitor._visit(this, function(){ this.body._walk(visitor); }); } -}, AST_StatementBase); - -var AST_Debugger = DEFNODE("Debugger", null, { - $documentation: "Represents a debugger statement" -}, AST_StatementBase); - -var AST_Directive = DEFNODE("Directive", "value scope", { - $documentation: "Represents a directive, like \"use strict\";" -}, AST_StatementBase); - -var AST_SimpleStatement = DEFNODE("SimpleStatement", null, { - $documentation: "A statement consisting of an expression, i.e. a = 1 + 2." }, AST_Statement); -var AST_BlockStatement = DEFNODE("BlockStatement", null, { +var AST_BlockStatement = DEFNODE("BlockStatement", "body", { $documentation: "A block statement.", _walk: function(visitor) { return visitor._visit(this, function(){ @@ -158,7 +155,7 @@ function walk_body(node, visitor) { }); }; -var AST_Block = DEFNODE("Block", null, { +var AST_Block = DEFNODE("Block", "body", { $documentation: "A block of statements (usually always bracketed)", _walk: function(visitor) { return visitor._visit(this, function(){ @@ -174,8 +171,13 @@ var AST_EmptyStatement = DEFNODE("EmptyStatement", null, { } }, AST_Statement); -var AST_StatementWithBody = DEFNODE("StatementWithBody", null, { - $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`." +var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", { + $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`.", + _walk: function(visitor) { + return visitor._visit(this, function(){ + this.body._walk(visitor); + }); + } }, AST_Statement); var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", { @@ -325,7 +327,7 @@ var AST_If = DEFNODE("If", "condition alternative", { /* -----[ SWITCH ]----- */ -var AST_Switch = DEFNODE("Switch", "expression", { +var AST_Switch = DEFNODE("Switch", "body expression", { $documentation: "A `switch` statement", _walk: function(visitor) { return visitor._visit(this, function(){ diff --git a/lib/compress.js b/lib/compress.js index 423d049b..1319d798 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -162,7 +162,7 @@ merge(Compressor.prototype, { if (thing === null) return []; if (thing instanceof AST_BlockStatement) return thing.body; if (thing instanceof AST_EmptyStatement) return []; - if (thing instanceof AST_StatementBase) return [ thing ]; + if (thing instanceof AST_Statement) return [ thing ]; throw new Error("Can't convert thing to statement array"); }; @@ -741,7 +741,7 @@ merge(Compressor.prototype, { return thing && thing.aborts(); }; (function(def){ - def(AST_StatementBase, function(){ return null }); + def(AST_Statement, function(){ return null }); def(AST_Jump, function(){ return this }); def(AST_BlockStatement, function(){ var n = this.body.length; diff --git a/test/run-tests.js b/test/run-tests.js index 8822f2a5..abace39c 100755 --- a/test/run-tests.js +++ b/test/run-tests.js @@ -46,7 +46,7 @@ function test_directory(dir) { function as_toplevel(input) { if (input instanceof U.AST_BlockStatement) input = input.body; - else if (input instanceof U.AST_StatementBase) input = [ input ]; + else if (input instanceof U.AST_Statement) input = [ input ]; else throw new Error("Unsupported input syntax"); var toplevel = new U.AST_Toplevel({ body: input }); toplevel.figure_out_scope();