How to use the @effectful/transducers.Tag.LabeledStatement function in @effectful/transducers

To help you get started, we’ve selected a few @effectful/transducers examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github awto / effectfuljs / packages / core / src / control.js View on Github external
function* _restoreLabeledStatements() {
    for (const i of s.sub()) {
      if (
        i.enter &&
        i.value.stmt &&
        !i.value.eff &&
        i.value.savedLabs &&
        i.value.savedLabs.length
      ) {
        const lab = s.label();
        let pos = i.pos;
        for (const j of i.value.savedLabs) {
          yield s.enter(pos, Tag.LabeledStatement);
          yield s.tok(Tag.label, Tag.Identifier, { node: { name: j } });
          pos = Tag.body;
        }
        yield s.peel(Kit.setPos(i, Tag.body));
        yield* _restoreLabeledStatements();
        yield* lab();
        continue;
      }
      yield i;
    }
  }
}
github awto / effectfuljs / packages / core / src / control.js View on Github external
function walk(labs, map, brkLab) {
      for (const i of sl.sub()) {
        if (i.enter) {
          i.value.ctrl = null;
          switch (i.type) {
            case Tag.LabeledStatement:
              walk([...labs, i.value.node.label.name], map, brkLab);
              break;
            case Tag.BlockStatement:
              let bmap = map;
              if (labs.length) {
                bmap = new Map(map);
                i.value.ctrl = labs[0];
                i.value.labs = [...labs];
                for (const j of labs) bmap.set(j, i.value);
              }
              walk([], bmap, brkLab);
              break;
            case Tag.WhileStatement:
            case Tag.DoWhileStatement:
            case Tag.ForStatement:
            case Tag.SwitchStatement:
github awto / effectfuljs / packages / core / src / debug.js View on Github external
function* walk(rename) {
    for (const i of sl.sub()) {
      if (i.value.ctrl) {
        if (i.enter) {
          const lab = sl.label();
          let pos = i.pos;
          const j = i.value.ctrl;
          if (j !== "#" && j !== "#ret") {
            let nm = j;
            nm = nm.replace("#", "_");
            const lx = labs[j] || 0;
            if (lx !== 0) nm += lx;
            labs[nm] = lx + 1;
            rename[j] = nm;
            yield sl.enter(pos, Tag.LabeledStatement, {
              node: { label: { type: "Identifier", name: nm } }
            });
            pos = Tag.body;
          }
          yield sl.peel(Kit.setPos(i, pos));
          yield* walk(Object.create(rename));
          yield* lab();
          continue;
        }
      }
      if (i.value.node != null && i.value.node.label != null) {
        const name = rename[i.value.node.label.name];
        if (name != null) i.value.node.label = { type: "Identifier", name };
      }
      yield i;
    }