hclang
Version:
Homoiconic C: Programming without a Language
104 lines • 7.16 kB
JavaScript
import { Frame } from './frame.js';
import { FrameArray } from './frame-array.js';
import { FrameQuote } from './frame-atom.js';
import { FrameString } from './frame-string.js';
import { FrameSymbol } from './frame-symbol.js';
import { NilContext } from './meta-frame.js';
export class FrameNote extends FrameQuote {
static test(data, source, sum) {
const note = new FrameNote(data, source);
const result = new FrameString(sum);
note.set('n', result);
return note;
}
;
static key(source, where) {
return new FrameNote('!', source, where);
}
;
static type(source) {
return new FrameNote('<>', source);
}
;
static index(source) {
return new FrameNote('>', source);
}
;
static pass(source, sum) {
return FrameNote.test('+', source, sum);
}
;
static fail(source, sum) {
return FrameNote.test('-', source, sum);
}
;
constructor(data, source, where = Frame.nil) {
super(NilContext);
this.data = data;
this.where = where;
this.up = where;
this.is.note = true;
this.setLabel(data, source);
this.id += this.data;
}
in(_contexts = [Frame.nil]) {
return this;
}
call(argument, parameter = Frame.nil) {
if (argument !== FrameSymbol.end()) {
const result = this.addExtra(argument, parameter);
return result;
}
const output = this.get(Frame.kOUT);
output.call(this);
output.call(FrameSymbol.end());
return this.up;
}
string_prefix() {
return FrameNote.NOTE_BEGIN;
}
;
string_suffix() {
return FrameNote.NOTE_END;
}
;
toString() {
return this.string_prefix() + this.data + this.meta_string();
}
setLabel(data, source) {
const label = FrameNote.LABELS.en[data];
let value = new FrameString(data);
let key = '!';
if (label) {
key = label;
value = new FrameString(source);
}
if (key === '!') {
this.is.missing = true;
}
this.set(key, value);
}
addExtra(argument, parameter) {
let extras = this.get(FrameNote.NOTE_EXTRAS);
if (extras.is.missing) {
extras = new FrameArray([]);
this.set(FrameNote.NOTE_EXTRAS, extras);
}
extras.apply(argument, parameter);
return this;
}
}
FrameNote.NOTE_BEGIN = '$';
FrameNote.NOTE_END = ';';
FrameNote.NOTE_EXTRAS = '++';
FrameNote.LABELS = {
en: {
'!': 'name-missing',
'+': 'test-pass',
'-': 'test-fail',
'<>': 'type-mismatch',
'>': 'bounds-exceeded'
}
};
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbm90ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcmFtZXMvZnJhbWUtbm90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFLNUMsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFVO0lBZWhDLE1BQU0sQ0FBQyxJQUFJLENBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxHQUFXO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNyQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQSxDQUFDO0lBRUssTUFBTSxDQUFDLEdBQUcsQ0FBRSxNQUFjLEVBQUUsS0FBWTtRQUM3QyxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUFBLENBQUM7SUFFSyxNQUFNLENBQUMsSUFBSSxDQUFFLE1BQWM7UUFDaEMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUFBLENBQUM7SUFFSyxNQUFNLENB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