@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
109 lines (82 loc) • 8.7 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");
var EvaluationStackImpl = /*#__PURE__*/function () {
// fp -> sp
function EvaluationStackImpl(stack, registers) {
if (stack === void 0) {
stack = [];
}
this.stack = stack;
this[_symbols.REGISTERS] = registers;
if (false
/* LOCAL_DEBUG */
) {
Object.seal(this);
}
}
EvaluationStackImpl.restore = function restore(snapshot) {
return new this(snapshot.slice(), (0, _lowLevel.initializeRegistersWithSP)(snapshot.length - 1));
};
var _proto = EvaluationStackImpl.prototype;
_proto.push = function push(value) {
this.stack[++this[_symbols.REGISTERS][_vm.$sp]] = value;
};
_proto.dup = function dup(position) {
if (position === void 0) {
position = this[_symbols.REGISTERS][_vm.$sp];
}
this.stack[++this[_symbols.REGISTERS][_vm.$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[_symbols.REGISTERS][_vm.$sp]];
this[_symbols.REGISTERS][_vm.$sp] -= n;
return top;
};
_proto.peek = function peek(offset) {
if (offset === void 0) {
offset = 0;
}
return this.stack[this[_symbols.REGISTERS][_vm.$sp] - offset];
};
_proto.get = function get(offset, base) {
if (base === void 0) {
base = this[_symbols.REGISTERS][_vm.$fp];
}
return this.stack[base + offset];
};
_proto.set = function set(value, offset, base) {
if (base === void 0) {
base = this[_symbols.REGISTERS][_vm.$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[_symbols.REGISTERS][_vm.$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[_symbols.REGISTERS][_vm.$fp], this[_symbols.REGISTERS][_vm.$sp] + 1);
};
return EvaluationStackImpl;
}();
exports.default = EvaluationStackImpl;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL3ZtL3N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7SUFrQmMsbUI7QUFPWjtBQUNBLFdBQUEsbUJBQUEsQ0FBQSxLQUFBLEVBQUEsU0FBQSxFQUF1RTtBQUFBLFFBQW5ELEtBQW1ELEtBQUEsS0FBQSxDQUFBLEVBQUE7QUFBbkQsTUFBQSxLQUFtRCxHQUF2RSxFQUFvQjtBQUFtRDs7QUFBbkQsU0FBQSxLQUFBLEdBQUEsS0FBQTtBQUNsQixTQUFBLGtCQUFBLElBQUEsU0FBQTs7QUFFQSxRQUFBO0FBQUE7QUFBQSxNQUFpQjtBQUNmLFFBQUEsTUFBTSxDQUFOLElBQUEsQ0FBQSxJQUFBO0FBQ0Q7QUFDRjs7c0JBYkQsTyxHQUFBLFNBQUEsT0FBQSxDQUFBLFFBQUEsRUFBa0M7QUFDaEMsV0FBTyxJQUFBLElBQUEsQ0FBUyxRQUFRLENBQWpCLEtBQVMsRUFBVCxFQUEyQix5Q0FBMEIsUUFBUSxDQUFSLE1BQUEsR0FBNUQsQ0FBa0MsQ0FBM0IsQ0FBUDs7Ozs7U0FjRixJLEdBQUEsU0FBQSxJQUFBLENBQUEsS0FBQSxFQUFtQjtBQUNqQixTQUFBLEtBQUEsQ0FBVyxFQUFFLEtBQUEsa0JBQUEsRUFBYixPQUFhLENBQWIsSUFBQSxLQUFBOzs7U0FHRixHLEdBQUEsU0FBQSxHQUFBLENBQUEsUUFBQSxFQUFtQztBQUFBLFFBQS9CLFFBQStCLEtBQUEsS0FBQSxDQUFBLEVBQUE7QUFBL0IsTUFBQSxRQUErQixHQUFwQixLQUFBLGtCQUFBLEVBQVosT0FBWSxDQUFYO0FBQStCOztBQUNqQyxTQUFBLEtBQUEsQ0FBVyxFQUFFLEtBQUEsa0JBQUEsRUFBYixPQUFhLENBQWIsSUFBcUMsS0FBQSxLQUFBLENBQXJDLFFBQXFDLENBQXJDOzs7U0FHRixJLEdBQUEsU0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLEVBQUEsRUFBNkI7QUFDM0IsU0FBQSxLQUFBLENBQUEsRUFBQSxJQUFpQixLQUFBLEtBQUEsQ0FBakIsSUFBaUIsQ0FBakI7OztTQUdGLEcsR0FBQSxTQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQVk7QUFBQSxRQUFMLENBQUssS0FBQSxLQUFBLENBQUEsRUFBQTtBQUFMLE1BQUEsQ0FBSyxHQUFULENBQUk7QUFBSzs7QUFDVixRQUFJLEdBQUcsR0FBRyxLQUFBLEtBQUEsQ0FBVyxLQUFBLGtCQUFBLEVBQXJCLE9BQXFCLENBQVgsQ0FBVjtBQUNBLFNBQUEsa0JBQUEsRUFBQSxPQUFBLEtBQUEsQ0FBQTtBQUNBLFdBQUEsR0FBQTs7O1NBR0YsSSxHQUFBLFNBQUEsSUFBQSxDQUFBLE1BQUEsRUFBa0I7QUFBQSxRQUFWLE1BQVUsS0FBQSxLQUFBLENBQUEsRUFBQTtBQUFWLE1BQUEsTUFBVSxHQUFkLENBQUk7QUFBVTs7QUFDaEIsV0FBTyxLQUFBLEtBQUEsQ0FBVyxLQUFBLGtCQUFBLEVBQUEsT0FBQSxJQUFsQixNQUFPLENBQVA7OztTQUdGLEcsR0FBQSxTQUFBLEdBQUEsQ0FBQSxNQUFBLEVBQUEsSUFBQSxFQUFrRDtBQUFBLFFBQTNCLElBQTJCLEtBQUEsS0FBQSxDQUFBLEVBQUE7QUFBM0IsTUFBQSxJQUEyQixHQUFwQixLQUFBLGtCQUFBLEVBQTNCLE9BQTJCLENBQVA7QUFBMkI7O0FBQ2hELFdBQU8sS0FBQSxLQUFBLENBQVcsSUFBSSxHQUF0QixNQUFPLENBQVA7OztTQUdGLEcsR0FBQSxTQUFBLEdBQUEsQ0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLElBQUEsRUFBK0Q7QUFBQSxRQUEzQixJQUEyQixLQUFBLEtBQUEsQ0FBQSxFQUFBO0FBQTNCLE1BQUEsSUFBMkIsR0FBcEIsS0FBQSxrQkFBQSxFQUF4QyxPQUF3QyxDQUFQO0FBQTJCOztBQUM3RCxTQUFBLEtBQUEsQ0FBVyxJQUFJLEdBQWYsTUFBQSxJQUFBLEtBQUE7OztTQUdGLEssR0FBQSxTQUFBLEtBQUEsQ0FBQSxLQUFBLEVBQUEsR0FBQSxFQUE2QztBQUMzQyxXQUFPLEtBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLEVBQVAsR0FBTyxDQUFQOzs7U0FHRixPLEdBQUEsU0FBQSxPQUFBLENBQUEsS0FBQSxFQUFxQjtBQUNuQixRQUFJLEdBQUcsR0FBRyxLQUFBLGtCQUFBLEVBQUEsT0FBQSxJQUFWLENBQUE7QUFDQSxRQUFJLEtBQUssR0FBRyxHQUFHLEdBQWYsS0FBQTtBQUNBLFdBQU8sS0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsRUFBUCxHQUFPLENBQVA7OztTQUdGLEssR0FBQSxTQUFBLEtBQUEsR0FBSztBQUNILFNBQUEsS0FBQSxDQUFBLE1BQUEsR0FBQSxDQUFBOzs7U0FHRixPLEdBQUEsU0FBQSxPQUFBLEdBQU87QUFDTCxXQUFPLEtBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBaUIsS0FBQSxrQkFBQSxFQUFqQixPQUFpQixDQUFqQixFQUF1QyxLQUFBLGtCQUFBLEVBQUEsT0FBQSxJQUE5QyxDQUFPLENBQVAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMT0NBTF9ERUJVRyB9IGZyb20gJ0BnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzJztcbmltcG9ydCB7ICRmcCwgJHNwLCBNYWNoaW5lUmVnaXN0ZXIgfSBmcm9tICdAZ2xpbW1lci92bSc7XG5pbXBvcnQgeyBSRUdJU1RFUlMgfSBmcm9tICcuLi9zeW1ib2xzJztcbmltcG9ydCB7IGluaXRpYWxpemVSZWdpc3RlcnNXaXRoU1AsIExvd0xldmVsUmVnaXN0ZXJzIH0gZnJvbSAnLi9sb3ctbGV2ZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRpb25TdGFjayB7XG4gIFtSRUdJU1RFUlNdOiBMb3dMZXZlbFJlZ2lzdGVycztcblxuICBwdXNoKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgZHVwKHBvc2l0aW9uPzogTWFjaGluZVJlZ2lzdGVyKTogdm9pZDtcbiAgY29weShmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiB2b2lkO1xuICBwb3A8VD4obj86IG51bWJlcik6IFQ7XG4gIHBlZWs8VD4ob2Zmc2V0PzogbnVtYmVyKTogVDtcbiAgZ2V0PFQ+KG9mZnNldDogbnVtYmVyLCBiYXNlPzogbnVtYmVyKTogVDtcbiAgc2V0KHZhbHVlOiB1bmtub3duLCBvZmZzZXQ6IG51bWJlciwgYmFzZT86IG51bWJlcik6IHZvaWQ7XG4gIHNsaWNlPFQgPSB1bmtub3duPihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRbXTtcbiAgY2FwdHVyZShpdGVtczogbnVtYmVyKTogdW5rbm93bltdO1xuICByZXNldCgpOiB2b2lkO1xuICB0b0FycmF5KCk6IHVua25vd25bXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZhbHVhdGlvblN0YWNrSW1wbCBpbXBsZW1lbnRzIEV2YWx1YXRpb25TdGFjayB7XG4gIHN0YXRpYyByZXN0b3JlKHNuYXBzaG90OiB1bmtub3duW10pOiBFdmFsdWF0aW9uU3RhY2tJbXBsIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoc25hcHNob3Quc2xpY2UoKSwgaW5pdGlhbGl6ZVJlZ2lzdGVyc1dpdGhTUChzbmFwc2hvdC5sZW5ndGggLSAxKSk7XG4gIH1cblxuICByZWFkb25seSBbUkVHSVNURVJTXTogTG93TGV2ZWxSZWdpc3RlcnM7XG5cbiAgLy8gZnAgLT4gc3BcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFjazogdW5rbm93bltdID0gW10sIHJlZ2lzdGVyczogTG93TGV2ZWxSZWdpc3RlcnMpIHtcbiAgICB0aGlzW1JFR0lTVEVSU10gPSByZWdpc3RlcnM7XG5cbiAgICBpZiAoTE9DQUxfREVCVUcpIHtcbiAgICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2godmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrWysrdGhpc1tSRUdJU1RFUlNdWyRzcF1dID0gdmFsdWU7XG4gIH1cblxuICBkdXAocG9zaXRpb24gPSB0aGlzW1JFR0lTVEVSU11bJHNwXSk6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tbKyt0aGlzW1JFR0lTVEVSU11bJHNwXV0gPSB0aGlzLnN0YWNrW3Bvc2l0aW9uXTtcbiAgfVxuXG4gIGNvcHkoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGFja1t0b10gPSB0aGlzLnN0YWNrW2Zyb21dO1xuICB9XG5cbiAgcG9wPFQ+KG4gPSAxKTogVCB7XG4gICAgbGV0IHRvcCA9IHRoaXMuc3RhY2tbdGhpc1tSRUdJU1RFUlNdWyRzcF1dIGFzIFQ7XG4gICAgdGhpc1tSRUdJU1RFUlNdWyRzcF0gLT0gbjtcbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgcGVlazxUPihvZmZzZXQgPSAwKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpc1tSRUdJU1RFUlNdWyRzcF0gLSBvZmZzZXRdIGFzIFQ7XG4gIH1cblxuICBnZXQ8VD4ob2Zmc2V0OiBudW1iZXIsIGJhc2UgPSB0aGlzW1JFR0lTVEVSU11bJGZwXSk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW2Jhc2UgKyBvZmZzZXRdIGFzIFQ7XG4gIH1cblxuICBzZXQodmFsdWU6IHVua25vd24sIG9mZnNldDogbnVtYmVyLCBiYXNlID0gdGhpc1tSRUdJU1RFUlNdWyRmcF0pIHtcbiAgICB0aGlzLnN0YWNrW2Jhc2UgKyBvZmZzZXRdID0gdmFsdWU7XG4gIH1cblxuICBzbGljZTxUID0gdW5rbm93bj4oc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHN0YXJ0LCBlbmQpIGFzIFRbXTtcbiAgfVxuXG4gIGNhcHR1cmUoaXRlbXM6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgbGV0IGVuZCA9IHRoaXNbUkVHSVNURVJTXVskc3BdICsgMTtcbiAgICBsZXQgc3RhcnQgPSBlbmQgLSBpdGVtcztcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3RhY2subGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2UodGhpc1tSRUdJU1RFUlNdWyRmcF0sIHRoaXNbUkVHSVNURVJTXVskc3BdICsgMSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=