@effectful/transducers-loose
Version:
@effectful/transducers built with faster generators
380 lines (379 loc) • 12 kB
JavaScript
"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);