test for falsy nodes in tail call transformer subtransform

This commit is contained in:
Sebastian McKenzie 2015-02-10 22:39:46 +11:00
parent 45b70d7fba
commit edc8bee38e

View File

@ -132,6 +132,8 @@ TailCallTransformer.prototype.run = function () {
}; };
TailCallTransformer.prototype.subTransform = function (node) { TailCallTransformer.prototype.subTransform = function (node) {
if (!node) return;
var handler = this["subTransform" + node.type]; var handler = this["subTransform" + node.type];
if (handler) return handler.call(this, node); if (handler) return handler.call(this, node);
}; };
@ -324,8 +326,10 @@ var secondPass = {
var thirdPass = { var thirdPass = {
enter: function (node, parent, scope, state) { enter: function (node, parent, scope, state) {
if (!t.isExpressionStatement(node)) return; if (!t.isExpressionStatement(node)) return;
var expr = node.expression; var expr = node.expression;
if (!t.isAssignmentExpression(expr)) return; if (!t.isAssignmentExpression(expr)) return;
if (!state.needsThis && expr.left === state.getThisId()) { if (!state.needsThis && expr.left === state.getThisId()) {
this.remove(); this.remove();
} else if (!state.needsArguments && expr.left === state.getArgumentsId() && t.isArrayExpression(expr.right)) { } else if (!state.needsArguments && expr.left === state.getArgumentsId() && t.isArrayExpression(expr.right)) {