hclang
Version:
Homoiconic C: Programming without a Language
62 lines • 4.4 kB
JavaScript
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