@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
82 lines (62 loc) • 7.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _vm = require("@glimmer/vm");
var _symbols = require("../symbols");
var _lowLevel = require("./low-level");
class EvaluationStackImpl {
// fp -> sp
constructor(stack = [], registers) {
this.stack = stack;
this[_symbols.REGISTERS] = registers;
if (false
/* LOCAL_DEBUG */
) {
Object.seal(this);
}
}
static restore(snapshot) {
return new this(snapshot.slice(), (0, _lowLevel.initializeRegistersWithSP)(snapshot.length - 1));
}
push(value) {
this.stack[++this[_symbols.REGISTERS][_vm.$sp]] = value;
}
dup(position = this[_symbols.REGISTERS][_vm.$sp]) {
this.stack[++this[_symbols.REGISTERS][_vm.$sp]] = this.stack[position];
}
copy(from, to) {
this.stack[to] = this.stack[from];
}
pop(n = 1) {
let top = this.stack[this[_symbols.REGISTERS][_vm.$sp]];
this[_symbols.REGISTERS][_vm.$sp] -= n;
return top;
}
peek(offset = 0) {
return this.stack[this[_symbols.REGISTERS][_vm.$sp] - offset];
}
get(offset, base = this[_symbols.REGISTERS][_vm.$fp]) {
return this.stack[base + offset];
}
set(value, offset, base = this[_symbols.REGISTERS][_vm.$fp]) {
this.stack[base + offset] = value;
}
slice(start, end) {
return this.stack.slice(start, end);
}
capture(items) {
let end = this[_symbols.REGISTERS][_vm.$sp] + 1;
let start = end - items;
return this.stack.slice(start, end);
}
reset() {
this.stack.length = 0;
}
toArray() {
return this.stack.slice(this[_symbols.REGISTERS][_vm.$fp], this[_symbols.REGISTERS][_vm.$sp] + 1);
}
}
exports.default = EvaluationStackImpl;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3ZtL3N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFrQmMsTUFBQSxtQkFBQSxDQUEwQjtBQU90QztBQUNBLEVBQUEsV0FBQSxDQUFvQixLQUFBLEdBQXBCLEVBQUEsRUFBQSxTQUFBLEVBQXVFO0FBQW5ELFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFDbEIsU0FBQSxrQkFBQSxJQUFBLFNBQUE7O0FBRUEsUUFBQTtBQUFBO0FBQUEsTUFBaUI7QUFDZixRQUFBLE1BQU0sQ0FBTixJQUFBLENBQUEsSUFBQTtBQUNEO0FBQ0Y7O0FBYkQsU0FBQSxPQUFBLENBQUEsUUFBQSxFQUFrQztBQUNoQyxXQUFPLElBQUEsSUFBQSxDQUFTLFFBQVEsQ0FBakIsS0FBUyxFQUFULEVBQTJCLHlDQUEwQixRQUFRLENBQVIsTUFBQSxHQUE1RCxDQUFrQyxDQUEzQixDQUFQO0FBQ0Q7O0FBYUQsRUFBQSxJQUFJLENBQUEsS0FBQSxFQUFlO0FBQ2pCLFNBQUEsS0FBQSxDQUFXLEVBQUUsS0FBQSxrQkFBQSxFQUFiLE9BQWEsQ0FBYixJQUFBLEtBQUE7QUFDRDs7QUFFRCxFQUFBLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBQSxrQkFBQSxFQUFaLE9BQVksQ0FBWixFQUFnQztBQUNqQyxTQUFBLEtBQUEsQ0FBVyxFQUFFLEtBQUEsa0JBQUEsRUFBYixPQUFhLENBQWIsSUFBcUMsS0FBQSxLQUFBLENBQXJDLFFBQXFDLENBQXJDO0FBQ0Q7O0FBRUQsRUFBQSxJQUFJLENBQUEsSUFBQSxFQUFBLEVBQUEsRUFBeUI7QUFDM0IsU0FBQSxLQUFBLENBQUEsRUFBQSxJQUFpQixLQUFBLEtBQUEsQ0FBakIsSUFBaUIsQ0FBakI7QUFDRDs7QUFFRCxFQUFBLEdBQUcsQ0FBSSxDQUFDLEdBQUwsQ0FBQSxFQUFTO0FBQ1YsUUFBSSxHQUFHLEdBQUcsS0FBQSxLQUFBLENBQVcsS0FBQSxrQkFBQSxFQUFyQixPQUFxQixDQUFYLENBQVY7QUFDQSxTQUFBLGtCQUFBLEVBQUEsT0FBQSxLQUFBLENBQUE7QUFDQSxXQUFBLEdBQUE7QUFDRDs7QUFFRCxFQUFBLElBQUksQ0FBSSxNQUFNLEdBQVYsQ0FBQSxFQUFjO0FBQ2hCLFdBQU8sS0FBQSxLQUFBLENBQVcsS0FBQSxrQkFBQSxFQUFBLE9BQUEsSUFBbEIsTUFBTyxDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxHQUFHLENBQUEsTUFBQSxFQUFvQixJQUFJLEdBQUcsS0FBQSxrQkFBQSxFQUEzQixPQUEyQixDQUEzQixFQUErQztBQUNoRCxXQUFPLEtBQUEsS0FBQSxDQUFXLElBQUksR0FBdEIsTUFBTyxDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxHQUFHLENBQUEsS0FBQSxFQUFBLE1BQUEsRUFBaUMsSUFBSSxHQUFHLEtBQUEsa0JBQUEsRUFBeEMsT0FBd0MsQ0FBeEMsRUFBNEQ7QUFDN0QsU0FBQSxLQUFBLENBQVcsSUFBSSxHQUFmLE1BQUEsSUFBQSxLQUFBO0FBQ0Q7O0FBRUQsRUFBQSxLQUFLLENBQUEsS0FBQSxFQUFBLEdBQUEsRUFBd0M7QUFDM0MsV0FBTyxLQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxFQUFQLEdBQU8sQ0FBUDtBQUNEOztBQUVELEVBQUEsT0FBTyxDQUFBLEtBQUEsRUFBYztBQUNuQixRQUFJLEdBQUcsR0FBRyxLQUFBLGtCQUFBLEVBQUEsT0FBQSxJQUFWLENBQUE7QUFDQSxRQUFJLEtBQUssR0FBRyxHQUFHLEdBQWYsS0FBQTtBQUNBLFdBQU8sS0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsRUFBUCxHQUFPLENBQVA7QUFDRDs7QUFFRCxFQUFBLEtBQUssR0FBQTtBQUNILFNBQUEsS0FBQSxDQUFBLE1BQUEsR0FBQSxDQUFBO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLEdBQUE7QUFDTCxXQUFPLEtBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBaUIsS0FBQSxrQkFBQSxFQUFqQixPQUFpQixDQUFqQixFQUF1QyxLQUFBLGtCQUFBLEVBQUEsT0FBQSxJQUE5QyxDQUFPLENBQVA7QUFDRDs7QUE5RHFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTE9DQUxfREVCVUcgfSBmcm9tICdAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFncyc7XG5pbXBvcnQgeyAkZnAsICRzcCwgTWFjaGluZVJlZ2lzdGVyIH0gZnJvbSAnQGdsaW1tZXIvdm0nO1xuaW1wb3J0IHsgUkVHSVNURVJTIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBpbml0aWFsaXplUmVnaXN0ZXJzV2l0aFNQLCBMb3dMZXZlbFJlZ2lzdGVycyB9IGZyb20gJy4vbG93LWxldmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0aW9uU3RhY2sge1xuICBbUkVHSVNURVJTXTogTG93TGV2ZWxSZWdpc3RlcnM7XG5cbiAgcHVzaCh2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGR1cChwb3NpdGlvbj86IE1hY2hpbmVSZWdpc3Rlcik6IHZvaWQ7XG4gIGNvcHkoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogdm9pZDtcbiAgcG9wPFQ+KG4/OiBudW1iZXIpOiBUO1xuICBwZWVrPFQ+KG9mZnNldD86IG51bWJlcik6IFQ7XG4gIGdldDxUPihvZmZzZXQ6IG51bWJlciwgYmFzZT86IG51bWJlcik6IFQ7XG4gIHNldCh2YWx1ZTogdW5rbm93biwgb2Zmc2V0OiBudW1iZXIsIGJhc2U/OiBudW1iZXIpOiB2b2lkO1xuICBzbGljZTxUID0gdW5rbm93bj4oc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUW107XG4gIGNhcHR1cmUoaXRlbXM6IG51bWJlcik6IHVua25vd25bXTtcbiAgcmVzZXQoKTogdm9pZDtcbiAgdG9BcnJheSgpOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2YWx1YXRpb25TdGFja0ltcGwgaW1wbGVtZW50cyBFdmFsdWF0aW9uU3RhY2sge1xuICBzdGF0aWMgcmVzdG9yZShzbmFwc2hvdDogdW5rbm93bltdKTogRXZhbHVhdGlvblN0YWNrSW1wbCB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHNuYXBzaG90LnNsaWNlKCksIGluaXRpYWxpemVSZWdpc3RlcnNXaXRoU1Aoc25hcHNob3QubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcmVhZG9ubHkgW1JFR0lTVEVSU106IExvd0xldmVsUmVnaXN0ZXJzO1xuXG4gIC8vIGZwIC0+IHNwXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhY2s6IHVua25vd25bXSA9IFtdLCByZWdpc3RlcnM6IExvd0xldmVsUmVnaXN0ZXJzKSB7XG4gICAgdGhpc1tSRUdJU1RFUlNdID0gcmVnaXN0ZXJzO1xuXG4gICAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdXNoKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5zdGFja1srK3RoaXNbUkVHSVNURVJTXVskc3BdXSA9IHZhbHVlO1xuICB9XG5cbiAgZHVwKHBvc2l0aW9uID0gdGhpc1tSRUdJU1RFUlNdWyRzcF0pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrWysrdGhpc1tSRUdJU1RFUlNdWyRzcF1dID0gdGhpcy5zdGFja1twb3NpdGlvbl07XG4gIH1cblxuICBjb3B5KGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tbdG9dID0gdGhpcy5zdGFja1tmcm9tXTtcbiAgfVxuXG4gIHBvcDxUPihuID0gMSk6IFQge1xuICAgIGxldCB0b3AgPSB0aGlzLnN0YWNrW3RoaXNbUkVHSVNURVJTXVskc3BdXSBhcyBUO1xuICAgIHRoaXNbUkVHSVNURVJTXVskc3BdIC09IG47XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIHBlZWs8VD4ob2Zmc2V0ID0gMCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXNbUkVHSVNURVJTXVskc3BdIC0gb2Zmc2V0XSBhcyBUO1xuICB9XG5cbiAgZ2V0PFQ+KG9mZnNldDogbnVtYmVyLCBiYXNlID0gdGhpc1tSRUdJU1RFUlNdWyRmcF0pOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1tiYXNlICsgb2Zmc2V0XSBhcyBUO1xuICB9XG5cbiAgc2V0KHZhbHVlOiB1bmtub3duLCBvZmZzZXQ6IG51bWJlciwgYmFzZSA9IHRoaXNbUkVHSVNURVJTXVskZnBdKSB7XG4gICAgdGhpcy5zdGFja1tiYXNlICsgb2Zmc2V0XSA9IHZhbHVlO1xuICB9XG5cbiAgc2xpY2U8VCA9IHVua25vd24+KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZShzdGFydCwgZW5kKSBhcyBUW107XG4gIH1cblxuICBjYXB0dXJlKGl0ZW1zOiBudW1iZXIpOiB1bmtub3duW10ge1xuICAgIGxldCBlbmQgPSB0aGlzW1JFR0lTVEVSU11bJHNwXSArIDE7XG4gICAgbGV0IHN0YXJ0ID0gZW5kIC0gaXRlbXM7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHRoaXNbUkVHSVNURVJTXVskZnBdLCB0aGlzW1JFR0lTVEVSU11bJHNwXSArIDEpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9