on master help sign in
Rename the change list interpreter from `ChangeList` to `ChangeListInterpreter`
f7a632aNick Fitzgerald
js/change-list.js → js/change-list-interpreter.jsrenamed+54−54
@@ -11,17 +11,17 @@ function string(mem, pointer, length) {
11
11
12const OP_TABLE = [
12const OP_TABLE = [
13 // 0
13 // 0
14− function setText(changeList, mem8, mem32, i) {
14+ function setText(interpreter, mem8, mem32, i) {
15 const pointer = mem32[i++];
15 const pointer = mem32[i++];
16 const length = mem32[i++];
16 const length = mem32[i++];
17 const str = string(mem8, pointer, length);
17 const str = string(mem8, pointer, length);
18− top(changeList.stack).textContent = str;
18+ top(interpreter.stack).textContent = str;
19 return i;
19 return i;
20 },
20 },
21
21
22 // 1
22 // 1
23− function removeSelfAndNextSiblings(changeList, mem8, mem32, i) {
23+ function removeSelfAndNextSiblings(interpreter, mem8, mem32, i) {
24− const node = changeList.stack.pop();
24+ const node = interpreter.stack.pop();
25 let sibling = node.nextSibling;
25 let sibling = node.nextSibling;
26 while (sibling) {
26 while (sibling) {
27 const temp = sibling.nextSibling;
27 const temp = sibling.nextSibling;
@@ -33,21 +33,21 @@ const OP_TABLE = [
33 },
33 },
34
34
35 // 2
35 // 2
36− function replaceWith(changeList, mem8, mem32, i) {
36+ function replaceWith(interpreter, mem8, mem32, i) {
37− const newNode = changeList.stack.pop();
37+ const newNode = interpreter.stack.pop();
38− const oldNode = changeList.stack.pop();
38+ const oldNode = interpreter.stack.pop();
39 oldNode.replaceWith(newNode);
39 oldNode.replaceWith(newNode);
40− changeList.stack.push(newNode);
40+ interpreter.stack.push(newNode);
41 return i;
41 return i;
42 },
42 },
43
43
44 // 3
44 // 3
45− function setAttribute(changeList, mem8, mem32, i) {
45+ function setAttribute(interpreter, mem8, mem32, i) {
46 const nameId = mem32[i++];
46 const nameId = mem32[i++];
47 const valueId = mem32[i++];
47 const valueId = mem32[i++];
48− const name = changeList.getString(nameId);
48+ const name = interpreter.getString(nameId);
49− const value = changeList.getString(valueId);
49+ const value = interpreter.getString(valueId);
50− const node = top(changeList.stack);
50+ const node = top(interpreter.stack);
51 node.setAttribute(name, value);
51 node.setAttribute(name, value);
52
52
53 // Some attributes are "volatile" and don't work through `setAttribute`.
53 // Some attributes are "volatile" and don't work through `setAttribute`.
@@ -65,10 +65,10 @@ const OP_TABLE = [
65 },
65 },
66
66
67 // 4
67 // 4
68− function removeAttribute(changeList, mem8, mem32, i) {
68+ function removeAttribute(interpreter, mem8, mem32, i) {
69 const nameId = mem32[i++];
69 const nameId = mem32[i++];
70− const name = changeList.getString(nameId);
70+ const name = interpreter.getString(nameId);
71− const node = top(changeList.stack);
71+ const node = top(interpreter.stack);
72 node.removeAttribute(name);
72 node.removeAttribute(name);
73
73
74 // Some attributes are "volatile" and don't work through `removeAttribute`.
74 // Some attributes are "volatile" and don't work through `removeAttribute`.
@@ -86,120 +86,120 @@ const OP_TABLE = [
86 },
86 },
87
87
88 // 5
88 // 5
89− function pushFirstChild(changeList, mem8, mem32, i) {
89+ function pushFirstChild(interpreter, mem8, mem32, i) {
90− changeList.stack.push(top(changeList.stack).firstChild);
90+ interpreter.stack.push(top(interpreter.stack).firstChild);
91 return i;
91 return i;
92 },
92 },
93
93
94 // 6
94 // 6
95− function popPushNextSibling(changeList, mem8, mem32, i) {
95+ function popPushNextSibling(interpreter, mem8, mem32, i) {
96− const node = changeList.stack.pop();
96+ const node = interpreter.stack.pop();
97− changeList.stack.push(node.nextSibling);
97+ interpreter.stack.push(node.nextSibling);
98 return i;
98 return i;
99 },
99 },
100
100
101 // 7
101 // 7
102− function pop(changeList, mem8, mem32, i) {
102+ function pop(interpreter, mem8, mem32, i) {
103− changeList.stack.pop();
103+ interpreter.stack.pop();
104 return i;
104 return i;
105 },
105 },
106
106
107 // 8
107 // 8
108− function appendChild(changeList, mem8, mem32, i) {
108+ function appendChild(interpreter, mem8, mem32, i) {
109− const child = changeList.stack.pop();
109+ const child = interpreter.stack.pop();
110− top(changeList.stack).appendChild(child);
110+ top(interpreter.stack).appendChild(child);
111 return i;
111 return i;
112 },
112 },
113
113
114 // 9
114 // 9
115− function createTextNode(changeList, mem8, mem32, i) {
115+ function createTextNode(interpreter, mem8, mem32, i) {
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− changeList.stack.push(document.createTextNode(text));
119+ interpreter.stack.push(document.createTextNode(text));
120 return i;
120 return i;
121 },
121 },
122
122
123 // 10
123 // 10
124− function createElement(changeList, mem8, mem32, i) {
124+ function createElement(interpreter, mem8, mem32, i) {
125 const tagNameId = mem32[i++];
125 const tagNameId = mem32[i++];
126− const tagName = changeList.getString(tagNameId);
126+ const tagName = interpreter.getString(tagNameId);
127− changeList.stack.push(document.createElement(tagName));
127+ interpreter.stack.push(document.createElement(tagName));
128 return i;
128 return i;
129 },
129 },
130
130
131 // 11
131 // 11
132− function newEventListener(changeList, mem8, mem32, i) {
132+ function newEventListener(interpreter, mem8, mem32, i) {
133 const eventId = mem32[i++];
133 const eventId = mem32[i++];
134− const eventType = changeList.getString(eventId);
134+ const eventType = interpreter.getString(eventId);
135 const a = mem32[i++];
135 const a = mem32[i++];
136 const b = mem32[i++];
136 const b = mem32[i++];
137− const el = top(changeList.stack);
137+ const el = top(interpreter.stack);
138− el.addEventListener(eventType, changeList.eventHandler);
138+ el.addEventListener(eventType, interpreter.eventHandler);
139 el[`dodrio-a-${eventType}`] = a;
139 el[`dodrio-a-${eventType}`] = a;
140 el[`dodrio-b-${eventType}`] = b;
140 el[`dodrio-b-${eventType}`] = b;
141 return i;
141 return i;
142 },
142 },
143
143
144 // 12
144 // 12
145− function updateEventListener(changeList, mem8, mem32, i) {
145+ function updateEventListener(interpreter, mem8, mem32, i) {
146 const eventId = mem32[i++];
146 const eventId = mem32[i++];
147− const eventType = changeList.getString(eventId);
147+ const eventType = interpreter.getString(eventId);
148− const el = top(changeList.stack);
148+ const el = top(interpreter.stack);
149 el[`dodrio-a-${eventType}`] = mem32[i++];
149 el[`dodrio-a-${eventType}`] = mem32[i++];
150 el[`dodrio-b-${eventType}`] = mem32[i++];
150 el[`dodrio-b-${eventType}`] = mem32[i++];
151 return i;
151 return i;
152 },
152 },
153
153
154 // 13
154 // 13
155− function removeEventListener(changeList, mem8, mem32, i) {
155+ function removeEventListener(interpreter, mem8, mem32, i) {
156 const eventId = mem32[i++];
156 const eventId = mem32[i++];
157− const eventType = changeList.getString(eventId);
157+ const eventType = interpreter.getString(eventId);
158− const el = top(changeList.stack);
158+ const el = top(interpreter.stack);
159− el.removeEventListener(eventType, changeList.eventHandler);
159+ el.removeEventListener(eventType, interpreter.eventHandler);
160 return i;
160 return i;
161 },
161 },
162
162
163 // 14
163 // 14
164− function addString(changeList, mem8, mem32, i) {
164+ function addString(interpreter, mem8, mem32, i) {
165 const pointer = mem32[i++];
165 const pointer = mem32[i++];
166 const length = mem32[i++];
166 const length = mem32[i++];
167 const id = mem32[i++];
167 const id = mem32[i++];
168 const str = string(mem8, pointer, length);
168 const str = string(mem8, pointer, length);
169− changeList.addString(str, id);
169+ interpreter.addString(str, id);
170 return i;
170 return i;
171 },
171 },
172
172
173 // 15
173 // 15
174− function dropString(changeList, mem8, mem32, i) {
174+ function dropString(interpreter, mem8, mem32, i) {
175 const id = mem32[i++];
175 const id = mem32[i++];
176− changeList.dropString(id);
176+ interpreter.dropString(id);
177 return i;
177 return i;
178 },
178 },
179
179
180 // 16
180 // 16
181− function createElementNS(changeList, mem8, mem32, i) {
181+ function createElementNS(interpreter, mem8, mem32, i) {
182 const tagNameId = mem32[i++];
182 const tagNameId = mem32[i++];
183− const tagName = changeList.getString(tagNameId);
183+ const tagName = interpreter.getString(tagNameId);
184 const nsId = mem32[i++];
184 const nsId = mem32[i++];
185− const ns = changeList.getString(nsId);
185+ const ns = interpreter.getString(nsId);
186− changeList.stack.push(document.createElementNS(ns, tagName));
186+ interpreter.stack.push(document.createElementNS(ns, tagName));
187 return i;
187 return i;
188 },
188 },
189
189
190 // 17
190 // 17
191− function setAttributeNS(changeList, mem8, mem32, i) {
191+ function setAttributeNS(interpreter, mem8, mem32, i) {
192 const nameId = mem32[i++];
192 const nameId = mem32[i++];
193 const valueId = mem32[i++];
193 const valueId = mem32[i++];
194− const name = changeList.getString(nameId);
194+ const name = interpreter.getString(nameId);
195− const value = changeList.getString(valueId);
195+ const value = interpreter.getString(valueId);
196− const node = top(changeList.stack);
196+ const node = top(interpreter.stack);
197 node.setAttributeNS(null, name, value);
197 node.setAttributeNS(null, name, value);
198 return i;
198 return i;
199 }
199 }
200];
200];
201
201
202−export class ChangeList {
202+export class ChangeListInterpreter {
203 constructor(container) {
203 constructor(container) {
204 this.trampoline = null;
204 this.trampoline = null;
205 this.container = container;
205 this.container = container;
js/package-lock.jsondeleted−5
@@ -1,5 +0,0 @@
1−{
2− "name": "dodrio",
3− "version": "0.1.0",
4− "lockfileVersion": 1
5−}
js/package.jsondeleted−11
@@ -1,11 +0,0 @@
1−{
2− "name": "dodrio",
3− "version": "0.1.0",
4− "description": "Dodrio",
5− "main": "dodrio.js",
6− "scripts": {
7− "test": "echo \"Error: no test specified\" && exit 1"
8− },
9− "author": "Nick Fitzgerald <fitzgen@gmail.com>",
10− "license": "MPL-2.0"
11−}
src/change_list.rs+20−20
@@ -7,10 +7,10 @@ pub mod js {
7 cfg_if::cfg_if! {
7 cfg_if::cfg_if! {
8 if #[cfg(all(feature = "xxx-unstable-internal-use-only", not(target_arch = "wasm32")))] {
8 if #[cfg(all(feature = "xxx-unstable-internal-use-only", not(target_arch = "wasm32")))] {
9 #[derive(Clone, Debug)]
9 #[derive(Clone, Debug)]
10− pub struct ChangeList {}
10+ pub struct ChangeListInterpreter {}
11− impl ChangeList {
11+ impl ChangeListInterpreter {
12− pub fn new(_container: &crate::Element) -> ChangeList {
12+ pub fn new(_container: &crate::Element) -> ChangeListInterpreter {
13− ChangeList {}
13+ ChangeListInterpreter {}
14 }
14 }
15 pub fn unmount(&self) {}
15 pub fn unmount(&self) {}
16 pub fn add_change_list_range(&self, _start: usize, _len: usize) {}
16 pub fn add_change_list_range(&self, _start: usize, _len: usize) {}
@@ -19,26 +19,26 @@ pub mod js {
19 } else {
19 } else {
20 use wasm_bindgen::prelude::*;
20 use wasm_bindgen::prelude::*;
21
21
22− #[wasm_bindgen(module = "/js/change-list.js")]
22+ #[wasm_bindgen(module = "/js/change-list-interpreter.js")]
23 extern "C" {
23 extern "C" {
24 #[derive(Clone, Debug)]
24 #[derive(Clone, Debug)]
25− pub type ChangeList;
25+ pub type ChangeListInterpreter;
26
26
27 #[wasm_bindgen(constructor)]
27 #[wasm_bindgen(constructor)]
28− pub fn new(container: &web_sys::Element) -> ChangeList;
28+ pub fn new(container: &web_sys::Element) -> ChangeListInterpreter;
29
29
30 #[wasm_bindgen(structural, method)]
30 #[wasm_bindgen(structural, method)]
31− pub fn unmount(this: &ChangeList);
31+ pub fn unmount(this: &ChangeListInterpreter);
32
32
33 #[wasm_bindgen(structural, method, js_name = addChangeListRange)]
33 #[wasm_bindgen(structural, method, js_name = addChangeListRange)]
34− pub fn add_change_list_range(this: &ChangeList, start: usize, len: usize);
34+ pub fn add_change_list_range(this: &ChangeListInterpreter, start: usize, len: usize);
35
35
36 #[wasm_bindgen(structural, method, js_name = applyChanges)]
36 #[wasm_bindgen(structural, method, js_name = applyChanges)]
37− pub fn apply_changes(this: &ChangeList, memory: JsValue);
37+ pub fn apply_changes(this: &ChangeListInterpreter, memory: JsValue);
38
38
39 #[wasm_bindgen(structural, method, js_name = initEventsTrampoline)]
39 #[wasm_bindgen(structural, method, js_name = initEventsTrampoline)]
40 pub fn init_events_trampoline(
40 pub fn init_events_trampoline(
41− this: &ChangeList,
41+ this: &ChangeListInterpreter,
42 trampoline: &crate::EventsTrampoline,
42 trampoline: &crate::EventsTrampoline,
43 );
43 );
44 }
44 }
@@ -55,14 +55,14 @@ pub(crate) struct ChangeList {
55 bump: Bump,
55 bump: Bump,
56 strings_cache: FxHashMap<String, StringsCacheEntry>,
56 strings_cache: FxHashMap<String, StringsCacheEntry>,
57 next_string_key: u32,
57 next_string_key: u32,
58− js: js::ChangeList,
58+ interpreter: js::ChangeListInterpreter,
59 events_trampoline: Option<crate::EventsTrampoline>,
59 events_trampoline: Option<crate::EventsTrampoline>,
60}
60}
61
61
62impl Drop for ChangeList {
62impl Drop for ChangeList {
63 fn drop(&mut self) {
63 fn drop(&mut self) {
64 debug!("Dropping ChangeList");
64 debug!("Dropping ChangeList");
65− self.js.unmount();
65+ self.interpreter.unmount();
66 }
66 }
67}
67}
68
68
@@ -70,7 +70,7 @@ impl fmt::Debug for ChangeList {
70 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
70 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
71 f.debug_struct("ChangeList")
71 f.debug_struct("ChangeList")
72 .field("bump", &self.bump)
72 .field("bump", &self.bump)
73− .field("js", &self.js)
73+ .field("interpreter", &self.interpreter)
74 .field("events_trampoline", &"..")
74 .field("events_trampoline", &"..")
75 .finish()
75 .finish()
76 }
76 }
@@ -80,19 +80,19 @@ impl ChangeList {
80 pub(crate) fn new(container: &crate::Element) -> ChangeList {
80 pub(crate) fn new(container: &crate::Element) -> ChangeList {
81 let bump = Bump::new();
81 let bump = Bump::new();
82 let strings_cache = FxHashMap::default();
82 let strings_cache = FxHashMap::default();
83− let js = js::ChangeList::new(container);
83+ let interpreter = js::ChangeListInterpreter::new(container);
84 ChangeList {
84 ChangeList {
85 bump,
85 bump,
86 strings_cache,
86 strings_cache,
87 next_string_key: 0,
87 next_string_key: 0,
88− js,
88+ interpreter,
89 events_trampoline: None,
89 events_trampoline: None,
90 }
90 }
91 }
91 }
92
92
93 pub(crate) fn init_events_trampoline(&mut self, trampoline: crate::EventsTrampoline) {
93 pub(crate) fn init_events_trampoline(&mut self, trampoline: crate::EventsTrampoline) {
94 debug_assert!(self.events_trampoline.is_none());
94 debug_assert!(self.events_trampoline.is_none());
95− self.js.init_events_trampoline(&trampoline);
95+ self.interpreter.init_events_trampoline(&trampoline);
96 self.events_trampoline = Some(trampoline);
96 self.events_trampoline = Some(trampoline);
97 }
97 }
98}
98}
@@ -107,13 +107,13 @@ cfg_if::cfg_if! {
107 } else {
107 } else {
108 impl ChangeList {
108 impl ChangeList {
109 pub(crate) fn apply_changes(&mut self) {
109 pub(crate) fn apply_changes(&mut self) {
110− let js = &self.js;
110+ let interpreter = &self.interpreter;
111 unsafe {
111 unsafe {
112 self.bump.each_allocated_chunk(|ch| {
112 self.bump.each_allocated_chunk(|ch| {
113− js.add_change_list_range(ch.as_ptr() as usize, ch.len());
113+ interpreter.add_change_list_range(ch.as_ptr() as usize, ch.len());
114 });
114 });
115 }
115 }
116− js.apply_changes(wasm_bindgen::memory());
116+ interpreter.apply_changes(wasm_bindgen::memory());
117 self.bump.reset();
117 self.bump.reset();
118 }
118 }
119 }
119 }