From c2f8f850bd0a5d9f2564d2cc900fd7e83fe8fbdf Mon Sep 17 00:00:00 2001 From: Michael Wu Date: Mon, 8 Feb 2016 15:56:15 -0500 Subject: [PATCH] Use references to handles while tracing This allows Handles to be moved while tracing. --- src/tree_builder/interface.rs | 2 +- src/tree_builder/mod.rs | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/tree_builder/interface.rs b/src/tree_builder/interface.rs index 2d746c6e..f68cfe56 100644 --- a/src/tree_builder/interface.rs +++ b/src/tree_builder/interface.rs @@ -160,5 +160,5 @@ pub trait Tracer { /// Upon a call to `trace_handles`, the tree builder will call this method /// for each handle in its internal state. - fn trace_handle(&self, node: Self::Handle); + fn trace_handle(&self, node: &Self::Handle); } diff --git a/src/tree_builder/mod.rs b/src/tree_builder/mod.rs index ce3a414b..3c68b1a4 100644 --- a/src/tree_builder/mod.rs +++ b/src/tree_builder/mod.rs @@ -262,19 +262,19 @@ impl TreeBuilder /// Call the `Tracer`'s `trace_handle` method on every `Handle` in the tree builder's /// internal state. This is intended to support garbage-collected DOMs. pub fn trace_handles(&self, tracer: &Tracer) { - tracer.trace_handle(self.doc_handle.clone()); - for e in self.open_elems.iter() { - tracer.trace_handle(e.clone()); + tracer.trace_handle(&self.doc_handle); + for e in &self.open_elems { + tracer.trace_handle(e); } - for e in self.active_formatting.iter() { + for e in &self.active_formatting { match e { - &Element(ref h, _) => tracer.trace_handle(h.clone()), + &Element(ref h, _) => tracer.trace_handle(h), _ => (), } } - self.head_elem.as_ref().map(|h| tracer.trace_handle(h.clone())); - self.form_elem.as_ref().map(|h| tracer.trace_handle(h.clone())); - self.context_elem.as_ref().map(|h| tracer.trace_handle(h.clone())); + self.head_elem.as_ref().map(|h| tracer.trace_handle(h)); + self.form_elem.as_ref().map(|h| tracer.trace_handle(h)); + self.context_elem.as_ref().map(|h| tracer.trace_handle(h)); } #[allow(dead_code)]