UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

55 lines 4.14 kB
import { Frame, FrameArray, FrameExpr } from '../frames.js'; import { Terminal } from './terminals.js'; export class ParsePipe extends FrameArray { constructor(out, factory) { const meta = {}; meta[ParsePipe.kOUT] = out; meta[Frame.kEND] = Terminal.end(); super([], meta); this.Factory = factory; this.collector = []; } next(statement = false) { if (this.length() === 0) { return this; } const term = this.asArray(); const expr = new FrameExpr(term); if (statement) { expr.is.statement = true; } this.collector.push(expr); this.reset(); return this; } push(Factory) { const child = new ParsePipe(this, Factory); return child; } pop(Factory) { const parent = this.get(ParsePipe.kOUT); this.finish(Frame.nil); return parent; } canPop(Factory) { const match = (this.Factory.name === Factory.name); if (!match) { console.error(`ParsePipe.canPop.failed: ${Factory.name} cannot pop ${this.Factory.name}`); } return match; } finish(terminal) { this.next(); const out = this.get(Frame.kOUT); const value = this.makeFrame(); const result = out.call(value); out.call(terminal); return result; } makeFrame() { const group = new this.Factory(this.collector); this.collector = []; return group; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtcGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leGVjdXRlL3BhcnNlLXBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BFLE9BQU8sRUFBVyxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVsRCxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQVU7SUFJdkMsWUFBYSxHQUFVLEVBQUUsT0FBWTtRQUNuQyxNQUFNLElBQUksR0FBWSxFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDakMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFTSxJQUFJLENBQUUsWUFBcUIsS0FBSztRQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQyxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN6QjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNaLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVNLElBQUksQ0FBRSxPQUFZO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMxQyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFTSxHQUFHLENBQUUsT0FBWTtRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxNQUFNLENBQUUsT0FBWTtRQUN6QixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsT0FBTyxDQUFDLElBQUksZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7U0FDMUY7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFTSxNQUFNLENBQUUsUUFBYTtRQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVTLFNBQVM7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNuQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7Q0FDRiJ9