hclang
Version:
Homoiconic C: Programming without a Language
45 lines • 3.23 kB
JavaScript
import { Frame } from './frame.js';
import { FrameAtom } from './frame-atom.js';
import { FrameNote } from './frame-note.js';
import { FrameSymbol } from './frame-symbol.js';
import { NilContext } from './meta-frame.js';
export class FrameAlias extends FrameAtom {
constructor(source, meta = NilContext) {
super(meta);
this.data = FrameSymbol.for(source);
}
in(contexts = [Frame.nil]) {
const key = this.data.toString();
for (const context of contexts) {
const out = this.find(context, key);
if (out !== Frame.nil) {
const setter = this.data.setter(out);
return setter;
}
}
return FrameNote.key(key, this);
}
string_prefix() {
return FrameAlias.ALIAS_BEGIN;
}
;
canInclude(char) {
return FrameSymbol.SYMBOL_CHAR.test(char);
}
toData() {
return this.data;
}
find(context, key) {
while (context !== Frame.missing) {
const here = context.get_here(key);
if (!here.is.missing) {
return context;
}
context = context.up;
}
return Frame.nil;
}
}
FrameAlias.ALIAS_BEGIN = '@';
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYWxpYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJhbWVzL2ZyYW1lLWFsaWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTVDLE1BQU0sT0FBTyxVQUFXLFNBQVEsU0FBUztJQUt2QyxZQUFhLE1BQWMsRUFBRSxJQUFJLEdBQUcsVUFBVTtRQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVNLEVBQUUsQ0FBRSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDbkMsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3BDLE9BQU8sTUFBTSxDQUFBO2FBQ2Q7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFBO0lBQy9CLENBQUM7SUFBQSxDQUFDO0lBRUssVUFBVSxDQUFFLElBQVk7UUFDN0IsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRVMsTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRVMsSUFBSSxDQUFFLE9BQWMsRUFBRSxHQUFXO1FBQ3pDLE9BQU8sT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BCLE9BQU8sT0FBTyxDQUFBO2FBQ2Y7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQTtTQUNyQjtRQUNELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtJQUNsQixDQUFDOztBQTFDc0Isc0JBQVcsR0FBRyxHQUFHLENBQUE7QUEyQ3pDLENBQUMifQ==