(function (gen) {
function next(resolve, state, args) {
if (state == -1) {
resolve(...args);
return;
}
var [new_state, result] = gen(state, ...args);
if (result && typeof result.then == 'function')
result.then(awaited_data => next(resolve, new_state, [awaited_data]));
else
next(resolve, new_state, [result]);
}
return function (...args) {
return new Promise(resolve => next(resolve, 0, args))
}
})(function(state, awaited_data) {