UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

62 lines 4.4 kB
import { Frame } from './frame.js'; import { FrameNote } from './frame-note.js'; import { FrameSymbol } from './frame-symbol.js'; export class FrameArg extends FrameSymbol { static here() { return FrameArg.level(); } static level(count = 1) { const symbol = Array(count + 1).join(FrameArg.ARG_CHAR); return FrameArg._for(symbol); } static _for(symbol) { const exists = FrameArg.args[symbol]; return exists || (FrameArg.args[symbol] = new FrameArg(symbol)); } /* protected constructor (data: string) { super(data) } */ in(contexts = [Frame.nil]) { const level = this.data.length; if (level <= 1) { return contexts[0]; } else { return FrameArg.level(level - 1); } } } FrameArg.ARG_CHAR = '_'; // eslint-disable-next-line no-use-before-define FrameArg.args = {}; ; export class FrameParam extends FrameSymbol { static there() { return FrameParam.level(); } static level(count = 1) { const symbol = FrameArg.ARG_CHAR + Array(count + 1).join(FrameParam.ARG_CHAR); return FrameParam._for(symbol); } static _for(symbol) { const exists = FrameParam.params[symbol]; return exists || (FrameParam.params[symbol] = new FrameParam(symbol)); } /* protected constructor (data: string) { super(data) } */ in(contexts = [Frame.nil]) { const level = this.data.length - 1; if (level <= contexts.length) { return contexts[level]; } else { return FrameNote.key(this.data, this); } } } FrameParam.ARG_CHAR = '^'; // eslint-disable-next-line no-use-before-define FrameParam.params = {}; ; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYXJnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZyYW1lcy9mcmFtZS1hcmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRS9DLE1BQU0sT0FBTyxRQUFTLFNBQVEsV0FBVztJQUdoQyxNQUFNLENBQUMsSUFBSTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBRSxLQUFLLEdBQUcsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFLUyxNQUFNLENBQUMsSUFBSSxDQUFFLE1BQWM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQ7O1FBRUk7SUFFRyxFQUFFLENBQUUsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNuQjthQUFNO1lBQ0wsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUNqQztJQUNILENBQUM7O0FBOUJzQixpQkFBUSxHQUFHLEdBQUcsQ0FBQTtBQVdyQyxnREFBZ0Q7QUFDL0IsYUFBSSxHQUFpQyxFQUFFLENBQUE7QUFtQnpELENBQUM7QUFFRixNQUFNLE9BQU8sVUFBVyxTQUFRLFdBQVc7SUFHbEMsTUFBTSxDQUFDLEtBQUs7UUFDakIsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUUsS0FBSyxHQUFHLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0UsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFLUyxNQUFNLENBQUMsSUFBSSxDQUFFLE1BQWM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0lBRUQ7O1FBRUk7SUFFRyxFQUFFLENBQUUsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDbEMsSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUM1QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUN2QjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDdEM7SUFDSCxDQUFDOztBQTlCc0IsbUJBQVEsR0FBRyxHQUFHLENBQUE7QUFXckMsZ0RBQWdEO0FBQy9CLGlCQUFNLEdBQW1DLEVBQUUsQ0FBQTtBQW1CN0QsQ0FBQyJ9