aboutsummaryrefslogtreecommitdiff
path: root/lib/output.js
diff options
context:
space:
mode:
authorMihai Bazon <mihai@bazon.net>2012-09-05 11:31:02 +0300
committerMihai Bazon <mihai@bazon.net>2012-09-05 11:39:43 +0300
commit8633b0073f016fddd655ae5e1f1726287a24828d (patch)
tree83f03aac1f74a30555e44edfa2a75eb5ca372e6f /lib/output.js
parent1b5183dd5ee7d2b147f5862c9abf8f45f50fc82f (diff)
downloadtracifyjs-8633b0073f016fddd655ae5e1f1726287a24828d.tar.gz
tracifyjs-8633b0073f016fddd655ae5e1f1726287a24828d.zip
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).
Diffstat (limited to 'lib/output.js')
-rw-r--r--lib/output.js14
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/output.js b/lib/output.js
index e5c1c26b..5df1c2c4 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -467,12 +467,14 @@ function OutputStream(options) {
self.body.print(output);
output.semicolon();
});
- DEFPRINT(AST_BlockStatement, function(self, output){
- var body = self.body;
+ function print_bracketed(body, output) {
if (body.length > 0) output.with_block(function(){
display_body(body, false, output);
});
else output.print("{}");
+ };
+ DEFPRINT(AST_BlockStatement, function(self, output){
+ print_bracketed(self.body, output);
});
DEFPRINT(AST_EmptyStatement, function(self, output){
output.semicolon();
@@ -563,7 +565,7 @@ function OutputStream(options) {
});
});
output.space();
- self.body.print(output);
+ print_bracketed(self.body, output);
});
DEFPRINT(AST_Lambda, function(self, output){
self._do_print(output);
@@ -701,7 +703,7 @@ function OutputStream(options) {
DEFPRINT(AST_Try, function(self, output){
output.print("try");
output.space();
- self.btry.print(output);
+ print_bracketed(self.body, output);
if (self.bcatch) {
output.space();
self.bcatch.print(output);
@@ -718,12 +720,12 @@ function OutputStream(options) {
self.argname.print(output);
});
output.space();
- self.body.print(output);
+ print_bracketed(self.body, output);
});
DEFPRINT(AST_Finally, function(self, output){
output.print("finally");
output.space();
- self.body.print(output);
+ print_bracketed(self.body, output);
});
/* -----[ var/const ]----- */