ensureBlock on if statements with expression return statements - fixes #764

This commit is contained in:
Sebastian McKenzie
2015-02-14 19:07:23 +11:00
parent 0e1743738e
commit 3649fad485
3 changed files with 22 additions and 1 deletions

View File

@@ -294,7 +294,15 @@ TailCallTransformer.prototype.subTransformCallExpression = function (node) {
// looks for and replaces tail recursion calls
var firstPass = {
enter: function (node, parent, scope, state) {
if (t.isReturnStatement(node)) {
if (t.isIfStatement(node)) {
if (t.isReturnStatement(node.alternate)) {
t.ensureBlock(node, "alternate");
}
if (t.isReturnStatement(node.consequent)) {
t.ensureBlock(node, "consequent");
}
} else if (t.isReturnStatement(node)) {
this.skip();
return state.subTransform(node.argument);
} else if (t.isTryStatement(parent)) {

View File

@@ -0,0 +1,4 @@
function f() {
if (true) {}
else return f()
}

View File

@@ -0,0 +1,9 @@
"use strict";
function f() {
_function: while (true) {
if (true) {} else {
continue _function;
}
}
}