UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

47 lines (45 loc) 5.03 kB
import { createIteratorRef, valueForRef } from '@glimmer/reference'; import { APPEND_OPCODES } from '../../opcodes'; import { AssertFilter } from './vm'; APPEND_OPCODES.add(72 /* EnterList */ , (vm, { op1: relativeStart, op2: elseTarget }) => { let stack = vm.stack; let listRef = stack.pop(); let keyRef = stack.pop(); let keyValue = valueForRef(keyRef); let key = keyValue === null ? '@identity' : String(keyValue); let iteratorRef = createIteratorRef(listRef, key); let iterator = valueForRef(iteratorRef); vm.updateWith(new AssertFilter(iteratorRef, iterator => 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 */ , vm => { vm.exitList(); }); APPEND_OPCODES.add(74 /* Iterate */ , (vm, { op1: breaks }) => { let stack = vm.stack; let iterator = stack.peek(); let item = iterator.next(); if (item !== null) { vm.registerItem(vm.enterItem(item)); } else { vm.goto(breaks); } }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvbGlzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxpQkFBVCxFQUE0QixXQUE1QixRQUErQyxvQkFBL0M7QUFDQSxTQUFTLGNBQVQsUUFBK0IsZUFBL0I7QUFJQSxTQUFTLFlBQVQsUUFBNkIsTUFBN0I7QUFFQSxjQUFjLENBQUMsR0FBZixDQUFrQjtBQUFBO0FBQWxCLEVBQWlDLENBQUMsRUFBRCxFQUFLO0FBQUUsRUFBQSxHQUFHLEVBQUUsYUFBUDtBQUFzQixFQUFBLEdBQUcsRUFBRTtBQUEzQixDQUFMLEtBQWdEO0FBQy9FLE1BQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFmO0FBQ0EsTUFBSSxPQUFPLEdBQVMsS0FBSyxDQUFDLEdBQU4sRUFBcEI7QUFDQSxNQUFJLE1BQU0sR0FBUyxLQUFLLENBQUMsR0FBTixFQUFuQjtBQUVBLE1BQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFELENBQTFCO0FBQ0EsTUFBSSxHQUFHLEdBQUcsUUFBUSxLQUFLLElBQWIsR0FBb0IsV0FBcEIsR0FBa0MsTUFBTSxDQUFDLFFBQUQsQ0FBbEQ7QUFFQSxNQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFELEVBQVUsR0FBVixDQUFuQztBQUNBLE1BQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxXQUFELENBQTFCO0FBRUEsRUFBQSxFQUFFLENBQUMsVUFBSCxDQUFjLElBQUksWUFBSixDQUFpQixXQUFqQixFQUErQixRQUFELElBQWMsUUFBUSxDQUFDLE9BQVQsRUFBNUMsQ0FBZDs7QUFFQSxNQUFJLFFBQVEsQ0FBQyxPQUFULE9BQXVCLElBQTNCLEVBQWlDO0FBQy9CO0FBQ0EsSUFBQSxFQUFFLENBQUMsSUFBSCxDQUFRLFVBQVUsR0FBRyxDQUFyQjtBQUNELEdBSEQsTUFHTztBQUNMLElBQUEsRUFBRSxDQUFDLFNBQUgsQ0FBYSxXQUFiLEVBQTBCLGFBQTFCO0FBQ0EsSUFBQSxFQUFFLENBQUMsS0FBSCxDQUFTLElBQVQsQ0FBYyxRQUFkO0FBQ0Q7QUFDRixDQXBCRDtBQXNCQSxjQUFjLENBQUMsR0FBZixDQUFrQjtBQUFBO0FBQWxCLEVBQWlDLEVBQUQsSUFBTztBQUNyQyxFQUFBLEVBQUUsQ0FBQyxRQUFIO0FBQ0QsQ0FGRDtBQUlBLGNBQWMsQ0FBQyxHQUFmLENBQWtCO0FBQUE7QUFBbEIsRUFBK0IsQ0FBQyxFQUFELEVBQUs7QUFBRSxFQUFBLEdBQUcsRUFBRTtBQUFQLENBQUwsS0FBd0I7QUFDckQsTUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQWY7QUFDQSxNQUFJLFFBQVEsR0FBUyxLQUFLLENBQUMsSUFBTixFQUFyQjtBQUNBLE1BQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFULEVBQVg7O0FBRUEsTUFBSSxJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNqQixJQUFBLEVBQUUsQ0FBQyxZQUFILENBQWdCLEVBQUUsQ0FBQyxTQUFILENBQWEsSUFBYixDQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLElBQUEsRUFBRSxDQUFDLElBQUgsQ0FBUSxNQUFSO0FBQ0Q7QUFDRixDQVZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSXRlcmF0b3JSZWYsIHZhbHVlRm9yUmVmIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDaGVja1JlZmVyZW5jZSwgQ2hlY2tJdGVyYXRvciB9IGZyb20gJy4vLWRlYnVnLXN0cmlwJztcbmltcG9ydCB7IGNoZWNrIH0gZnJvbSAnQGdsaW1tZXIvZGVidWcnO1xuaW1wb3J0IHsgT3AgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFzc2VydEZpbHRlciB9IGZyb20gJy4vdm0nO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXJMaXN0LCAodm0sIHsgb3AxOiByZWxhdGl2ZVN0YXJ0LCBvcDI6IGVsc2VUYXJnZXQgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGxpc3RSZWYgPSBjaGVjayhzdGFjay5wb3AoKSwgQ2hlY2tSZWZlcmVuY2UpO1xuICBsZXQga2V5UmVmID0gY2hlY2soc3RhY2sucG9wKCksIENoZWNrUmVmZXJlbmNlKTtcblxuICBsZXQga2V5VmFsdWUgPSB2YWx1ZUZvclJlZihrZXlSZWYpO1xuICBsZXQga2V5ID0ga2V5VmFsdWUgPT09IG51bGwgPyAnQGlkZW50aXR5JyA6IFN0cmluZyhrZXlWYWx1ZSk7XG5cbiAgbGV0IGl0ZXJhdG9yUmVmID0gY3JlYXRlSXRlcmF0b3JSZWYobGlzdFJlZiwga2V5KTtcbiAgbGV0IGl0ZXJhdG9yID0gdmFsdWVGb3JSZWYoaXRlcmF0b3JSZWYpO1xuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydEZpbHRlcihpdGVyYXRvclJlZiwgKGl0ZXJhdG9yKSA9PiBpdGVyYXRvci5pc0VtcHR5KCkpKTtcblxuICBpZiAoaXRlcmF0b3IuaXNFbXB0eSgpID09PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogRml4IHRoaXMgb2Zmc2V0LCBzaG91bGQgYmUgYWNjdXJhdGVcbiAgICB2bS5nb3RvKGVsc2VUYXJnZXQgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5lbnRlckxpc3QoaXRlcmF0b3JSZWYsIHJlbGF0aXZlU3RhcnQpO1xuICAgIHZtLnN0YWNrLnB1c2goaXRlcmF0b3IpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXRMaXN0LCAodm0pID0+IHtcbiAgdm0uZXhpdExpc3QoKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSXRlcmF0ZSwgKHZtLCB7IG9wMTogYnJlYWtzIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBpdGVyYXRvciA9IGNoZWNrKHN0YWNrLnBlZWsoKSwgQ2hlY2tJdGVyYXRvcik7XG4gIGxldCBpdGVtID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgdm0ucmVnaXN0ZXJJdGVtKHZtLmVudGVySXRlbShpdGVtKSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZ290byhicmVha3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=