UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

82 lines 5.85 kB
import { Frame } from './frame.js'; import { FrameAtom } from './frame-atom.js'; import { FrameNote } from './frame-note.js'; import { NilContext } from './meta-frame.js'; export class FrameSymbol extends FrameAtom { static for(symbol) { const exists = FrameSymbol.symbols[symbol]; return exists || (FrameSymbol.symbols[symbol] = new FrameSymbol(symbol)); } static end() { return FrameSymbol.for(Frame.kEND); } ; constructor(data, meta = NilContext) { super(meta); this.data = data; } in(contexts = [Frame.nil]) { const first = contexts[0]; for (const context of contexts) { const value = context.get(this.data); if (!value.is.missing) { value.up = context; if (value.is.immediate === true) { return value.call(context); } return value; } } return FrameNote.key(first.id + '.' + this.data, first); } apply(argument, _parameter) { const out = this.get(Frame.kOUT); out.set(this.data, argument); return this; } setter(out) { const meta = {}; if (!out.is.void) { meta[Frame.kOUT] = out; } const setter = new FrameSymbol(this.data, meta); return setter; } called_by(context) { return this.in([context]); } string_start() { return FrameSymbol.SYMBOL_BEGIN.toString(); } ; canInclude(char) { return FrameSymbol.SYMBOL_CHAR.test(char); } toData() { return this.data === '$$' ? '\n' : this.data; } } FrameSymbol.SYMBOL_BEGIN = /[a-zA-Z]/; FrameSymbol.SYMBOL_CHAR = /[-\w]/; FrameSymbol.OPERATOR_CHARS = /[&|?:+\-/*%=<>!]/; // eslint-disable-next-line no-use-before-define FrameSymbol.symbols = {}; ; export class FrameOperator extends FrameSymbol { static operator_chars() { // eslint-disable-next-line return '&|?:+\\-*%<>!'; // FrameOperator.OPERATOR_CHARS.source.slice(1, -1) } in(contexts = [Frame.nil]) { return FrameSymbol.for(this.data); } string_start() { return FrameOperator.OPERATOR_CHARS.toString(); } ; canInclude(char) { return FrameOperator.OPERATOR_CHARS.test(char); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtc3ltYm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZyYW1lcy9mcmFtZS1zeW1ib2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sRUFBVyxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUVyRCxNQUFNLE9BQU8sV0FBWSxTQUFRLFNBQVM7SUFLakMsTUFBTSxDQUFDLEdBQUcsQ0FBRSxNQUFjO1FBQy9CLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUMsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBQUEsQ0FBQztJQUtGLFlBQXVCLElBQVksRUFBRSxJQUFJLEdBQUcsVUFBVTtRQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFRO0lBRW5DLENBQUM7SUFFTSxFQUFFLENBQUUsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekIsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFO2dCQUNyQixLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtnQkFDbEIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7b0JBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtpQkFDM0I7Z0JBQ0QsT0FBTyxLQUFLLENBQUE7YUFDYjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBRSxRQUFlLEVBQUUsVUFBaUI7UUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzVCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBRSxHQUFVO1FBQ3ZCLE1BQU0sSUFBSSxHQUFZLEVBQUUsQ0FBQTtRQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUE7U0FDdkI7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQy9DLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVNLFNBQVMsQ0FBRSxPQUFjO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFBQSxDQUFDO0lBRUssVUFBVSxDQUFFLElBQVk7UUFDN0IsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRVMsTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM5QyxDQUFDOztBQWhFc0Isd0JBQVksR0FBRyxVQUFVLENBQUE7QUFDekIsdUJBQVcsR0FBRyxPQUFPLENBQUE7QUFDckIsMEJBQWMsR0FBRyxrQkFBa0IsQ0FBQTtBQVcxRCxnREFBZ0Q7QUFDL0IsbUJBQU8sR0FBb0MsRUFBRSxDQUFBO0FBbUQvRCxDQUFDO0FBRUYsTUFBTSxPQUFPLGFBQWMsU0FBUSxXQUFXO0lBQ3JDLE1BQU0sQ0FBQyxjQUFjO1FBQzFCLDJCQUEyQjtRQUMzQixPQUFPLGVBQWUsQ0FBQTtRQUN0QixtREFBbUQ7SUFDckQsQ0FBQztJQUVNLEVBQUUsQ0FBRSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQy9CLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFBQSxDQUFDO0lBRUssVUFBVSxDQUFFLElBQVk7UUFDN0IsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0NBQ0YifQ==