UNPKG

@effectful/transducers-loose

Version:

@effectful/transducers built with faster generators

380 lines (379 loc) 12 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _core = require("../core"); var Kit = require("../kit"); var T = require("@babel/types"); var Match = require("../match"); var M = require("@effectful/es-rt/opts/loose"); var _default = exports.default = Kit.pipe(Match.run(`for($$ of $$) $$`), function eagerForOfTransform(si) { var s, walkDecls = function _walkDecls(decls, txt) { var c, j, walkDecls = M.generator(), loop, r, p; walkDecls.step = walkDecls_1; walkDecls.$step = 3; return walkDecls; function walkDecls_1(p) { var a, b; for (;;) { switch (walkDecls.$cur = walkDecls.$step) { case 3: c = decls[0]; if (c.type === _core.Tag.VariableDeclaration) { a = s.enter(_core.Tag.push, Kit.Subst); walkDecls.$step = 4; walkDecls.value = a; return walkDecls; } else { b = s.enter(_core.Tag.push, _core.Tag.ExpressionStatement); walkDecls.$step = 7; walkDecls.value = b; return walkDecls; } case 4: loop = M.iterator(decls); walkDecls.$step = 5; walkDecls.$step = 5; continue; case 5: if (!(loop = loop.step()).done) { j = loop.value; if (j.leave && j.type === _core.Tag.VariableDeclarator) { a = s.toks(_core.Tag.init, txt); walkDecls.$step = 6; return walkDecls.$delegate(a); } else { walkDecls.$step = 6; walkDecls.$step = 6; continue; } } else { walkDecls.$step = 13; walkDecls.$step = 13; continue; } case 6: walkDecls.$step = 5; walkDecls.value = j; return walkDecls; case 7: a = s.enter(_core.Tag.expression, _core.Tag.AssignmentExpression, { node: { operator: "=" } }); walkDecls.$step = 8; walkDecls.value = a; return walkDecls; case 8: a = s.enter(_core.Tag.left, Kit.Subst); walkDecls.$step = 9; walkDecls.value = a; return walkDecls; case 9: walkDecls.$step = 10; return walkDecls.$delegate(decls); case 10: a = s.leave(); walkDecls.$step = 11; return walkDecls.$delegate(a); case 11: a = s.toks(_core.Tag.right, txt); walkDecls.$step = 12; return walkDecls.$delegate(a); case 12: a = s.leave(); walkDecls.$step = 13; return walkDecls.$delegate(a); case 13: a = s.leave(); walkDecls.$step = 14; return walkDecls.$delegate(a); case 14: walkDecls.$step = 0; walkDecls.value = void 0; walkDecls.done = true; return walkDecls; case 0: walkDecls.$step = 0; walkDecls.value = p; walkDecls.done = true; return walkDecls; case 1: walkDecls.$step = 0; throw p; case 2: return walkDecls.$redir(p); default: throw new Error("invalid state"); } } } }, walk = function walk1(label) { var i, decls, init, body, lab, _lab, buf, _walk = M.generator(), loop, r, p; _walk.step = walk_1; _walk.$step = 3; return _walk; function walk_1(p) { var a, b; for (;;) { switch (_walk.$cur = _walk.$step) { case 3: loop = M.iterator(s.sub()); _walk.$step = 4; _walk.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; switch (i.type) { case Match.Root: if (i.enter) { Kit.skip(s.till(v => { return v.enter && v.type === Match.Placeholder; })); decls = [...s.sub()]; Kit.skip(s.till(v => { return v.enter && v.type === Match.Placeholder; })); init = [...s.sub()]; Kit.skip(s.till(v => { return v.enter && v.type === Match.Placeholder; })); body = [...Kit.inBlockBody(s, walk())]; Kit.skip(s.till(v => { return v.leave && v.type === Match.Root; })); lab = s.label(); a = s.template(_core.Tag.push, ` { const _e = $_; const _arr = e$y$arr(_e); if (_arr != null) { const _len = _arr.length; $_: for(let _i = 0; _i < _len; ++_i) { $_; $_; } } else { const _iter = _e[Symbol.iterator]() $_: for(let _i = _iter.next(); !_i.done; _i = _iter.next()) { $_; $_; } } }`); _walk.$step = 5; return _walk.$delegate(a); } else { _walk.$step = 4; _walk.$step = 4; continue; } case _core.Tag.LabeledStatement: _lab = s.label(); buf = [s.peel(i), ...s.one()]; if (s.cur().type === Match.Root) { b = walk(i.value.node.label.name); _walk.$step = 21; return _walk.$delegate(b); } else { _walk.$step = 22; return _walk.$delegate(buf); } default: _walk.$step = 4; _walk.value = i; return _walk; } } else { _walk.$step = 0; _walk.value = void 0; _walk.done = true; return _walk; } case 5: a = s.enter(_core.Tag.init, Kit.Subst); _walk.$step = 6; _walk.value = a; return _walk; case 6: _walk.$step = 7; return _walk.$delegate(init); case 7: a = s.leave(); _walk.$step = 8; return _walk.$delegate(a); case 8: a = s.refocus(); _walk.$step = 9; return _walk.$delegate(a); case 9: a = s.tok(_core.Tag.label, label == null ? _core.Tag.Null : T.identifier(label)); _walk.$step = 10; _walk.value = a; return _walk; case 10: a = s.refocus(); _walk.$step = 11; return _walk.$delegate(a); case 11: a = walkDecls(decls, "=_arr[_i]"); _walk.$step = 12; return _walk.$delegate(a); case 12: a = s.refocus(); _walk.$step = 13; return _walk.$delegate(a); case 13: _walk.$step = 14; return _walk.$delegate(body); case 14: a = s.refocus(); _walk.$step = 15; return _walk.$delegate(a); case 15: a = s.tok(_core.Tag.label, label == null ? _core.Tag.Null : T.identifier(label)); _walk.$step = 16; _walk.value = a; return _walk; case 16: a = s.refocus(); _walk.$step = 17; return _walk.$delegate(a); case 17: a = walkDecls([...Kit.clone(decls)], "=_i.value"); _walk.$step = 18; return _walk.$delegate(a); case 18: a = s.refocus(); _walk.$step = 19; return _walk.$delegate(a); case 19: a = Kit.clone(body); _walk.$step = 20; return _walk.$delegate(a); case 20: a = lab(); _walk.$step = 4; return _walk.$delegate(a); case 21: Kit.skip(_lab()); _walk.$step = 4; _walk.$step = 4; continue; case 22: a = walk(); _walk.$step = 23; return _walk.$delegate(a); case 23: a = _lab(); _walk.$step = 4; return _walk.$delegate(a); case 0: _walk.$step = 0; _walk.value = p; _walk.done = true; return _walk; case 1: _walk.$step = 0; throw p; case 2: return _walk.$redir(p); default: throw new Error("invalid state"); } } } }; s = Kit.auto(si); return walk(); }, function removeEmptyLabels(si) { var s, walk = function walk1() { var i, _walk = M.generator(), loop, r, p; _walk.step = walk_1; _walk.$step = 3; return _walk; function walk_1(p) { var a; for (;;) { switch (_walk.$cur = _walk.$step) { case 3: loop = M.iterator(s.sub()); _walk.$step = 4; _walk.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.enter && i.type === _core.Tag.LabeledStatement && s.cur().type === _core.Tag.Null) { s.peel(i); Kit.skip(s.one()); a = s.enter(i.pos, Kit.Subst); _walk.$step = 5; _walk.value = a; return _walk; } else { _walk.$step = 4; _walk.value = i; return _walk; } } else { _walk.$step = 0; _walk.value = void 0; _walk.done = true; return _walk; } case 5: a = walk(); _walk.$step = 6; return _walk.$delegate(a); case 6: a = s.leave(); _walk.$step = 7; return _walk.$delegate(a); case 7: Kit.skip(s.leave()); _walk.$step = 4; _walk.$step = 4; continue; case 0: _walk.$step = 0; _walk.value = p; _walk.done = true; return _walk; case 1: _walk.$step = 0; throw p; case 2: return _walk.$redir(p); default: throw new Error("invalid state"); } } } }; s = Kit.auto(si); return walk(); }, Kit.completeSubst);