@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
70 lines (56 loc) • 7.34 kB
JavaScript
import { $fp, $sp } from '@glimmer/vm';
import { REGISTERS } from '../symbols';
import { initializeRegistersWithSP } from './low-level';
export default class EvaluationStackImpl {
// fp -> sp
constructor(stack = [], registers) {
this.stack = stack;
this[REGISTERS] = registers;
if (false
/* LOCAL_DEBUG */
) {
Object.seal(this);
}
}
static restore(snapshot) {
return new this(snapshot.slice(), initializeRegistersWithSP(snapshot.length - 1));
}
push(value) {
this.stack[++this[REGISTERS][$sp]] = value;
}
dup(position = this[REGISTERS][$sp]) {
this.stack[++this[REGISTERS][$sp]] = this.stack[position];
}
copy(from, to) {
this.stack[to] = this.stack[from];
}
pop(n = 1) {
let top = this.stack[this[REGISTERS][$sp]];
this[REGISTERS][$sp] -= n;
return top;
}
peek(offset = 0) {
return this.stack[this[REGISTERS][$sp] - offset];
}
get(offset, base = this[REGISTERS][$fp]) {
return this.stack[base + offset];
}
set(value, offset, base = this[REGISTERS][$fp]) {
this.stack[base + offset] = value;
}
slice(start, end) {
return this.stack.slice(start, end);
}
capture(items) {
let end = this[REGISTERS][$sp] + 1;
let start = end - items;
return this.stack.slice(start, end);
}
reset() {
this.stack.length = 0;
}
toArray() {
return this.stack.slice(this[REGISTERS][$fp], this[REGISTERS][$sp] + 1);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3ZtL3N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsR0FBVCxFQUFjLEdBQWQsUUFBMEMsYUFBMUM7QUFDQSxTQUFTLFNBQVQsUUFBMEIsWUFBMUI7QUFDQSxTQUFTLHlCQUFULFFBQTZELGFBQTdEO0FBa0JBLGVBQWMsTUFBTyxtQkFBUCxDQUEwQjtBQU90QztBQUNBLEVBQUEsV0FBQSxDQUFvQixLQUFBLEdBQW1CLEVBQXZDLEVBQTJDLFNBQTNDLEVBQXVFO0FBQW5ELFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFDbEIsU0FBSyxTQUFMLElBQWtCLFNBQWxCOztBQUVBO0FBQUE7QUFBQSxNQUFpQjtBQUNmLE1BQUEsTUFBTSxDQUFDLElBQVAsQ0FBWSxJQUFaO0FBQ0Q7QUFDRjs7QUFiRCxTQUFPLE9BQVAsQ0FBZSxRQUFmLEVBQWtDO0FBQ2hDLFdBQU8sSUFBSSxJQUFKLENBQVMsUUFBUSxDQUFDLEtBQVQsRUFBVCxFQUEyQix5QkFBeUIsQ0FBQyxRQUFRLENBQUMsTUFBVCxHQUFrQixDQUFuQixDQUFwRCxDQUFQO0FBQ0Q7O0FBYUQsRUFBQSxJQUFJLENBQUMsS0FBRCxFQUFlO0FBQ2pCLFNBQUssS0FBTCxDQUFXLEVBQUUsS0FBSyxTQUFMLEVBQWdCLEdBQWhCLENBQWIsSUFBcUMsS0FBckM7QUFDRDs7QUFFRCxFQUFBLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxTQUFMLEVBQWdCLEdBQWhCLENBQVosRUFBZ0M7QUFDakMsU0FBSyxLQUFMLENBQVcsRUFBRSxLQUFLLFNBQUwsRUFBZ0IsR0FBaEIsQ0FBYixJQUFxQyxLQUFLLEtBQUwsQ0FBVyxRQUFYLENBQXJDO0FBQ0Q7O0FBRUQsRUFBQSxJQUFJLENBQUMsSUFBRCxFQUFlLEVBQWYsRUFBeUI7QUFDM0IsU0FBSyxLQUFMLENBQVcsRUFBWCxJQUFpQixLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWpCO0FBQ0Q7O0FBRUQsRUFBQSxHQUFHLENBQUksQ0FBQyxHQUFHLENBQVIsRUFBUztBQUNWLFFBQUksR0FBRyxHQUFHLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxFQUFnQixHQUFoQixDQUFYLENBQVY7QUFDQSxTQUFLLFNBQUwsRUFBZ0IsR0FBaEIsS0FBd0IsQ0FBeEI7QUFDQSxXQUFPLEdBQVA7QUFDRDs7QUFFRCxFQUFBLElBQUksQ0FBSSxNQUFNLEdBQUcsQ0FBYixFQUFjO0FBQ2hCLFdBQU8sS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLEVBQWdCLEdBQWhCLElBQXVCLE1BQWxDLENBQVA7QUFDRDs7QUFFRCxFQUFBLEdBQUcsQ0FBSSxNQUFKLEVBQW9CLElBQUksR0FBRyxLQUFLLFNBQUwsRUFBZ0IsR0FBaEIsQ0FBM0IsRUFBK0M7QUFDaEQsV0FBTyxLQUFLLEtBQUwsQ0FBVyxJQUFJLEdBQUcsTUFBbEIsQ0FBUDtBQUNEOztBQUVELEVBQUEsR0FBRyxDQUFDLEtBQUQsRUFBaUIsTUFBakIsRUFBaUMsSUFBSSxHQUFHLEtBQUssU0FBTCxFQUFnQixHQUFoQixDQUF4QyxFQUE0RDtBQUM3RCxTQUFLLEtBQUwsQ0FBVyxJQUFJLEdBQUcsTUFBbEIsSUFBNEIsS0FBNUI7QUFDRDs7QUFFRCxFQUFBLEtBQUssQ0FBYyxLQUFkLEVBQTZCLEdBQTdCLEVBQXdDO0FBQzNDLFdBQU8sS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixLQUFqQixFQUF3QixHQUF4QixDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLENBQUMsS0FBRCxFQUFjO0FBQ25CLFFBQUksR0FBRyxHQUFHLEtBQUssU0FBTCxFQUFnQixHQUFoQixJQUF1QixDQUFqQztBQUNBLFFBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFsQjtBQUNBLFdBQU8sS0FBSyxLQUFMLENBQVcsS0FBWCxDQUFpQixLQUFqQixFQUF3QixHQUF4QixDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxLQUFLLEdBQUE7QUFDSCxTQUFLLEtBQUwsQ0FBVyxNQUFYLEdBQW9CLENBQXBCO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLEdBQUE7QUFDTCxXQUFPLEtBQUssS0FBTCxDQUFXLEtBQVgsQ0FBaUIsS0FBSyxTQUFMLEVBQWdCLEdBQWhCLENBQWpCLEVBQXVDLEtBQUssU0FBTCxFQUFnQixHQUFoQixJQUF1QixDQUE5RCxDQUFQO0FBQ0Q7O0FBOURxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExPQ0FMX0RFQlVHIH0gZnJvbSAnQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3MnO1xuaW1wb3J0IHsgJGZwLCAkc3AsIE1hY2hpbmVSZWdpc3RlciB9IGZyb20gJ0BnbGltbWVyL3ZtJztcbmltcG9ydCB7IFJFR0lTVEVSUyB9IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVJlZ2lzdGVyc1dpdGhTUCwgTG93TGV2ZWxSZWdpc3RlcnMgfSBmcm9tICcuL2xvdy1sZXZlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGlvblN0YWNrIHtcbiAgW1JFR0lTVEVSU106IExvd0xldmVsUmVnaXN0ZXJzO1xuXG4gIHB1c2godmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBkdXAocG9zaXRpb24/OiBNYWNoaW5lUmVnaXN0ZXIpOiB2b2lkO1xuICBjb3B5KGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHZvaWQ7XG4gIHBvcDxUPihuPzogbnVtYmVyKTogVDtcbiAgcGVlazxUPihvZmZzZXQ/OiBudW1iZXIpOiBUO1xuICBnZXQ8VD4ob2Zmc2V0OiBudW1iZXIsIGJhc2U/OiBudW1iZXIpOiBUO1xuICBzZXQodmFsdWU6IHVua25vd24sIG9mZnNldDogbnVtYmVyLCBiYXNlPzogbnVtYmVyKTogdm9pZDtcbiAgc2xpY2U8VCA9IHVua25vd24+KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogVFtdO1xuICBjYXB0dXJlKGl0ZW1zOiBudW1iZXIpOiB1bmtub3duW107XG4gIHJlc2V0KCk6IHZvaWQ7XG4gIHRvQXJyYXkoKTogdW5rbm93bltdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmFsdWF0aW9uU3RhY2tJbXBsIGltcGxlbWVudHMgRXZhbHVhdGlvblN0YWNrIHtcbiAgc3RhdGljIHJlc3RvcmUoc25hcHNob3Q6IHVua25vd25bXSk6IEV2YWx1YXRpb25TdGFja0ltcGwge1xuICAgIHJldHVybiBuZXcgdGhpcyhzbmFwc2hvdC5zbGljZSgpLCBpbml0aWFsaXplUmVnaXN0ZXJzV2l0aFNQKHNuYXBzaG90Lmxlbmd0aCAtIDEpKTtcbiAgfVxuXG4gIHJlYWRvbmx5IFtSRUdJU1RFUlNdOiBMb3dMZXZlbFJlZ2lzdGVycztcblxuICAvLyBmcCAtPiBzcFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YWNrOiB1bmtub3duW10gPSBbXSwgcmVnaXN0ZXJzOiBMb3dMZXZlbFJlZ2lzdGVycykge1xuICAgIHRoaXNbUkVHSVNURVJTXSA9IHJlZ2lzdGVycztcblxuICAgIGlmIChMT0NBTF9ERUJVRykge1xuICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVzaCh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tbKyt0aGlzW1JFR0lTVEVSU11bJHNwXV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGR1cChwb3NpdGlvbiA9IHRoaXNbUkVHSVNURVJTXVskc3BdKTogdm9pZCB7XG4gICAgdGhpcy5zdGFja1srK3RoaXNbUkVHSVNURVJTXVskc3BdXSA9IHRoaXMuc3RhY2tbcG9zaXRpb25dO1xuICB9XG5cbiAgY29weShmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrW3RvXSA9IHRoaXMuc3RhY2tbZnJvbV07XG4gIH1cblxuICBwb3A8VD4obiA9IDEpOiBUIHtcbiAgICBsZXQgdG9wID0gdGhpcy5zdGFja1t0aGlzW1JFR0lTVEVSU11bJHNwXV0gYXMgVDtcbiAgICB0aGlzW1JFR0lTVEVSU11bJHNwXSAtPSBuO1xuICAgIHJldHVybiB0b3A7XG4gIH1cblxuICBwZWVrPFQ+KG9mZnNldCA9IDApOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzW1JFR0lTVEVSU11bJHNwXSAtIG9mZnNldF0gYXMgVDtcbiAgfVxuXG4gIGdldDxUPihvZmZzZXQ6IG51bWJlciwgYmFzZSA9IHRoaXNbUkVHSVNURVJTXVskZnBdKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbYmFzZSArIG9mZnNldF0gYXMgVDtcbiAgfVxuXG4gIHNldCh2YWx1ZTogdW5rbm93biwgb2Zmc2V0OiBudW1iZXIsIGJhc2UgPSB0aGlzW1JFR0lTVEVSU11bJGZwXSkge1xuICAgIHRoaXMuc3RhY2tbYmFzZSArIG9mZnNldF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNsaWNlPFQgPSB1bmtub3duPihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2Uoc3RhcnQsIGVuZCkgYXMgVFtdO1xuICB9XG5cbiAgY2FwdHVyZShpdGVtczogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICBsZXQgZW5kID0gdGhpc1tSRUdJU1RFUlNdWyRzcF0gKyAxO1xuICAgIGxldCBzdGFydCA9IGVuZCAtIGl0ZW1zO1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zdGFjay5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZSh0aGlzW1JFR0lTVEVSU11bJGZwXSwgdGhpc1tSRUdJU1RFUlNdWyRzcF0gKyAxKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==