diff options
author | Mihai Bazon <mihai@bazon.net> | 2012-08-28 15:29:58 +0300 |
---|---|---|
committer | Mihai Bazon <mihai@bazon.net> | 2012-08-28 15:29:58 +0300 |
commit | 7fcb6bcb1270d1688512e25704125edb5b35b3c5 (patch) | |
tree | 6c0b5b40cd2731d8f6f15eae6f816571ef05adcd /lib | |
parent | ce8e8d57c0d346dba9527b7a11b03364ce9ad1bb (diff) | |
download | tracifyjs-7fcb6bcb1270d1688512e25704125edb5b35b3c5.tar.gz tracifyjs-7fcb6bcb1270d1688512e25704125edb5b35b3c5.zip |
fix code generator for this case:
if (foo) {
with (bar)
if (baz)
x();
} else y();
(the compressor removes the brackets since the consequent consists of a
single statement, but the codegen must include the brackets because
otherwise the `else` would refer to the inner `if`)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ast.js | 11 | ||||
-rw-r--r-- | lib/output.js | 5 |
2 files changed, 8 insertions, 8 deletions
@@ -149,6 +149,9 @@ var AST_EmptyStatement = DEFNODE("EmptyStatement", null, { } }, AST_Statement); +var AST_StatementWithBody = DEFNODE("StatementWithBody", null, { +}, AST_Statement); + var AST_DWLoop = DEFNODE("DWLoop", "condition", { $documentation: "Base class for do/while statements.", _walk: function(visitor) { @@ -157,7 +160,7 @@ var AST_DWLoop = DEFNODE("DWLoop", "condition", { this.body._walk(visitor); }); } -}, AST_Statement); +}, AST_StatementWithBody); var AST_Do = DEFNODE("Do", null, { $documentation: "A `do` statement" @@ -177,7 +180,7 @@ var AST_For = DEFNODE("For", "init condition step", { this.body._walk(visitor); }); } -}, AST_Statement); +}, AST_StatementWithBody); var AST_ForIn = DEFNODE("ForIn", "init name object", { $documentation: "A `for ... in` statement", @@ -188,7 +191,7 @@ var AST_ForIn = DEFNODE("ForIn", "init name object", { this.body._walk(visitor); }); } -}, AST_Statement); +}, AST_StatementWithBody); var AST_With = DEFNODE("With", "expression", { $documentation: "A `with` statement", @@ -198,7 +201,7 @@ var AST_With = DEFNODE("With", "expression", { this.body._walk(visitor); }); } -}, AST_Statement); +}, AST_StatementWithBody); /* -----[ scope and functions ]----- */ diff --git a/lib/output.js b/lib/output.js index 1d9e5015..7cd3e3c0 100644 --- a/lib/output.js +++ b/lib/output.js @@ -611,10 +611,7 @@ function OutputStream(options) { } b = b.alternative; } - else if (b instanceof AST_While - || b instanceof AST_Do - || b instanceof AST_For - || b instanceof AST_ForIn) { + else if (b instanceof AST_StatementWithBody) { b = b.body; } else break; |