VimŸUnDoĺ٘ GĄ ą-WűL‘9B6żH™„(żÍ)HI‹ ˜$6666TzĘB _Đ —<˙˙˙˙TzxĐő — ™ Ř$ ő — ™ ×5_Đ ˜4˙˙˙˙TzxÓő — ™ Ř4 console.log(5_Đ ˜5˙˙˙˙TzxÓő — ™ Ř6 console.log(x)5_Đ ˜(˙˙˙˙TzxÖő — ˜7 console.log(x);5_Đ –(˙˙˙˙Tzx×ő – ˜ ×ő – — ×5_Đ —(˙˙˙˙TzxŘő – ˜7 console.log(x);5_Đ —$˙˙˙˙Tzxüő – —3 console.log(x);5_Đ  ¤˙˙˙˙Tzy=ő ×'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;[ state_machine$2.pushCleanupAction(tmp1, tmp1.publish, [- null,, null' ]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:Z ch2$3.publish(null, x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:: ch2.takeN(4, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9, null ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ ~˙˙˙˙Tzymő ×'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;[ state_machine$2.pushCleanupAction(tmp1, tmp1.publish, [- null,, null' ]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:P ch2$3.put(x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:: ch2.takeN(4, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9, null ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ Ĺ˙˙˙˙Tzyšő Ô'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:P ch2$3.put(x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:: ch2.takeN(4, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9, null ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ }˙˙˙˙Tzzóő Ó'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:P ch2$3.put(x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:: ch2.takeN(4, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ }˙˙˙˙Tz{"ő Ń'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(1);, } else {O state_machine$2.goTo(2 + 1 + jumpBody);. break;% }' case 2:5 var tmp1 = ch1$3;< if (tmp1 && tmp1.take) {M tmp1.take(state_machine$2.thenTo(3));, } else {[ throw new Error('Expected a channel in step ' + 2);% }* break;' case 3:0 var i$2 = 1;< //finally ch2.put(null);9 x = arguments[i$2++];' case 4:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(5 + jump);, } else {G state_machine$2.goTo(5 + jump);. break;% }' case 5:I state_machine$2.callback(null, null);* break;' case 6:: state_machine$2.phi();* break;' case 7:P ch2$3.put(x * x, state_machine$2.thenTo(8));* break;' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:: ch2.takeN(4, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ  €˙˙˙˙Tz‚ő Ó'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:P ch2$3.put(x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ  €˙˙˙˙Tz‚Łő Đ'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:5 var jumpBody = 5;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;: if (x = x.resolve()) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:P ch2$3.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ :˙˙˙˙TzŠő Ó'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();6 greet('hello', x.resolver(0)); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();4 greet('one', x.resolver(0)); case 2:9 y = y || state_machine.channel();4 greet('two', y.resolver(0)); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();J greet('hello', ch1$2.resolver(0));+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();J greet('world', ch2$2.resolver(0));+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do nested processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( ch1 = new Channel();( ch2 = new Channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:5 var jumpBody = 6;/ if (true) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + 1 + jumpBody);. break;% }' case 3:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(4));, } else {[ throw new Error('Expected a channel in step ' + 3);% }* break;' case 4:0 var i$2 = 1;9 x = arguments[i$2++];' case 5:5 var jump = 1 + 1;= if (!(x = x.resolve())) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:I state_machine$2.callback(null, null);* break;' case 7:: state_machine$2.phi();* break;' case 8:P ch2$3.put(x * x, state_machine$2.thenTo(9));* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ ë˙˙˙˙TzŠŤő z'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(3));, } else {[ throw new Error('Expected a channel in step ' + 2);% }* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;: if (x = x.resolve()) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:7 var tmp1$3 = ch1$3;@ if (tmp1$3 && tmp1$3.take) {O tmp1$3.take(state_machine$2.thenTo(7));, } else {[ throw new Error('Expected a channel in step ' + 6);% }* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);1 var x, ch1$2, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:8 var tmp1$2 = chIn$2;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(3));, } else {[ throw new Error('Expected a channel in step ' + 2);% }* break;' case 3:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 4:5 var jumpBody = 9;B if (ch1$2 = ch1$2.resolve()) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:7 var tmp1$3 = ch1$2;@ if (tmp1$3 && tmp1$3.take) {O tmp1$3.take(state_machine$2.thenTo(6));, } else {[ throw new Error('Expected a channel in step ' + 5);% }* break;' case 6:0 var i$3 = 1;9 x = arguments[i$3++];' case 7:7 var jumpBody$2 = 6;: if (x = x.resolve()) {C state_machine$2.pushPhi(7);, } else {Q state_machine$2.goTo(8 + 1 + jumpBody$2);. break;% }' case 8:R chOut$2.put(x * x, state_machine$2.thenTo(9));* break;' case 9:8 var tmp1$4 = chIn$2;@ if (tmp1$4 && tmp1$4.take) {P tmp1$4.take(state_machine$2.thenTo(10));, } else {[ throw new Error('Expected a channel in step ' + 9);% }* break;( case 10:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 11:: state_machine$2.phi();* break;( case 12:7 var tmp1$5 = ch1$2;@ if (tmp1$5 && tmp1$5.take) {P tmp1$5.take(state_machine$2.thenTo(13));, } else {\ throw new Error('Expected a channel in step ' + 12);% }* break;( case 13:0 var i$5 = 1;9 x = arguments[i$5++];( case 14:: state_machine$2.phi();* break;( case 15:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ €˙˙˙˙Tz‹ƒő „'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:7 var tmp1$2 = ch1$3;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(3));, } else {[ throw new Error('Expected a channel in step ' + 2);% }* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;: if (x = x.resolve()) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:7 var tmp1$3 = ch1$3;@ if (tmp1$3 && tmp1$3.take) {O tmp1$3.take(state_machine$2.thenTo(7));, } else {[ throw new Error('Expected a channel in step ' + 6);% }* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:8 var tmp1$2 = chIn$2;@ if (tmp1$2 && tmp1$2.take) {O tmp1$2.take(state_machine$2.thenTo(6));, } else {[ throw new Error('Expected a channel in step ' + 5);% }* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;B if (ch1$2 = ch1$2.resolve()) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:7 var tmp1$3 = ch1$2;@ if (tmp1$3 && tmp1$3.take) {O tmp1$3.take(state_machine$2.thenTo(9));, } else {[ throw new Error('Expected a channel in step ' + 8);% }* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;: if (x = x.resolve()) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:8 var tmp1$4 = chIn$2;@ if (tmp1$4 && tmp1$4.take) {P tmp1$4.take(state_machine$2.thenTo(13));, } else {\ throw new Error('Expected a channel in step ' + 12);% }* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:7 var tmp1$5 = ch1$2;@ if (tmp1$5 && tmp1$5.take) {P tmp1$5.take(state_machine$2.thenTo(16));, } else {\ throw new Error('Expected a channel in step ' + 15);% }* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ 6˙˙˙˙Tz‹°ő   g$ ő   f5_Đ 0˙˙˙˙Tz‹˛ő   g0 console.log(5_Đ 1˙˙˙˙Tz‹˛ő   g2 console.log(x)5_Đ 0˙˙˙˙Tz‹śő   g3 console.log(x);5_Đ 3˙˙˙˙Tz‹şő   h$ ő   g5_Đ 0˙˙˙˙Tz‹˝ő   h0 console.log(5_Đ 8˙˙˙˙Tz‹Áő   h9 console.log(7, ch1$2)5_Đ ‡˙˙˙˙TzŒĄő h'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;: if (x = x.resolve()) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;: console.log(7, ch1$2);B if (ch1$2 = ch1$2.resolve()) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;7 console.log(10, x);: if (x = x.resolve()) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ 6˙˙˙˙TzŒĽő   g$ ő   f5_Đ 0˙˙˙˙TzŒ§ő   g0 console.log(5_Đ 5˙˙˙˙TzŒŞő   g6 console.log(10, x)5_Đ 4˙˙˙˙TzŒąő   h$ ő   g5_Đ 0˙˙˙˙TzŒłő   h0 console.log(5_Đ  8˙˙˙˙TzŒś ő   h9 console.log(7, ch1$2)5_Đ! ˙˙˙˙TzŠäő h'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;: console.log(7, ch1$2);R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;7 console.log(10, x);F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ "! †˙˙˙˙TzŞ.ő f'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ!#" †˙˙˙˙Tz°äő ‡'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 5;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:5 var jump = 1 + 1;/ if (true) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:P ch2$3.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:J ch1$3.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:: state_machine$2.phi();* break;( case 11:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 13;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:5 var jump = 1 + 9;/ if (true) {J state_machine$2.pushPhi(9 + jump);, } else {G state_machine$2.goTo(9 + jump);. break;% }' case 9:K ch1$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;9 x = arguments[i$3++];( case 11:7 var jumpBody$2 = 9;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(11);, } else {R state_machine$2.goTo(12 + 1 + jumpBody$2);. break;% }( case 12:7 var jump$2 = 1 + 5;/ if (true) {M state_machine$2.pushPhi(13 + jump$2);, } else {J state_machine$2.goTo(13 + jump$2);. break;% }( case 13:S chOut$2.put(x * x, state_machine$2.thenTo(14));* break;( case 14:: state_machine$2.phi();* break;( case 15:L chIn$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 17:: state_machine$2.phi();* break;( case 18:: state_machine$2.phi();* break;( case 19:K ch1$2.take(state_machine$2.thenTo(20));* break;( case 20:0 var i$5 = 1;9 x = arguments[i$5++];( case 21:: state_machine$2.phi();* break;( case 22:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ"$#Ŕ˙˙˙˙Tząäő f'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ#%$Ŕ˙˙˙˙Tz˛†ő f'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {= state_machine.goTo(8 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {= state_machine.goTo(8 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {= state_machine.goTo(8 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {= state_machine.goTo(8 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {9 state_machine.goTo(7 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {9 state_machine.goTo(4 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {9 state_machine.goTo(5 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {K state_machine$2.goTo(5 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {K state_machine$2.goTo(8 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {N state_machine$2.goTo(11 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ$&% U˙˙˙˙Tzˇő f'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ%'& Đ˙˙˙˙Tz¸gő °'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:P ch2$3.put(x * x, state_machine$2.thenTo(6));* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:J ch1$2.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(10);, } else {R state_machine$2.goTo(11 + 1 + jumpBody$2);. break;% }( case 11:S chOut$2.put(x * x, state_machine$2.thenTo(12));* break;( case 12:L chIn$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 14:: state_machine$2.phi();* break;( case 15:K ch1$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$5 = 1;9 x = arguments[i$5++];( case 17:: state_machine$2.phi();* break;( case 18:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ&(' ˆ˙˙˙˙Tz¸‰ő Ń'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 5;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:5 var jump = 1 + 1;/ if (true) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:P ch2$3.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:J ch1$3.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:: state_machine$2.phi();* break;( case 11:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 13;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:5 var jump = 1 + 9;/ if (true) {J state_machine$2.pushPhi(9 + jump);, } else {G state_machine$2.goTo(9 + jump);. break;% }' case 9:K ch1$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;9 x = arguments[i$3++];( case 11:7 var jumpBody$2 = 9;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(11);, } else {R state_machine$2.goTo(12 + 1 + jumpBody$2);. break;% }( case 12:7 var jump$2 = 1 + 5;/ if (true) {M state_machine$2.pushPhi(13 + jump$2);, } else {J state_machine$2.goTo(13 + jump$2);. break;% }( case 13:S chOut$2.put(x * x, state_machine$2.thenTo(14));* break;( case 14:: state_machine$2.phi();* break;( case 15:L chIn$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 17:: state_machine$2.phi();* break;( case 18:: state_machine$2.phi();* break;( case 19:K ch1$2.take(state_machine$2.thenTo(20));* break;( case 20:0 var i$5 = 1;9 x = arguments[i$5++];( case 21:: state_machine$2.phi();* break;( case 22:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ')( ˆ˙˙˙˙Tzščő Ó'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:# console.log(x); case 10:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 5;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:5 var jump = 1 + 1;/ if (true) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:P ch2$3.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:J ch1$3.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:: state_machine$2.phi();* break;( case 11:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 13;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:5 var jump = 1 + 9;/ if (true) {J state_machine$2.pushPhi(9 + jump);, } else {G state_machine$2.goTo(9 + jump);. break;% }' case 9:K ch1$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;9 x = arguments[i$3++];( case 11:7 var jumpBody$2 = 9;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(11);, } else {R state_machine$2.goTo(12 + 1 + jumpBody$2);. break;% }( case 12:7 var jump$2 = 1 + 5;/ if (true) {M state_machine$2.pushPhi(13 + jump$2);, } else {J state_machine$2.goTo(13 + jump$2);. break;% }( case 13:S chOut$2.put(x * x, state_machine$2.thenTo(14));* break;( case 14:: state_machine$2.phi();* break;( case 15:L chIn$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 17:: state_machine$2.phi();* break;( case 18:: state_machine$2.phi();* break;( case 19:K ch1$2.take(state_machine$2.thenTo(20));* break;( case 20:0 var i$5 = 1;9 x = arguments[i$5++];( case 21:: state_machine$2.phi();* break;( case 22:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ(*) Ř˙˙˙˙TzźAő Ń'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 5;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:5 var jump = 1 + 1;/ if (true) {J state_machine$2.pushPhi(6 + jump);, } else {G state_machine$2.goTo(6 + jump);. break;% }' case 6:P ch2$3.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:J ch1$3.take(state_machine$2.thenTo(9));* break;' case 9:0 var i$3 = 1;9 x = arguments[i$3++];( case 10:: state_machine$2.phi();* break;( case 11:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 13;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:5 var jump = 1 + 9;/ if (true) {J state_machine$2.pushPhi(9 + jump);, } else {G state_machine$2.goTo(9 + jump);. break;% }' case 9:K ch1$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;9 x = arguments[i$3++];( case 11:7 var jumpBody$2 = 9;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(11);, } else {R state_machine$2.goTo(12 + 1 + jumpBody$2);. break;% }( case 12:7 var jump$2 = 1 + 5;/ if (true) {M state_machine$2.pushPhi(13 + jump$2);, } else {J state_machine$2.goTo(13 + jump$2);. break;% }( case 13:S chOut$2.put(x * x, state_machine$2.thenTo(14));* break;( case 14:: state_machine$2.phi();* break;( case 15:L chIn$2.take(state_machine$2.thenTo(16));* break;( case 16:0 var i$4 = 1;= ch1$2 = arguments[i$4++];( case 17:: state_machine$2.phi();* break;( case 18:: state_machine$2.phi();* break;( case 19:K ch1$2.take(state_machine$2.thenTo(20));* break;( case 20:0 var i$5 = 1;9 x = arguments[i$5++];( case 21:: state_machine$2.phi();* break;( case 22:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ)+* Đ˙˙˙˙Tzżúő Ĺ'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 5;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:8 var jumpHandler = 2;\ state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler);* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:Q ch2$3.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 13;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:: var jumpHandler$2 = 2;^ state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$2);* break;' case 9:L chIn$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;= ch1$2 = arguments[i$3++];( case 11:: state_machine$2.phi();* break;( case 12:K ch1$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;9 x = arguments[i$4++];( case 14:7 var jumpBody$2 = 6;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(14);, } else {R state_machine$2.goTo(15 + 1 + jumpBody$2);. break;% }( case 15:: var jumpHandler$3 = 2;` state_machine$2.pushCleanupStep(16, 16 + 1 + jumpHandler$3);* break;( case 16:K ch1$2.take(state_machine$2.thenTo(17));* break;( case 17:0 var i$5 = 1;9 x = arguments[i$5++];( case 18:: state_machine$2.phi();* break;( case 19:S chOut$2.put(x * x, state_machine$2.thenTo(20));* break;( case 20:: state_machine$2.phi();* break;( case 21:: state_machine$2.phi();* break;( case 22:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ*,+ Ú˙˙˙˙TzŔľő ×'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 6;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:6 var jumpFirst = 2;6 var jumpLater = 2;[ state_machine$2.pushPhi(6 + 2 + jumpFirst + jumpLater);? state_machine$2.pushPhi(6);L state_machine$2.goTo(6 + 1 + jumpLater);* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:Q ch2$3.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 15;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:7 var jumpFirst = 11;6 var jumpLater = 2;[ state_machine$2.pushPhi(9 + 2 + jumpFirst + jumpLater);? state_machine$2.pushPhi(9);L state_machine$2.goTo(9 + 1 + jumpLater);* break;' case 9:L chIn$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;= ch1$2 = arguments[i$3++];( case 11:: state_machine$2.phi();* break;( case 12:K ch1$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;9 x = arguments[i$4++];( case 14:7 var jumpBody$2 = 8;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(14);, } else {R state_machine$2.goTo(15 + 1 + jumpBody$2);. break;% }( case 15:8 var jumpFirst$2 = 4;8 var jumpLater$2 = 2;` state_machine$2.pushPhi(16 + 2 + jumpFirst$2 + jumpLater$2);@ state_machine$2.pushPhi(16);O state_machine$2.goTo(16 + 1 + jumpLater$2);* break;( case 16:K ch1$2.take(state_machine$2.thenTo(17));* break;( case 17:0 var i$5 = 1;9 x = arguments[i$5++];( case 18:: state_machine$2.phi();* break;( case 19:S chOut$2.put(x * x, state_machine$2.thenTo(20));* break;( case 20:: state_machine$2.phi();* break;( case 21:: state_machine$2.phi();* break;( case 22:: state_machine$2.phi();* break;( case 23:: state_machine$2.phi();* break;( case 24:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ+-, Í˙˙˙˙TzÂőő ×'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:0 var i$2 = 1;9 x = arguments[i$2++];' case 4:5 var jumpBody = 6;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {O state_machine$2.goTo(5 + 1 + jumpBody);. break;% }' case 5:6 var jumpFirst = 2;6 var jumpLater = 2;[ state_machine$2.pushPhi(6 + 1 + jumpFirst + jumpLater);? state_machine$2.pushPhi(6);L state_machine$2.goTo(6 + 1 + jumpLater);* break;' case 6:J ch1$3.take(state_machine$2.thenTo(7));* break;' case 7:0 var i$3 = 1;9 x = arguments[i$3++];' case 8:: state_machine$2.phi();* break;' case 9:Q ch2$3.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:0 var i$2 = 1;= ch1$2 = arguments[i$2++];' case 7:6 var jumpBody = 15;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(7);, } else {O state_machine$2.goTo(8 + 1 + jumpBody);. break;% }' case 8:7 var jumpFirst = 11;6 var jumpLater = 2;[ state_machine$2.pushPhi(9 + 1 + jumpFirst + jumpLater);? state_machine$2.pushPhi(9);L state_machine$2.goTo(9 + 1 + jumpLater);* break;' case 9:L chIn$2.take(state_machine$2.thenTo(10));* break;( case 10:0 var i$3 = 1;= ch1$2 = arguments[i$3++];( case 11:: state_machine$2.phi();* break;( case 12:K ch1$2.take(state_machine$2.thenTo(13));* break;( case 13:0 var i$4 = 1;9 x = arguments[i$4++];( case 14:7 var jumpBody$2 = 8;F if (x = x.resolve(), x !== null) {D state_machine$2.pushPhi(14);, } else {R state_machine$2.goTo(15 + 1 + jumpBody$2);. break;% }( case 15:8 var jumpFirst$2 = 4;8 var jumpLater$2 = 2;` state_machine$2.pushPhi(16 + 1 + jumpFirst$2 + jumpLater$2);@ state_machine$2.pushPhi(16);O state_machine$2.goTo(16 + 1 + jumpLater$2);* break;( case 16:K ch1$2.take(state_machine$2.thenTo(17));* break;( case 17:0 var i$5 = 1;9 x = arguments[i$5++];( case 18:: state_machine$2.phi();* break;( case 19:S chOut$2.put(x * x, state_machine$2.thenTo(20));* break;( case 20:: state_machine$2.phi();* break;( case 21:: state_machine$2.phi();* break;( case 22:: state_machine$2.phi();* break;( case 23:: state_machine$2.phi();* break;( case 24:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ,.- @˙˙˙˙TzĂćő •'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + jumpBody + 1);. break;% }P ch2$3.put(x * x, state_machine$2.thenTo(4));* break;' case 4:: state_machine$2.phi();* break;' case 5:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 9;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {O state_machine$2.goTo(6 + jumpBody + 1);. break;% }J ch1$2.take(state_machine$2.thenTo(7));* break;' case 7:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(6);, } else {Q state_machine$2.goTo(7 + jumpBody$2 + 1);. break;% }R chOut$2.put(x * x, state_machine$2.thenTo(8));* break;' case 8:: state_machine$2.phi();* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ-/. Ň˙˙˙˙TzÄWő •'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {O state_machine$2.goTo(3 + jumpBody + 1);. break;% }P ch2$3.put(x * x, state_machine$2.thenTo(4));* break;' case 4:: state_machine$2.phi();* break;' case 5:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 3;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {O state_machine$2.goTo(6 + jumpBody + 1);. break;% }J ch1$2.take(state_machine$2.thenTo(7));* break;' case 7:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(6);, } else {Q state_machine$2.goTo(7 + jumpBody$2 + 1);. break;% }R chOut$2.put(x * x, state_machine$2.thenTo(8));* break;' case 8:: state_machine$2.phi();* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ.0/ Ő˙˙˙˙TzĹ,ő •'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(3 + jumpBody);. break;% }P ch2$3.put(x * x, state_machine$2.thenTo(4));* break;' case 4:: state_machine$2.phi();* break;' case 5:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 3;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(6 + jumpBody);. break;% }J ch1$2.take(state_machine$2.thenTo(7));* break;' case 7:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(6);, } else {M state_machine$2.goTo(7 + jumpBody$2);. break;% }R chOut$2.put(x * x, state_machine$2.thenTo(8));* break;' case 8:: state_machine$2.phi();* break;' case 9:: state_machine$2.phi();* break;( case 10:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ/10 A˙˙˙˙TzĹtő ˜'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(3 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 3;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(6 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(8 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ021 Ň˙˙˙˙TzĹÓő ˜'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(3 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 4;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(6 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(8 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ132 A˙˙˙˙TzÊő ˜'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 4;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(7 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(9 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ243 A˙˙˙˙TzĆŹő š'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 5;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(7 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 3;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(9 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:7 console.log(x * x);( case 11:: state_machine$2.phi();* break;( case 12:: state_machine$2.phi();* break;( case 13:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ354 m˙˙˙˙TzÇÂő ˜'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 4;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(7 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(9 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:+ ch1.publish(null, ch3); case 6:, ch1.publish(null, null); case 7:) ch2.publish(null, 2); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:, ch2.publish(null, null); case 11:* ch3.publish(null, 20); case 12:* ch3.publish(null, 30); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ465 #˙˙˙˙TzÇůő ˜'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);4 var x, ch1$2, e, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.8 var jumpHandler = 1;Z state_machine$2.pushErrorStep(2, 2 + 1 + jumpHandler);* break;' case 2:B e = state_machine$2.state.err;3 console.log(e);' case 3:: state_machine$2.phi();* break;' case 4:7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 5:K chIn$2.take(state_machine$2.thenTo(6));* break;' case 6:9 ch1$2 = arguments[1];5 var jumpBody = 4;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(5);, } else {K state_machine$2.goTo(7 + jumpBody);. break;% }' case 7:J ch1$2.take(state_machine$2.thenTo(8));* break;' case 8:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(7);, } else {M state_machine$2.goTo(9 + jumpBody$2);. break;% }' case 9:S chOut$2.put(x * x, state_machine$2.thenTo(10));* break;( case 10:: state_machine$2.phi();* break;( case 11:: state_machine$2.phi();* break;( case 12:I state_machine$2.callback(null, true);* break;! }+ } catch (e$2) {> state_machine$2.callback(e$2); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:) ch2.publish(null, 2); case 6:+ ch1.publish(null, ch3); case 7:, ch1.publish(null, null); case 8:* ch3.publish(null, 20); case 9:) ch2.publish(null, 3); case 10:) ch2.publish(null, 4); case 11:* ch3.publish(null, 30); case 12:, ch2.publish(null, null); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5_Đ56 7˙˙˙˙TzĘAő Ž'var Channel = require('cspjs/channel');6var StateMachine = require('cspjs/src/state_machine');var assert = require('assert'); describe('errors', function () {# describe('catch', function () {Y it('must reject errors that are not of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;; state_machine.callback(null, true); break; case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }& assert.fail(); case 6:, state_machine.phi(); break; case 7:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });L it('must accept errors of the declared class', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 1;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;& assert.fail(); case 3:, state_machine.phi(); break; case 4:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(5, 5 + 1 + jumpHandler$2); break; case 5:4 e = state_machine.state.err;9 if (!(e && e instanceof Error)) {0 state_machine.phi();" break; }; state_machine.callback(null, true); break; case 6:, state_machine.phi(); break; case 7:6 var tmp1 = new Error('boom!');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 8:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });Z it('must bubble up an error if a catch has no return in it', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. var jumpHandler$2 = 2;N state_machine.pushErrorStep(6, 6 + 1 + jumpHandler$2); break; case 6:4 e = state_machine.state.err;1 assert.equal(e, 'boom!'); case 7:$ e = 'poof!'; case 8:, state_machine.phi(); break; case 9:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });T it('must bubble up unhandled errors in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(7, 7 + 1 + jumpHandler$2); break; case 7:4 e = state_machine.state.err;$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;P state_machine.pushErrorStep(13, 13 + 1 + jumpHandler$4); break; case 13:4 e = state_machine.state.err;$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must be limited to if block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:) var jump = 1 + 3;# if (true) {< state_machine.pushPhi(7 + jump); } else {9 state_machine.goTo(7 + jump);" break; } case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });A it('must be limited to else block', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:- var jumpThen = 1 + 0;- var jumpElse = 1 + 3;G state_machine.pushPhi(7 + jumpThen + jumpElse);% if (!false) {= state_machine.goTo(7 + jumpThen);" break; } case 7:, state_machine.phi(); break; case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });G it('must be limited to while loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 3;& if (n-- > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11:, state_machine.phi(); break; case 12:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });E it('must be limited to for loop scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, n, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: n = 4; case 7:) var jumpBody = 4;$ if (n > 0) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(9, 9 + 1 + jumpHandler$2); break; case 9:4 e = state_machine.state.err;' reached = true; case 10:, state_machine.phi(); break; case 11: n--; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });I it('must be limited to switch block scope', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var e, reached, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( reached = false; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;5 assert.equal(reached, false); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:! var tmp1;C if (!(tmp1 = state_machine.jumpTable(6))) {? tmp1 = state_machine.jumpTable(6, [$ [1],# [2] ], [" 3,! 3 ]); }: tmp1.jumpToCase(state_machine, 1); break; case 7:. var jumpHandler$2 = 1;N state_machine.pushErrorStep(8, 8 + 1 + jumpHandler$2); break; case 8:4 e = state_machine.state.err;' reached = true; case 9:, state_machine.phi(); break; case 10:, state_machine.phi(); break; case 11:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(12, 12 + 1 + jumpHandler$3); break; case 12:4 e = state_machine.state.err;' reached = true; case 13:, state_machine.phi(); break; case 14:, state_machine.phi(); break; case 15:- var tmp1$2 = 'boom!';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });> it('must permit retries', function retries(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);* var e, arr, tries, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine." tries = 1; case 2:! arr = []; case 3:, var jumpHandler = 6;L state_machine.pushErrorStep(4, 4 + 1 + jumpHandler); break; case 4:4 e = state_machine.state.err; ++tries; case 5:) var jump = 1 + 1;( if (tries < 5) {< state_machine.pushPhi(6 + jump); } else {9 state_machine.goTo(6 + jump);" break; } case 6:. state_machine.retry(); break; case 7:, state_machine.phi(); break; case 8:/ assert.deepEqual(arr, [ 1, 2, 3, 4 ]); case 9:; state_machine.callback(null, true); break; case 10:, state_machine.phi(); break; case 11:( arr.push(tries); case 12:+ var tmp1 = 'bomb!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 13:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('finally_block', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 1;b state_machine$2.pushCleanupStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:6 arr$2.push(2);+ case 7:> state_machine$2.phi();. break;+ case 8:> var jumpHandler$3 = 1;b state_machine$2.pushCleanupStep(9, 9 + 1 + jumpHandler$3);. break;+ case 9:6 arr$2.push(3);, case 10:> state_machine$2.phi();. break;, case 11:N state_machine$2.callback(null, arr$2);. break;, case 12:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;R state_machine.pushCleanupStep(10, 10 + 1 + jumpHandler$3); break; case 10:$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2;: state_machine.captureStateVars = function () { return [ i, e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i$2 = 0;! i = state[i$2++];! e = state[i$2++];# arr = state[i$2++];* callback$2 = state[i$2++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 4;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(9, 9 + 1 + jumpHandler$2); break; case 9:$ arr.push(i); case 10:, state_machine.phi(); break; case 11: ++i; case 12:, state_machine.phi(); break; case 13:+ var tmp1 = 'error';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 14:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });/ describe('finally_statement', function () {Q it('must unwind in reverse order on normal return', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);2 var arr$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:9 var tmp1 = arr$2;` state_machine$2.pushCleanupAction(tmp1, tmp1.push, [1]);+ case 3:; var tmp1$2 = arr$2;d state_machine$2.pushCleanupAction(tmp1$2, tmp1$2.push, [2]);+ case 4:; var tmp1$3 = arr$2;d state_machine$2.pushCleanupAction(tmp1$3, tmp1$3.push, [3]);+ case 5:N state_machine$2.callback(null, arr$2);. break;+ case 6:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });@ it('must unwind in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [1]); case 7:) var tmp1$2 = arr;R state_machine.pushCleanupAction(tmp1$2, tmp1$2.push, [2]); case 8:) var tmp1$3 = arr;R state_machine.pushCleanupAction(tmp1$3, tmp1$3.push, [3]); case 9:- var tmp1$4 = 'error';% if (tmp1$4) {; state_machine.callback(tmp1$4);" break; } case 10:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });U it('must keep state variables intact during unwinding', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);& var i, e, arr, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 1, 2, 3 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6: i = 1; case 7:) var jumpBody = 2;% if (i <= 3) {5 state_machine.pushPhi(7); } else {A state_machine.goTo(8 + 1 + jumpBody);" break; } case 8:' var tmp1 = arr;N state_machine.pushCleanupAction(tmp1, tmp1.push, [i]); case 9: ++i; case 10:, state_machine.phi(); break; case 11:- var tmp1$2 = 'error';% if (tmp1$2) {; state_machine.callback(tmp1$2);" break; } case 12:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });+ describe('catch_finally', function () {S it('finally and catch must execute in reverse order', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);# var e, arr, callback$2;: state_machine.captureStateVars = function () { return [ e, arr, callback$2 ]; };? state_machine.restoreStateVars = function (state) { var i = 0; e = state[i++];! arr = state[i++];( callback$2 = state[i++]; }; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.! arr = []; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:. var jumpHandler$2 = 1;P state_machine.pushCleanupStep(7, 7 + 1 + jumpHandler$2); break; case 7:$ arr.push(1); case 8:, state_machine.phi(); break; case 9:. var jumpHandler$3 = 1;P state_machine.pushErrorStep(10, 10 + 1 + jumpHandler$3); break; case 10:4 e = state_machine.state.err;$ arr.push(2); case 11:, state_machine.phi(); break; case 12:. var jumpHandler$4 = 1;R state_machine.pushCleanupStep(13, 13 + 1 + jumpHandler$4); break; case 13:$ arr.push(3); case 14:, state_machine.phi(); break; case 15:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 16:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; });P it('finally must execute even when catch returns', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var arr, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var e, arr$2, callback$4;L state_machine$2.captureStateVars = function () {( return [& e,* arr$2,. callback$4" ]; };Q state_machine$2.restoreStateVars = function (state) {, var i$2 = 0;1 e = state[i$2++];5 arr$2 = state[i$2++];: callback$4 = state[i$2++]; }; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.3 arr$2 = [];+ case 2:< var jumpHandler = 1;` state_machine$2.pushCleanupStep(3, 3 + 1 + jumpHandler);. break;+ case 3:6 arr$2.push(1);+ case 4:> state_machine$2.phi();. break;+ case 5:> var jumpHandler$2 = 2;` state_machine$2.pushErrorStep(6, 6 + 1 + jumpHandler$2);. break;+ case 6:F e = state_machine$2.state.err;6 arr$2.push(2);+ case 7:N state_machine$2.callback(null, arr$2);. break;+ case 8:> state_machine$2.phi();. break;+ case 9:> var jumpHandler$3 = 1;d state_machine$2.pushCleanupStep(10, 10 + 1 + jumpHandler$3);. break;, case 10:6 arr$2.push(3);, case 11:> state_machine$2.phi();. break;, case 12:; var tmp1 = 'boom!';3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }, case 13:M state_machine$2.callback(null, true);. break;% }/ } catch (e$2) {B state_machine$2.callback(e$2);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;- arr = arguments[i++]; case 4:/ assert.deepEqual(arr, [ 3, 2, 1 ]); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});&describe('if_then_else', function () {% describe('if_then', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 1;* if (2 + 3 === 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:, state_machine.phi(); break; case 5:, assert.ok(branched); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.) branched = false; case 2:) var jump = 1 + 2;( if (2 + 3 < 5) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:( branched = true; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:6 assert.ok(branched === false); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });& function mockAsync(callback) {* process.nextTick(function () {# callback(null, 42); }); }U it('must not touch variables if a branch is not taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value > 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 24); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });h it('must modify a variable if a branch with an async assignment is taken', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);" var value, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.# value = 24; case 2:) var jump = 1 + 2;) if (value < 30) {< state_machine.pushPhi(3 + jump); } else {9 state_machine.goTo(3 + jump);" break; } case 3:; mockAsync(state_machine.thenTo(4)); break; case 4:" var i = 1;/ value = arguments[i++]; case 5:, state_machine.phi(); break; case 6:0 assert.equal(value, 42); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:9 var jump = 1 + 2;8 if (2 + 3 < 6) {N state_machine$2.pushPhi(3 + jump);0 } else {K state_machine$2.goTo(3 + jump);2 break;) }+ case 3:8 branched = true;+ case 4:Q state_machine$2.callback(null, branched);. break;+ case 5:> state_machine$2.phi();. break;+ case 6:X console.log('You should not see this message!');+ case 7:N state_machine$2.callback(null, false);. break;+ case 8:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('else', function () {M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 1;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);- if (!(2 + 3 === 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:, state_machine.phi(); break; case 5:* branched = 'else'; case 6:, state_machine.phi(); break; case 7:7 assert.equal(branched, 'then'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });M it('must branch on the condition being truthy', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var branched, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.( branched = null; case 2:- var jumpThen = 1 + 2;- var jumpElse = 1 + 1;G state_machine.pushPhi(3 + jumpThen + jumpElse);+ if (!(2 + 3 < 5)) {= state_machine.goTo(3 + jumpThen);" break; } case 3:* branched = 'then'; case 4:+ var tmp1 = 'boom!';# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 5:, state_machine.phi(); break; case 6:* branched = 'else'; case 7:, state_machine.phi(); break; case 8:7 assert.equal(branched, 'else'); case 9:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });H it('must not modify the way return works', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var result, subtask, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 subtask = function (callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));M var argi$2 = 0, callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);5 var branched, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.9 branched = false;+ case 2:= var jumpThen = 1 + 1;= var jumpElse = 1 + 2;Y state_machine$2.pushPhi(3 + jumpThen + jumpElse);; if (!(2 + 3 < 5)) {O state_machine$2.goTo(3 + jumpThen);2 break;) }+ case 3:= console.log('dummy');+ case 4:> state_machine$2.phi();. break;+ case 5:8 branched = true;+ case 6:Q state_machine$2.callback(null, branched);. break;+ case 7:> state_machine$2.phi();. break;+ case 8:X console.log('You should not see this message!');+ case 9:N state_machine$2.callback(null, false);. break;, case 10:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 subtask(state_machine.thenTo(3)); break; case 3:" var i = 1;0 result = arguments[i++]; case 4:3 assert.equal(result, true); case 5:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });}); describe('switch', function () {9 it('must work within for loop', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var i, arr, callback$2;6 state_machine.captureStateVars = function () { return [ i, arr, callback$2 ]; };; state_machine.restoreStateVars = function (state) { var i$2 = 0; i = state[i$2++]; arr = state[i$2++];& callback$2 = state[i$2++]; }; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. i = 0; arr = []; case 2:( var jumpHandler = 1;J state_machine.pushCleanupStep(3, 3 + 1 + jumpHandler); break; case 3:+ assert.deepEqual(arr, [ 'one', 'two', 'three', 'end' ]); case 4:( state_machine.phi(); break; case 5: i = 0; case 6:% var jumpBody = 8; if (i < 3) {1 state_machine.pushPhi(6); } else {= state_machine.goTo(7 + 1 + jumpBody); break; } case 7: var tmp1;? if (!(tmp1 = state_machine.jumpTable(7))) {; tmp1 = state_machine.jumpTable(7, [ [0], [1], [2] ], [ 1, 1, 1 ]); }6 tmp1.jumpToCase(state_machine, i); break; case 8:$ arr.push('one'); case 9:( state_machine.phi(); break; case 10:$ arr.push('two'); case 11:( state_machine.phi(); break; case 12:& arr.push('three'); case 13:( state_machine.phi(); break; case 14: ++i; case 15:( state_machine.phi(); break; case 16:$ arr.push('end'); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });F it('must switch correctly on numeric index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {! 1: 'one',! 2: 'two'," 3: 'three' }; case 2:' var key = 0, value; case 3:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(3); } else {= state_machine.goTo(4 + 1 + jumpBody); break; } case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {; tmp1 = state_machine.jumpTable(4, [ [0], [1], [2] ], [ 1, 1, 1 ]); }8 tmp1.jumpToCase(state_machine, key); break; case 5:" value = 'one'; case 6:( state_machine.phi(); break; case 7:" value = 'two'; case 8:( state_machine.phi(); break; case 9:$ value = 'three'; case 10:( state_machine.phi(); break; case 11:9 assert.equal(value, choice[key + 1]); case 12: ++key; case 13:( state_machine.phi(); break; case 14:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });E it('must switch correctly on string index', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var keys, choice, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. choice = {$ 'ek': 'one',$ 'do': 'two',' 'teen': 'three' }; case 2:/ keys = Object.keys(choice); case 3:' var key = 0, value; case 4:% var jumpBody = 9;" if (key < 3) {1 state_machine.pushPhi(4); } else {= state_machine.goTo(5 + 1 + jumpBody); break; } case 5: var tmp1;? if (!(tmp1 = state_machine.jumpTable(5))) {; tmp1 = state_machine.jumpTable(5, [# ['do'],# ['ek'],$ ['teen'] ], [ 1, 1, 1 ]); }> tmp1.jumpToCase(state_machine, keys[key]); break; case 6:" value = 'two'; case 7:( state_machine.phi(); break; case 8:" value = 'one'; case 9:( state_machine.phi(); break; case 10:$ value = 'three'; case 11:( state_machine.phi(); break; case 12:; assert.equal(value, choice[keys[key]]); case 13: ++key; case 14:( state_machine.phi(); break; case 15:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });M it('must throw an error on unhandled integer case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[" 1,! 2% ]], [1]); }6 tmp1.jumpToCase(state_machine, 3); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });L it('must throw an error on unhandled string case', function (callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var e, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.( var jumpHandler = 1;H state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:0 e = state_machine.state.err;5 if (!(e && e instanceof Error)) {, state_machine.phi(); break; }7 state_machine.callback(null, true); break; case 3:( state_machine.phi(); break; case 4: var tmp1;? if (!(tmp1 = state_machine.jumpTable(4))) {< tmp1 = state_machine.jumpTable(4, [[& 'one',% 'two'% ]], [1]); }< tmp1.jumpToCase(state_machine, 'three'); break; case 5:7 state_machine.callback(null, true); break; case 6:( state_machine.phi(); break; case 7:" assert.fail(); case 8:7 state_machine.callback(null, true); break; } } catch (e$2) {, state_machine.callback(e$2); } } state_machine.start();- return state_machine.controlAPIMaker; });}); describe('dfvars', function () {# function greet(msg, callback) {, setTimeout(callback, 10, null, msg); } describe('<=', function () {R it('must declare and initialize a channel variable', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();5 greet('hello', x.resolver()); case 2:8 assert.ok(x instanceof Channel); case 3:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });8 it('must run in parallel', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);! var y, x, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 x = x || state_machine.channel();3 greet('one', x.resolver()); case 2:9 y = y || state_machine.channel();3 greet('two', y.resolver()); case 3:8 assert.ok(x instanceof Channel); case 4:8 assert.ok(y instanceof Channel); case 5:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(6)); break; case 6:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();/ assert.equal(x, 'one'); case 7:/ assert.equal(y, 'two'); case 8:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; });? it('must also work across tasks', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:* x = new Channel();* y = new Channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });" describe('chan', function () {9 it('must declare channels', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);% var x, y, t1, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.> t1 = function (ch1, ch2, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));‡ var argi$2 = 0, ch1$2 = arguments[argi$2++], ch2$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);9 var ch2$2, ch1$2, callback$4; ;@ function state_machine_fn$2(err$2) {R if (err$2 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$2);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.S ch1$2 = ch1$2 || state_machine$2.channel();I greet('hello', ch1$2.resolver());+ case 2:k state_machine$2.resolve([ch1$2], false, state_machine$2.thenTo(3));. break;+ case 3:L var chans$2 = arguments[1], i$2 = 0;I ch1$2 = chans$2[i$2++].resolve();E assert.equal(ch1$2, 'hello');+ case 4:S ch2$2 = ch2$2 || state_machine$2.channel();I greet('world', ch2$2.resolver());+ case 5:k state_machine$2.resolve([ch2$2], false, state_machine$2.thenTo(6));. break;+ case 6:L var chans$3 = arguments[1], i$3 = 0;I ch2$2 = chans$3[i$3++].resolve();E assert.equal(ch2$2, 'world');+ case 7:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:9 x = x || state_machine.channel();9 y = y || state_machine.channel(); case 3:! t1(x, y); case 4:/ state_machine.resolve([ x, y; ], false, state_machine.thenTo(5)); break; case 5:8 var chans = arguments[1], i = 0;1 x = chans[i++].resolve();1 y = chans[i++].resolve();1 assert.equal(x, 'hello'); case 6:1 assert.equal(y, 'world'); case 7:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });! describe('<<-', function () {J it('must return err instead of throwing up', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var err, result, t1, callback$2; ;. function state_machine_fn(err$2) {@ if (err$2 && !state_machine.state.isUnwinding) {9 return state_machine.callback(err$2); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.9 t1 = function (arg, callback$3) {— var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));j var argi$2 = 0, arg$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;} var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);+ var callback$4; ;@ function state_machine_fn$2(err$3) {R if (err$3 && !state_machine$2.state.isUnwinding) {K return state_machine$2.callback(err$3);! }% try {G switch (state_machine$2.state.id) {+ case 1:U // `step_state` is the real work horse, whichS // walks through each statement in the taskS // body and compiles it to a single step in= // the state machine.E var tmp1 = 'error: ' + arg$2;3 if (tmp1) {K state_machine$2.callback(tmp1);2 break;) }+ case 2:M state_machine$2.callback(null, true);. break;% }- } catch (e) {@ state_machine$2.callback(e);! } }4 state_machine$2.start();C return state_machine$2.controlAPIMaker; }; case 2:C t1('meow', state_machine.thenToWithErr(3)); break; case 3:" var i = 1;- err = arguments[i++];0 result = arguments[i++]; case 4:9 assert.equal(err, 'error: meow'); case 5:8 assert.equal(result, undefined); case 6:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });2 describe('StateMachine.onerror', function () { var errorCount = 0;3 StateMachine.onerror = function (err, sm) { ++errorCount; };I it('must be called on any error, anywhere', function (callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);, var e, currentError, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.2 currentError = errorCount; case 2:, var jumpHandler = 2;L state_machine.pushErrorStep(3, 3 + 1 + jumpHandler); break; case 3:4 e = state_machine.state.err;C assert.equal(errorCount, currentError + 1); case 4:; state_machine.callback(null, true); break; case 5:, state_machine.phi(); break; case 6:5 var tmp1 = new Error('test');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });( describe('cspjsStack', function () { function t1(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t2(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t2(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.4 t3(state_machine.thenTo(2)); break; case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; } function t3(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine.? var tmp1 = new Error('just for kicks');# if (tmp1) {9 state_machine.callback(tmp1);" break; } case 2:; state_machine.callback(null, true); break; } } catch (e) {. state_machine.callback(e); } }" state_machine.start();1 return state_machine.controlAPIMaker; }^ it('must show nested async calls on error return', function asyncStackTest(callback) {‡ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));9 var argi = 0, callback$2 = arguments[argi++]; ;i var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);' var someVar, e, callback$2; ;, function state_machine_fn(err) {> if (err && !state_machine.state.isUnwinding) {7 return state_machine.callback(err); } try {5 switch (state_machine.state.id) { case 1:E // `step_state` is the real work horse, whichC // walks through each statement in the taskC // body and compiles it to a single step in- // the state machine., var jumpHandler = 2;L state_machine.pushErrorStep(2, 2 + 1 + jumpHandler); break; case 2:4 e = state_machine.state.err;8 assert.deepEqual(e.cspjsStack, [# 't3:0',# 't2:1',# 't1:1',. 'asyncStackTest:6' ]); case 3:; state_machine.callback(null, true); break; case 4:, state_machine.phi(); break; case 5:. someVar = 'someValue'; case 6:4 t1(state_machine.thenTo(7)); break; case 7:; state_machine.callback(null, true); break; } } catch (e$2) {0 state_machine.callback(e$2); } }" state_machine.start();1 return state_machine.controlAPIMaker; }); });});describe('while', function () {< it('must nest properly', function while_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee); var x, m, n, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine. x = []; m = 3; n = 2; case 2:% var jumpBody = 5;" if (m-- > 0) {1 state_machine.pushPhi(2); } else {= state_machine.goTo(3 + 1 + jumpBody); break; } case 3: x.push(1); case 4: n = 2; case 5:' var jumpBody$2 = 1;" if (n-- > 0) {1 state_machine.pushPhi(5); } else {? state_machine.goTo(6 + 1 + jumpBody$2); break; } case 6: x.push(2); case 7:( state_machine.phi(); break; case 8:( state_machine.phi(); break; case 9:) assert.deepEqual(x, [ 1, 2, 2, 1, 2, 2, 1, 2, 2 ]); case 10:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#describe('subscribe', function () {G it('must do looped processing', function subscribe_test(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);) var xs, t1, ch1, ch2, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel(); case 2:Q t1 = function subscribe_test_body(ch1$2, ch2$2, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));ƒ var argi$2 = 0, ch1$3 = arguments[argi$2++], ch2$3 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);* var x, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.5 var tmp1 = ch2$3;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:J ch1$3.take(state_machine$2.thenTo(3));* break;' case 3:5 x = arguments[1];5 var jumpBody = 1;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:P ch2$3.put(x * x, state_machine$2.thenTo(5));* break;' case 5:: state_machine$2.phi();* break;' case 6:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch2); case 4:) ch1.publish(null, 1); case 5:) ch1.publish(null, 2); case 6:) ch1.publish(null, 3); case 7:, ch1.publish(null, null); case 8:; ch2.takeN(40, state_machine.thenTo(9)); break; case 9: var i = 1;( xs = arguments[i++]; case 10:* assert.deepEqual(xs, [ 1, 4, 9 ]); case 11:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });G it('must do nested processing', function subscribe_nest(callback) {ƒ var StateMachine$2 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));5 var argi = 0, callback$2 = arguments[argi++]; ;e var state_machine = new StateMachine$2(this, callback$2, state_machine_fn, arguments.callee);3 var xs, t1, ch1, ch2, ch3, ch4, callback$2; ;( function state_machine_fn(err) {: if (err && !state_machine.state.isUnwinding) {3 return state_machine.callback(err); } try {1 switch (state_machine.state.id) { case 1:A // `step_state` is the real work horse, which? // walks through each statement in the task? // body and compiles it to a single step in) // the state machine.9 ch1 = ch1 || state_machine.channel();9 ch2 = ch2 || state_machine.channel();9 ch3 = ch3 || state_machine.channel();9 ch4 = ch4 || state_machine.channel(); case 2:P t1 = function subscribe_nest_body(chIn, chOut, callback$3) {“ var StateMachine$3 = arguments.callee.StateMachine || (arguments.callee.StateMachine = require('cspjs/src/state_machine'));† var argi$2 = 0, chIn$2 = arguments[argi$2++], chOut$2 = arguments[argi$2++], callback$4 = arguments[argi$2++]; ;y var state_machine$2 = new StateMachine$3(this, callback$4, state_machine_fn$2, arguments.callee);1 var x, ch1$2, callback$4; ;< function state_machine_fn$2(err$2) {N if (err$2 && !state_machine$2.state.isUnwinding) {G return state_machine$2.callback(err$2); }! try {C switch (state_machine$2.state.id) {' case 1:Q // `step_state` is the real work horse, whichO // walks through each statement in the taskO // body and compiles it to a single step in9 // the state machine.7 var tmp1 = chOut$2;^ state_machine$2.pushCleanupAction(tmp1, tmp1.put, [null]);' case 2:K chIn$2.take(state_machine$2.thenTo(3));* break;' case 3:9 ch1$2 = arguments[1];5 var jumpBody = 4;R if (ch1$2 = ch1$2.resolve(), ch1$2 !== null) {C state_machine$2.pushPhi(2);, } else {K state_machine$2.goTo(4 + jumpBody);. break;% }' case 4:J ch1$2.take(state_machine$2.thenTo(5));* break;' case 5:5 x = arguments[1];7 var jumpBody$2 = 2;F if (x = x.resolve(), x !== null) {C state_machine$2.pushPhi(4);, } else {M state_machine$2.goTo(6 + jumpBody$2);. break;% }' case 6:R chOut$2.put(x * x, state_machine$2.thenTo(7));* break;' case 7:: state_machine$2.phi();* break;' case 8:: state_machine$2.phi();* break;' case 9:I state_machine$2.callback(null, true);* break;! }) } catch (e) {< state_machine$2.callback(e); } }0 state_machine$2.start();? return state_machine$2.controlAPIMaker; }; case 3:! t1(ch1, ch4); case 4:+ ch1.publish(null, ch2); case 5:) ch2.publish(null, 2); case 6:+ ch1.publish(null, ch3); case 7:* ch3.publish(null, 20); case 8:) ch2.publish(null, 3); case 9:) ch2.publish(null, 4); case 10:* ch3.publish(null, 30); case 11:, ch1.publish(null, null); case 12:, ch2.publish(null, null); case 13:, ch3.publish(null, null); case 14:< ch4.takeN(40, state_machine.thenTo(15)); break; case 15: var i = 1;( xs = arguments[i++]; case 16:* assert.deepEqual(xs, [ 4, 9, 16, 400, 900 ]); case 17:7 state_machine.callback(null, true); break; } } catch (e) {* state_machine.callback(e); } } state_machine.start();- return state_machine.controlAPIMaker; });});#//# sourceMappingURL=control.js.map5çŞ