aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ast.js2
-rw-r--r--lib/compress.js4
-rw-r--r--lib/parse.js26
-rw-r--r--lib/scope.js2
4 files changed, 16 insertions, 18 deletions
diff --git a/lib/ast.js b/lib/ast.js
index 1b75bd64..3fd197e8 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -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) {