@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
47 lines (45 loc) • 5.12 kB
JavaScript
import { createIteratorRef, valueForRef } from '@glimmer/reference';
import { APPEND_OPCODES } from '../../opcodes';
import { AssertFilter } from './vm';
APPEND_OPCODES.add(72
/* EnterList */
, function (vm, _ref) {
var relativeStart = _ref.op1,
elseTarget = _ref.op2;
var stack = vm.stack;
var listRef = stack.pop();
var keyRef = stack.pop();
var keyValue = valueForRef(keyRef);
var key = keyValue === null ? '@identity' : String(keyValue);
var iteratorRef = createIteratorRef(listRef, key);
var iterator = valueForRef(iteratorRef);
vm.updateWith(new AssertFilter(iteratorRef, function (iterator) {
return iterator.isEmpty();
}));
if (iterator.isEmpty() === true) {
// TODO: Fix this offset, should be accurate
vm["goto"](elseTarget + 1);
} else {
vm.enterList(iteratorRef, relativeStart);
vm.stack.push(iterator);
}
});
APPEND_OPCODES.add(73
/* ExitList */
, function (vm) {
vm.exitList();
});
APPEND_OPCODES.add(74
/* Iterate */
, function (vm, _ref2) {
var breaks = _ref2.op1;
var stack = vm.stack;
var iterator = stack.peek();
var item = iterator.next();
if (item !== null) {
vm.registerItem(vm.enterItem(item));
} else {
vm["goto"](breaks);
}
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvbGlzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBQSxpQkFBQSxFQUFBLFdBQUEsUUFBQSxvQkFBQTtBQUNBLFNBQUEsY0FBQSxRQUFBLGVBQUE7QUFJQSxTQUFBLFlBQUEsUUFBQSxNQUFBO0FBRUEsY0FBYyxDQUFkLEdBQUEsQ0FBa0I7QUFBQTtBQUFsQixFQUFpQyxVQUFBLEVBQUEsUUFBZ0Q7QUFBQSxNQUEzQyxhQUEyQyxRQUF6QyxHQUF5QztBQUFBLE1BQWhCLFVBQWdCLFFBQXJCLEdBQXFCO0FBQy9FLE1BQUksS0FBSyxHQUFHLEVBQUUsQ0FBZCxLQUFBO0FBQ0EsTUFBSSxPQUFPLEdBQVMsS0FBSyxDQUF6QixHQUFvQixFQUFwQjtBQUNBLE1BQUksTUFBTSxHQUFTLEtBQUssQ0FBeEIsR0FBbUIsRUFBbkI7QUFFQSxNQUFJLFFBQVEsR0FBRyxXQUFXLENBQTFCLE1BQTBCLENBQTFCO0FBQ0EsTUFBSSxHQUFHLEdBQUcsUUFBUSxLQUFSLElBQUEsR0FBQSxXQUFBLEdBQWtDLE1BQU0sQ0FBbEQsUUFBa0QsQ0FBbEQ7QUFFQSxNQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQSxPQUFBLEVBQW5DLEdBQW1DLENBQW5DO0FBQ0EsTUFBSSxRQUFRLEdBQUcsV0FBVyxDQUExQixXQUEwQixDQUExQjtBQUVBLEVBQUEsRUFBRSxDQUFGLFVBQUEsQ0FBYyxJQUFBLFlBQUEsQ0FBQSxXQUFBLEVBQStCLFVBQUEsUUFBRDtBQUFBLFdBQWMsUUFBUSxDQUFsRSxPQUEwRCxFQUFkO0FBQUEsR0FBOUIsQ0FBZDs7QUFFQSxNQUFJLFFBQVEsQ0FBUixPQUFBLE9BQUosSUFBQSxFQUFpQztBQUMvQjtBQUNBLElBQUEsRUFBQSxRQUFBLENBQVEsVUFBVSxHQUFsQixDQUFBO0FBRkYsR0FBQSxNQUdPO0FBQ0wsSUFBQSxFQUFFLENBQUYsU0FBQSxDQUFBLFdBQUEsRUFBQSxhQUFBO0FBQ0EsSUFBQSxFQUFFLENBQUYsS0FBQSxDQUFBLElBQUEsQ0FBQSxRQUFBO0FBQ0Q7QUFuQkgsQ0FBQTtBQXNCQSxjQUFjLENBQWQsR0FBQSxDQUFrQjtBQUFBO0FBQWxCLEVBQWlDLFVBQUEsRUFBRCxFQUFPO0FBQ3JDLEVBQUEsRUFBRSxDQUFGLFFBQUE7QUFERixDQUFBO0FBSUEsY0FBYyxDQUFkLEdBQUEsQ0FBa0I7QUFBQTtBQUFsQixFQUErQixVQUFBLEVBQUEsU0FBd0I7QUFBQSxNQUFaLE1BQVksU0FBakIsR0FBaUI7QUFDckQsTUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFkLEtBQUE7QUFDQSxNQUFJLFFBQVEsR0FBUyxLQUFLLENBQTFCLElBQXFCLEVBQXJCO0FBQ0EsTUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFuQixJQUFXLEVBQVg7O0FBRUEsTUFBSSxJQUFJLEtBQVIsSUFBQSxFQUFtQjtBQUNqQixJQUFBLEVBQUUsQ0FBRixZQUFBLENBQWdCLEVBQUUsQ0FBRixTQUFBLENBQWhCLElBQWdCLENBQWhCO0FBREYsR0FBQSxNQUVPO0FBQ0wsSUFBQSxFQUFBLFFBQUEsQ0FBQSxNQUFBO0FBQ0Q7QUFUSCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSXRlcmF0b3JSZWYsIHZhbHVlRm9yUmVmIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDaGVja1JlZmVyZW5jZSwgQ2hlY2tJdGVyYXRvciB9IGZyb20gJy4vLWRlYnVnLXN0cmlwJztcbmltcG9ydCB7IGNoZWNrIH0gZnJvbSAnQGdsaW1tZXIvZGVidWcnO1xuaW1wb3J0IHsgT3AgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFzc2VydEZpbHRlciB9IGZyb20gJy4vdm0nO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXJMaXN0LCAodm0sIHsgb3AxOiByZWxhdGl2ZVN0YXJ0LCBvcDI6IGVsc2VUYXJnZXQgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGxpc3RSZWYgPSBjaGVjayhzdGFjay5wb3AoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuICBsZXQga2V5UmVmID0gY2hlY2soc3RhY2sucG9wKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICBsZXQga2V5VmFsdWUgPSB2YWx1ZUZvclJlZihrZXlSZWYpO1xuICBsZXQga2V5ID0ga2V5VmFsdWUgPT09IG51bGwgPyAnQGlkZW50aXR5JyA6IFN0cmluZyhrZXlWYWx1ZSk7XG5cbiAgbGV0IGl0ZXJhdG9yUmVmID0gY3JlYXRlSXRlcmF0b3JSZWYobGlzdFJlZiwga2V5KTtcbiAgbGV0IGl0ZXJhdG9yID0gdmFsdWVGb3JSZWYoaXRlcmF0b3JSZWYpO1xuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydEZpbHRlcihpdGVyYXRvclJlZiwgKGl0ZXJhdG9yKSA9PiBpdGVyYXRvci5pc0VtcHR5KCkpKTtcblxuICBpZiAoaXRlcmF0b3IuaXNFbXB0eSgpID09PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogRml4IHRoaXMgb2Zmc2V0LCBzaG91bGQgYmUgYWNjdXJhdGVcbiAgICB2bS5nb3RvKGVsc2VUYXJnZXQgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5lbnRlckxpc3QoaXRlcmF0b3JSZWYsIHJlbGF0aXZlU3RhcnQpO1xuICAgIHZtLnN0YWNrLnB1c2goaXRlcmF0b3IpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXRMaXN0LCAodm0pID0+IHtcbiAgdm0uZXhpdExpc3QoKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSXRlcmF0ZSwgKHZtLCB7IG9wMTogYnJlYWtzIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBpdGVyYXRvciA9IGNoZWNrKHN0YWNrLnBlZWsoKSwgQ2hlY2tJdGVyYXRvcik7XG4gIGxldCBpdGVtID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgdm0ucmVnaXN0ZXJJdGVtKHZtLmVudGVySXRlbShpdGVtKSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZ290byhicmVha3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=