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