cleaned up usage of AST_BlockStatement

The following nodes were instances of AST_BlockStatement: AST_Scope,
AST_SwitchBlock, AST_SwitchBranch.  Also, AST_Try, AST_Catch, AST_Finally
were having a body instanceof AST_BlockStatement.

Overloading the meaning of AST_BlockStatement this way turned out to be a
mess; we now have an AST_Block class that is the base class for things
having a block of statements (might or might not be bracketed).  The
`this.body` of AST_Scope, AST_Try, AST_Catch, AST_Finally is now an array of
statements (as they inherit from AST_Block).

Avoiding calling superclass's _walk function in walkers (turns out we walked
a node multiple times).
This commit is contained in:
Mihai Bazon
2012-09-05 11:31:02 +03:00
parent 1b5183dd5e
commit 8633b0073f
6 changed files with 61 additions and 60 deletions

View File

@@ -228,9 +228,7 @@ AST_Toplevel.DEFMETHOD("scope_warnings", function(options){
}
if (options.nested_defuns
&& node instanceof AST_Defun
&& !(tw.parent() instanceof AST_Scope
|| (tw.parent() instanceof AST_BlockStatement
&& tw.parent(1) instanceof AST_Scope))) {
&& !(tw.parent() instanceof AST_Scope)) {
AST_Node.warn("Function {name} declared in nested statement [{line},{col}]", {
name: node.name.name,
line: node.start.line,