on master help sign in
Make change list opcode implementations take a `ChangeList` instead of all of its parts
e8b9146Nick Fitzgerald
js/change-list.js+45−45
@@ -11,22 +11,22 @@ function string(mem, pointer, length) {
11
11
12const OP_TABLE = [
12const OP_TABLE = [
13 // 0
13 // 0
14− function setText(stack, eventsTrampoline, listeners, mem8, mem32, i) {
14+ function setText(changeList, mem8, mem32, i) {
15 // console.log("setText");
15 // console.log("setText");
16 const pointer = mem32[i++];
16 const pointer = mem32[i++];
17 const length = mem32[i++];
17 const length = mem32[i++];
18 const str = string(mem8, pointer, length);
18 const str = string(mem8, pointer, length);
19 // console.log(" str =", str);
19 // console.log(" str =", str);
20− // console.log(" top(stack) =", top(stack));
20+ // console.log(" top(changeList.stack) =", top(changeList.stack));
21− top(stack).textContent = str;
21+ top(changeList.stack).textContent = str;
22 return i;
22 return i;
23 },
23 },
24
24
25 // 1
25 // 1
26− function removeSelfAndNextSiblings(stack, eventsTrampoline, listeners, mem8, mem32, i) {
26+ function removeSelfAndNextSiblings(changeList, mem8, mem32, i) {
27 // console.log("removeSelfAndNextSiblings");
27 // console.log("removeSelfAndNextSiblings");
28− const node = stack.pop();
28+ const node = changeList.stack.pop();
29− // console.log(" top(stack) =", node);
29+ // console.log(" top(changeList.stack) =", node);
30 let sibling = node.nextSibling;
30 let sibling = node.nextSibling;
31 while (sibling) {
31 while (sibling) {
32 const temp = sibling.nextSibling;
32 const temp = sibling.nextSibling;
@@ -38,19 +38,19 @@ const OP_TABLE = [
38 },
38 },
39
39
40 // 2
40 // 2
41− function replaceWith(stack, eventsTrampoline, listeners, mem8, mem32, i) {
41+ function replaceWith(changeList, mem8, mem32, i) {
42 // console.log("replaceWith");
42 // console.log("replaceWith");
43− const newNode = stack.pop();
43+ const newNode = changeList.stack.pop();
44 // console.log(" newNode =", newNode);
44 // console.log(" newNode =", newNode);
45− const oldNode = stack.pop();
45+ const oldNode = changeList.stack.pop();
46 // console.log(" oldNode =", oldNode);
46 // console.log(" oldNode =", oldNode);
47 oldNode.replaceWith(newNode);
47 oldNode.replaceWith(newNode);
48− stack.push(newNode);
48+ changeList.stack.push(newNode);
49 return i;
49 return i;
50 },
50 },
51
51
52 // 3
52 // 3
53− function setAttribute(stack, eventsTrampoline, listeners, mem8, mem32, i) {
53+ function setAttribute(changeList, mem8, mem32, i) {
54 // console.log("setAttribute");
54 // console.log("setAttribute");
55 const pointer1 = mem32[i++];
55 const pointer1 = mem32[i++];
56 const length1 = mem32[i++];
56 const length1 = mem32[i++];
@@ -60,101 +60,101 @@ const OP_TABLE = [
60 const length2 = mem32[i++];
60 const length2 = mem32[i++];
61 const value = string(mem8, pointer2, length2);
61 const value = string(mem8, pointer2, length2);
62 // console.log(" value =", value);
62 // console.log(" value =", value);
63− // console.log(" top(stack) =", top(stack));
63+ // console.log(" top(changeList.stack) =", top(changeList.stack));
64− top(stack).setAttribute(name, value);
64+ top(changeList.stack).setAttribute(name, value);
65 return i;
65 return i;
66 },
66 },
67
67
68 // 4
68 // 4
69− function removeAttribute(stack, eventsTrampoline, listeners, mem8, mem32, i) {
69+ function removeAttribute(changeList, mem8, mem32, i) {
70 // console.log("removeAttribute");
70 // console.log("removeAttribute");
71 const pointer = mem32[i++];
71 const pointer = mem32[i++];
72 const length = mem32[i++];
72 const length = mem32[i++];
73 const name = string(mem8, pointer, length);
73 const name = string(mem8, pointer, length);
74 // console.log(" name =", name);
74 // console.log(" name =", name);
75− top(stack).removeAttribute(name);
75+ top(changeList.stack).removeAttribute(name);
76 return i;
76 return i;
77 },
77 },
78
78
79 // 5
79 // 5
80− function pushFirstChild(stack, eventsTrampoline, listeners, mem8, mem32, i) {
80+ function pushFirstChild(changeList, mem8, mem32, i) {
81 // console.log("pushFirstChild");
81 // console.log("pushFirstChild");
82− // console.log(" top(stack) =", top(stack));
82+ // console.log(" top(changeList.stack) =", top(changeList.stack));
83− stack.push(top(stack).firstChild);
83+ changeList.stack.push(top(changeList.stack).firstChild);
84 return i;
84 return i;
85 },
85 },
86
86
87 // 6
87 // 6
88− function popPushNextSibling(stack, eventsTrampoline, listeners, mem8, mem32, i) {
88+ function popPushNextSibling(changeList, mem8, mem32, i) {
89 // console.log("popPushNextSibling");
89 // console.log("popPushNextSibling");
90− // console.log(" top(stack) =", top(stack));
90+ // console.log(" top(changeList.stack) =", top(changeList.stack));
91− const node = stack.pop();
91+ const node = changeList.stack.pop();
92− stack.push(node.nextSibling);
92+ changeList.stack.push(node.nextSibling);
93 return i;
93 return i;
94 },
94 },
95
95
96 // 7
96 // 7
97− function pop(stack, eventsTrampoline, listeners, mem8, mem32, i) {
97+ function pop(changeList, mem8, mem32, i) {
98 // console.log("pop");
98 // console.log("pop");
99− // console.log(" top(stack) =", top(stack));
99+ // console.log(" top(changeList.stack) =", top(changeList.stack));
100− stack.pop();
100+ changeList.stack.pop();
101 return i;
101 return i;
102 },
102 },
103
103
104 // 8
104 // 8
105− function appendChild(stack, eventsTrampoline, listeners, mem8, mem32, i) {
105+ function appendChild(changeList, mem8, mem32, i) {
106 // console.log("appendChild");
106 // console.log("appendChild");
107− // console.log(" top(stack) =", top(stack));
107+ // console.log(" top(changeList.stack) =", top(changeList.stack));
108− const child = stack.pop();
108+ const child = changeList.stack.pop();
109− top(stack).appendChild(child);
109+ top(changeList.stack).appendChild(child);
110 return i;
110 return i;
111 },
111 },
112
112
113 // 9
113 // 9
114− function createTextNode(stack, eventsTrampoline, listeners, mem8, mem32, i) {
114+ function createTextNode(changeList, mem8, mem32, i) {
115 // console.log("appendChild");
115 // console.log("appendChild");
116 const pointer = mem32[i++];
116 const pointer = mem32[i++];
117 const length = mem32[i++];
117 const length = mem32[i++];
118 const text = string(mem8, pointer, length);
118 const text = string(mem8, pointer, length);
119 // console.log(" text =", text);
119 // console.log(" text =", text);
120− // console.log(" top(stack) =", top(stack));
120+ // console.log(" top(changeList.stack) =", top(changeList.stack));
121− stack.push(document.createTextNode(text));
121+ changeList.stack.push(document.createTextNode(text));
122 return i;
122 return i;
123 },
123 },
124
124
125 // 10
125 // 10
126− function createElement(stack, eventsTrampoline, listeners, mem8, mem32, i) {
126+ function createElement(changeList, mem8, mem32, i) {
127 // console.log("createElement");
127 // console.log("createElement");
128 const pointer = mem32[i++];
128 const pointer = mem32[i++];
129 const length = mem32[i++];
129 const length = mem32[i++];
130 const tagName = string(mem8, pointer, length);
130 const tagName = string(mem8, pointer, length);
131 // console.log(" tagName =", tagName);
131 // console.log(" tagName =", tagName);
132− // console.log(" top(stack) =", top(stack));
132+ // console.log(" top(changeList.stack) =", top(changeList.stack));
133− stack.push(document.createElement(tagName));
133+ changeList.stack.push(document.createElement(tagName));
134 return i;
134 return i;
135 },
135 },
136
136
137 // 11
137 // 11
138− function newEventListener(stack, eventsTrampoline, listeners, mem8, mem32, i) {
138+ function newEventListener(changeList, mem8, mem32, i) {
139 const pointer = mem32[i++];
139 const pointer = mem32[i++];
140 const length = mem32[i++];
140 const length = mem32[i++];
141 const eventType = string(mem8, pointer, length);
141 const eventType = string(mem8, pointer, length);
142 const a = mem32[i++];
142 const a = mem32[i++];
143 const b = mem32[i++];
143 const b = mem32[i++];
144− const el = top(stack);
144+ const el = top(changeList.stack);
145− const listener = new Listener(a, b, eventType, eventsTrampoline, el);
145+ const listener = new Listener(a, b, eventType, changeList.eventsTrampoline, el);
146− listeners.add(listener);
146+ changeList.listeners.add(listener);
147 el.addEventListener(eventType, listener.callback);
147 el.addEventListener(eventType, listener.callback);
148 el[`dodrio-${eventType}`] = listener;
148 el[`dodrio-${eventType}`] = listener;
149 return i;
149 return i;
150 },
150 },
151
151
152 // 12
152 // 12
153− function updateEventListener(stack, eventsTrampoline, listeners, mem8, mem32, i) {
153+ function updateEventListener(changeList, mem8, mem32, i) {
154 const pointer = mem32[i++];
154 const pointer = mem32[i++];
155 const length = mem32[i++];
155 const length = mem32[i++];
156 const eventType = string(mem8, pointer, length);
156 const eventType = string(mem8, pointer, length);
157− const el = top(stack);
157+ const el = top(changeList.stack);
158 const listener = el[`dodrio-${eventType}`];
158 const listener = el[`dodrio-${eventType}`];
159 listener.a = mem32[i++];
159 listener.a = mem32[i++];
160 listener.b = mem32[i++];
160 listener.b = mem32[i++];
@@ -162,14 +162,14 @@ const OP_TABLE = [
162 },
162 },
163
163
164 // 13
164 // 13
165− function removeEventListener(stack, eventsTrampoline, listeners, mem8, mem32, i) {
165+ function removeEventListener(changeList, mem8, mem32, i) {
166 const pointer = mem32[i++];
166 const pointer = mem32[i++];
167 const length = mem32[i++];
167 const length = mem32[i++];
168 const eventType = string(mem8, pointer, length);
168 const eventType = string(mem8, pointer, length);
169− const el = top(stack);
169+ const el = top(changeList.stack);
170 const listener = el[`dodrio-${eventType}`];
170 const listener = el[`dodrio-${eventType}`];
171 el.removeEventListener(eventType, listener.callback);
171 el.removeEventListener(eventType, listener.callback);
172− listeners.delete(listener);
172+ changeList.listeners.delete(listener);
173 return i;
173 return i;
174 }
174 }
175];
175];
@@ -250,7 +250,7 @@ class ChangeList {
250 // console.log();
250 // console.log();
251 // console.log(OP_TABLE[op].name);
251 // console.log(OP_TABLE[op].name);
252 // console.log(this.stack);
252 // console.log(this.stack);
253− i = OP_TABLE[op](this.stack, this.eventsTrampoline, this.listeners, mem8, mem32, i);
253+ i = OP_TABLE[op](this, mem8, mem32, i);
254 }
254 }
255 }
255 }
256
256