@@ -267,6 +267,24 @@ enum ChangeDiscriminant {
267 /// dropString(id);
267 /// dropString(id);
269 DropString = 15,
269 DropString = 15,
271+ /// Immediates: `(pointer, length)`
273+ /// Stack: `[...] -> [... Node]`
276+ /// stack.push(createElement(String(pointer, length))
278+ CreateElementNS = 16,
280+ /// Immediates: `(pointer, length)`
282+ /// Stack: `[...] -> [... Node]`
285+ /// stack.push(createElement(String(pointer, length))
287+ SetAttributeNS = 17,
272// Allocation utilities to ensure that we only allocation sequences of `u32`s
290// Allocation utilities to ensure that we only allocation sequences of `u32`s
@@ -361,6 +379,14 @@ impl ChangeList {
361 self.op2(ChangeDiscriminant::SetAttribute, name_id, value_id);
379 self.op2(ChangeDiscriminant::SetAttribute, name_id, value_id);
382+ pub(crate) fn emit_set_attribute_ns(&mut self, name: &str, value: &str, ns: &str) {
383+ debug!("emit_set_attribute_ns({:?}, {:?})", name, value, ns);
384+ let ns_id = self.ensure_string(ns);
385+ let name_id = self.ensure_string(name);
386+ let value_id = self.ensure_string(value);
387+ self.op3(ChangeDiscriminant::SetAttributeNS, name_id, value_id, ns_id);
364 pub(crate) fn emit_remove_attribute(&mut self, name: &str) {
390 pub(crate) fn emit_remove_attribute(&mut self, name: &str) {
365 debug!("emit_remove_attribute({:?})", name);
391 debug!("emit_remove_attribute({:?})", name);
366 let name_id = self.ensure_string(name);
392 let name_id = self.ensure_string(name);
@@ -402,6 +428,13 @@ impl ChangeList {
402 self.op1(ChangeDiscriminant::CreateElement, tag_name_id);
428 self.op1(ChangeDiscriminant::CreateElement, tag_name_id);
431+ pub(crate) fn emit_create_element_ns(&mut self, tag_name: &str, ns: &str) {
432+ debug!("emit_create_element_ns({:?}, {:?})", tag_name, ns);
433+ let tag_name_id = self.ensure_string(tag_name);
434+ let ns_id = self.ensure_string(ns);
435+ self.op2(ChangeDiscriminant::CreateElementNS, tag_name_id, ns_id);
405 pub(crate) fn emit_new_event_listener(&mut self, listener: &Listener) {
438 pub(crate) fn emit_new_event_listener(&mut self, listener: &Listener) {
406 debug!("emit_new_event_listener({:?})", listener);
439 debug!("emit_new_event_listener({:?})", listener);
407 let (a, b) = listener.get_callback_parts();
440 let (a, b) = listener.get_callback_parts();