UNPKG

@effectful/transducers-loose

Version:

@effectful/transducers built with faster generators

434 lines (433 loc) 13.3 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _core = require("../core"); var Kit = require("../kit"); var T = require("@babel/types"); var M = require("@effectful/es-rt/opts/loose"); const SpecVars = (0, _core.symbol)("SpecVars", "ctrl"); const specNames = { arguments: true }; var _default = exports.default = Kit.pipe(Kit.wrap("eager-generators-transform", function transform(s) { var make = function _make(i) { var lab, specVars, make = M.generator(), r, p; make.step = make_1; make.$step = 3; return make; function make_1(p) { var a; switch (make.$cur = make.$step) { case 3: i.value.node.generator = false; lab = s.label(); a = s.peelTo(_core.Tag.body); make.$step = 4; return make.$delegate(a); case 4: a = s.peelTo(_core.Tag.body); make.$step = 5; return make.$delegate(a); case 5: specVars = {}; a = s.tok(_core.Tag.push, SpecVars, { node: specVars }); make.$step = 6; make.value = a; return make; case 6: a = s.enter(_core.Tag.push, _core.Tag.ReturnStatement); make.$step = 7; make.value = a; return make; case 7: a = s.enter(_core.Tag.argument, _core.Tag.CallExpression); make.$step = 8; make.value = a; return make; case 8: a = s.tok(_core.Tag.callee, T.identifier("e$y$make")); make.$step = 9; make.value = a; return make; case 9: a = s.enter(_core.Tag.arguments, _core.Tag.Array); make.$step = 10; make.value = a; return make; case 10: a = s.enter(_core.Tag.push, _core.Tag.ArrowFunctionExpression, { node: { id: { type: "Identifier", name: i.value.node.id != null ? `${i.value.node.id.name}Impl` : "EagerGen" }, params: [{ type: "Identifier", name: "e$y$buf" }] } }); make.$step = 11; make.value = a; return make; case 11: a = s.enter(_core.Tag.body, _core.Tag.BlockStatement); make.$step = 12; make.value = a; return make; case 12: a = s.enter(_core.Tag.body, _core.Tag.Array); make.$step = 13; make.value = a; return make; case 13: a = walk(specVars); make.$step = 14; return make.$delegate(a); case 14: a = lab(); make.$step = 15; return make.$delegate(a); case 15: make.$step = 0; make.value = void 0; make.done = true; return make; case 0: make.$step = 0; make.value = p; make.done = true; return make; case 1: make.$step = 0; throw p; case 2: return make.$redir(p); default: throw new Error("invalid state"); } } }, walk = function walk1(specVars) { var i, lab, _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 _core.Tag.YieldExpression: if (i.enter) { lab = s.label(); a = s.enter(i.pos, _core.Tag.CallExpression); _walk.$step = 5; _walk.value = a; return _walk; } else { _walk.$step = 4; _walk.$step = 4; continue; } case _core.Tag.Identifier: if (specVars != null && specNames[i.value.node.name]) { specVars[i.value.node.name] = true; if (i.enter) { b = s.tok(i.pos, T.identifier(`e$y$${i.value.node.name}`)); _walk.$step = 4; _walk.value = b; return _walk; } else { _walk.$step = 4; _walk.$step = 4; continue; } } else { _walk.$step = 11; _walk.$step = 11; continue; } case _core.Tag.FunctionExpression: case _core.Tag.ArrowFunctionExpression: case _core.Tag.FunctionDeclaration: _walk.$step = 11; _walk.$step = 11; continue; default: _walk.$step = 13; _walk.$step = 13; continue; } } else { _walk.$step = 0; _walk.value = void 0; _walk.done = true; return _walk; } case 5: a = s.tok(_core.Tag.callee, T.identifier(i.value.node.delegate ? "e$y$star" : "e$y")); _walk.$step = 6; _walk.value = a; return _walk; case 6: a = s.enter(_core.Tag.arguments, _core.Tag.Array); _walk.$step = 7; _walk.value = a; return _walk; case 7: a = s.tok(_core.Tag.push, T.identifier("e$y$buf")); _walk.$step = 8; _walk.value = a; return _walk; case 8: a = s.enter(_core.Tag.push, Kit.Subst); _walk.$step = 9; _walk.value = a; return _walk; case 9: a = walk(specVars); _walk.$step = 10; return _walk.$delegate(a); case 10: a = lab(); _walk.$step = 4; return _walk.$delegate(a); case 11: if (i.enter && i.value.node.generator) { _walk.$step = 12; _walk.value = i; return _walk; } else { _walk.$step = 13; _walk.$step = 13; continue; } case 12: a = make(i); _walk.$step = 4; return _walk.$delegate(a); case 13: _walk.$step = 4; _walk.value = i; return _walk; 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"); } } } }, i, _transform = M.generator(), loop, r, p; _transform.step = transform_1; _transform.$step = 3; return _transform; function transform_1(p) { var a, b; for (;;) { switch (_transform.$cur = _transform.$step) { case 3: loop = M.iterator(s); _transform.$step = 4; _transform.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; _transform.$step = 5; _transform.value = i; return _transform; } else { _transform.$step = 0; _transform.value = void 0; _transform.done = true; return _transform; } case 5: switch (i.type) { case _core.Tag.Class: case _core.Tag.ClassBody: case _core.Tag.ClassMethod: case _core.Tag.FunctionExpression: case _core.Tag.ArrowFunctionExpression: case _core.Tag.FunctionDeclaration: if (i.enter) { if (!i.value.node.generator) { _transform.$step = 4; _transform.$step = 4; continue; } else { if (Kit.hasAnnot(i.value.node, "@LAZY")) { a = s.sub(); _transform.$step = 4; return _transform.$delegate(a); } else { b = make(i); _transform.$step = 4; return _transform.$delegate(b); } } } else { _transform.$step = 4; _transform.$step = 4; continue; } default: _transform.$step = 4; _transform.$step = 4; continue; } case 0: _transform.$step = 0; _transform.value = p; _transform.done = true; return _transform; case 1: _transform.$step = 0; throw p; case 2: return _transform.$redir(p); default: throw new Error("invalid state"); } } } }), Array.from, function completeSpecVars(si) { var s, i, lab, k, j, _completeSpecVars = M.generator(), loop, _loop, r, p; _completeSpecVars.step = completeSpecVars_1; _completeSpecVars.$step = 3; return _completeSpecVars; function completeSpecVars_1(p) { var a, b; for (;;) { switch (_completeSpecVars.$cur = _completeSpecVars.$step) { case 3: s = Kit.auto(si); loop = M.iterator(s); _completeSpecVars.$step = 4; _completeSpecVars.$step = 4; continue; case 4: if (!(loop = loop.step()).done) { i = loop.value; if (i.type === SpecVars) { lab = s.label(); k = Object.keys(i.value.node); if (k.length) { a = s.enter(i.pos, _core.Tag.VariableDeclaration, { node: { kind: "var" } }); _completeSpecVars.$step = 5; _completeSpecVars.value = a; return _completeSpecVars; } else { _completeSpecVars.$step = 4; _completeSpecVars.$step = 4; continue; } } else { _completeSpecVars.$step = 4; _completeSpecVars.value = i; return _completeSpecVars; } } else { _completeSpecVars.$step = 0; _completeSpecVars.value = void 0; _completeSpecVars.done = true; return _completeSpecVars; } case 5: a = s.enter(_core.Tag.declarations, _core.Tag.Array); _completeSpecVars.$step = 6; _completeSpecVars.value = a; return _completeSpecVars; case 6: _loop = M.iterator(k); _completeSpecVars.$step = 7; _completeSpecVars.$step = 7; continue; case 7: if (!(_loop = _loop.step()).done) { j = _loop.value; a = s.enter(_core.Tag.push, _core.Tag.VariableDeclarator); _completeSpecVars.$step = 8; _completeSpecVars.value = a; return _completeSpecVars; } else { b = lab(); _completeSpecVars.$step = 4; return _completeSpecVars.$delegate(b); } case 8: a = s.tok(_core.Tag.id, T.identifier(`e$y$${j}`)); _completeSpecVars.$step = 9; _completeSpecVars.value = a; return _completeSpecVars; case 9: a = s.tok(_core.Tag.init, T.identifier(j)); _completeSpecVars.$step = 10; _completeSpecVars.value = a; return _completeSpecVars; case 10: a = s.leave(); _completeSpecVars.$step = 7; return _completeSpecVars.$delegate(a); case 0: _completeSpecVars.$step = 0; _completeSpecVars.value = p; _completeSpecVars.done = true; return _completeSpecVars; case 1: _completeSpecVars.$step = 0; throw p; case 2: return _completeSpecVars.$redir(p); default: throw new Error("invalid state"); } } } }, Kit.completeSubst);