diff options
-rw-r--r-- | lib/ast.js | 2 | ||||
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | lib/parse.js | 26 | ||||
-rw-r--r-- | lib/scope.js | 2 |
4 files changed, 16 insertions, 18 deletions
@@ -86,7 +86,7 @@ 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", "required", { $documentation: "A block statement.", _walk: function(visitor) { return visitor._visit(this, function(){ diff --git a/lib/compress.js b/lib/compress.js index 025c262d..c28aacce 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -35,10 +35,6 @@ function Compressor(options) { return this; }); - AST_Token.DEFMETHOD("squeeze", function(){ - return this; - }); - function SQUEEZE(nodetype, squeeze) { nodetype.DEFMETHOD("squeeze", function(compressor){ compressor.push_node(this); diff --git a/lib/parse.js b/lib/parse.js index 7f144295..a30ec5a1 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -746,7 +746,7 @@ function parse($TEXT, exigent_mode) { case "punc": switch (S.token.value) { case "{": - return block_(); + return block_(false); case "[": case "(": return simple_statement(); @@ -938,7 +938,7 @@ function parse($TEXT, exigent_mode) { S.in_directives = true; S.in_loop = 0; S.labels = []; - var a = block_(); + var a = block_(true); --S.in_function; S.in_loop = loop; S.labels = labels; @@ -960,7 +960,7 @@ function parse($TEXT, exigent_mode) { }); }; - function block_() { + function block_(required) { var start = S.token; expect("{"); var a = []; @@ -971,9 +971,10 @@ function parse($TEXT, exigent_mode) { var end = S.token; next(); return new AST_BlockStatement({ - start : start, - body : a, - end : end + required : required, + start : start, + body : a, + end : end }); }; @@ -1011,14 +1012,15 @@ function parse($TEXT, exigent_mode) { var end = S.token; next(); return new AST_SwitchBlock({ - start : start, - body : a, - end : end + required : true, + start : start, + body : a, + end : end }); })); function try_() { - var body = block_(), bcatch = null, bfinally = null; + var body = block_(true), bcatch = null, bfinally = null; if (is("keyword", "catch")) { var start = S.token; next(); @@ -1028,7 +1030,7 @@ function parse($TEXT, exigent_mode) { bcatch = new AST_Catch({ start : start, argname : name, - body : block_(), + body : block_(true), end : prev() }); } @@ -1037,7 +1039,7 @@ function parse($TEXT, exigent_mode) { next(); bfinally = new AST_Finally({ start : start, - body : block_(), + body : block_(true), end : prev() }); } diff --git a/lib/scope.js b/lib/scope.js index 05585fe0..a0170561 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -7,7 +7,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){ // times on the same tree. // pass 1: setup scope chaining and handle definitions - var scope = null; + var scope = this.parent_scope; var labels = {}; var tw = new TreeWalker(function(node, descend){ if (node instanceof AST_Scope) { |