UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

76 lines 4.9 kB
import { inspect } from 'node:util'; import { MetaFrame, NilContext } from './meta-frame.js'; export class Frame extends MetaFrame { constructor(meta = NilContext, isNil = false, isMissing = false) { super(meta); this.up = Frame.missing; this.is = {}; if (isNil) { this.is.void = true; } if (isMissing) { this.is.missing = true; } } string_open() { return Frame.BEGIN_EXPR; } ; string_close() { return Frame.END_EXPR; } ; at(_index) { return Frame.nil; } in(_contexts = [Frame.nil]) { return this; } apply(argument, _parameter) { return argument; } called_by(context, parameter) { if (this.is.void) { return context; } return context.apply(this, parameter); } call(argument, parameter = Frame.nil) { if (this.is.void) { return argument; } return argument.called_by(this, parameter); } toString() { return this.string_open() + this.meta_string() + this.string_close(); } className() { return this.constructor.name; } inspect() { let result = `${this.className()}<${this.toString()}>`; const meta = this.meta_string(); if (meta.length > 2) { result += meta; } if (Object.keys(this.is).length > 0) { result += `:${inspect(this.is)}`; } return result; } asArray() { // return _.castArray(this) return [this]; } } Frame.kOUT = '>>'; Frame.kEND = '$$'; Frame.BEGIN_EXPR = '('; Frame.END_EXPR = ')'; Frame.nil = new Frame(NilContext, true); Frame.all = new Frame(NilContext, true); // eslint-disable-next-line no-use-before-define Frame.missing = new Frame(NilContext, false, true); Frame.globals = Frame.missing; ; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJhbWVzL2ZyYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUl2RCxNQUFNLE9BQU8sS0FBTSxTQUFRLFNBQVM7SUFjbEMsWUFBYSxJQUFJLEdBQUcsVUFBVSxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDOUQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ1gsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ1osSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7U0FDcEI7UUFDRCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtTQUN2QjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQTtJQUN6QixDQUFDO0lBQUEsQ0FBQztJQUVLLFlBQVk7UUFDakIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFBO0lBQ3ZCLENBQUM7SUFBQSxDQUFDO0lBRUssRUFBRSxDQUFFLE1BQWM7UUFDdkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFBO0lBQ2xCLENBQUM7SUFFTSxFQUFFLENBQUUsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxLQUFLLENBQUUsUUFBZSxFQUFFLFVBQWlCO1FBQzlDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFTSxTQUFTLENBQUUsT0FBYyxFQUFFLFNBQWdCO1FBQ2hELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxPQUFPLENBQUE7U0FDZjtRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVNLElBQUksQ0FBRSxRQUFlLEVBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHO1FBQ2pELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxRQUFRLENBQUE7U0FDaEI7UUFDRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN0RSxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUE7SUFDOUIsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQTtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixNQUFNLElBQUksSUFBSSxDQUFBO1NBQ2Y7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRU0sT0FBTztRQUNaLDJCQUEyQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDZixDQUFDOztBQWxGc0IsVUFBSSxHQUFHLElBQUksQ0FBQTtBQUNYLFVBQUksR0FBRyxJQUFJLENBQUE7QUFDWCxnQkFBVSxHQUFHLEdBQUcsQ0FBQTtBQUNoQixjQUFRLEdBQUcsR0FBRyxDQUFBO0FBQ2QsU0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUNqQyxTQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFBO0FBRXhELGdEQUFnRDtBQUN6QixhQUFPLEdBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUM1RCxhQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtBQTBFdEMsQ0FBQyJ9