From 8abfe395086ea11a0d29bd917c40af92e0f5eb22 Mon Sep 17 00:00:00 2001 From: Bruno Jouhier Date: Thu, 26 Dec 2013 22:09:29 +0100 Subject: [PATCH] fixed #189 --- lib/callbacks/transform.js | 6 +++--- test/common/eval-test._js | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/callbacks/transform.js b/lib/callbacks/transform.js index 564f3cdc..76273d94 100644 --- a/lib/callbacks/transform.js +++ b/lib/callbacks/transform.js @@ -847,14 +847,14 @@ if (typeof exports !== 'undefined') { }; function _canonFlows(node, options) { - function _doIt(node, parent) { + function _doIt(node, parent, force) { var scope = node._scope; function _doAsyncFor(node) { // extra pass to wrap async condition and update if (node.condition && node.condition._async && node.condition.type !== CALL) node.condition = _flowsTemplates.CONDITION.generate(node, { $name: "__$" + node._scope.name, - $condition: node.condition + $condition: _doIt(node.condition, node, true), }); if (node.update && node.update._async) node.update = _flowsTemplates.UPDATE.generate(node, { $name: "__$" + node._scope.name, @@ -862,7 +862,7 @@ if (typeof exports !== 'undefined') { }); } if (node.type == FOR && node._pass === "flows") _doAsyncFor(node); - if (!scope || !scope.isAsync() || node._pass === "flows") return _propagate(node, _doIt); + if (!scope || !scope.isAsync() || (!force && node._pass === "flows")) return _propagate(node, _doIt); switch (node.type) { case IF: diff --git a/test/common/eval-test._js b/test/common/eval-test._js index 5bb3b883..0104746e 100644 --- a/test/common/eval-test._js +++ b/test/common/eval-test._js @@ -796,3 +796,17 @@ asyncTest("futures on _(fn, idx)", 1, function(_) { start(); }); +asyncTest("do while", 1, function(_) { + var i = 0; + function read(_) { + return delay(_, ++i); + } + var s = ""; + var v = read(_); + do { + s += v; + } while ((v = read(_)) < 5); + strictEqual(s, "1234"); + start(); +}); +