[librsvg/librsvg-2.50] NodeData.new_element - consume the Attributes, all the way up and down



commit ebe8c264a839eed8b9bad76d4e0ff33b55f60544
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Sep 4 19:27:01 2020 -0500

    NodeData.new_element - consume the Attributes, all the way up and down

 rsvg_internals/src/document.rs  | 2 +-
 rsvg_internals/src/element.rs   | 6 +++---
 rsvg_internals/src/gradient.rs  | 6 ++++--
 rsvg_internals/src/node.rs      | 2 +-
 rsvg_internals/src/pattern.rs   | 2 +-
 rsvg_internals/src/xml.rs       | 8 ++++----
 rsvg_internals/src/xml2_load.rs | 2 +-
 7 files changed, 15 insertions(+), 13 deletions(-)
---
diff --git a/rsvg_internals/src/document.rs b/rsvg_internals/src/document.rs
index 9f3ebda6..1675f2ce 100644
--- a/rsvg_internals/src/document.rs
+++ b/rsvg_internals/src/document.rs
@@ -395,7 +395,7 @@ impl DocumentBuilder {
     pub fn append_element(
         &mut self,
         name: &QualName,
-        attrs: &Attributes,
+        attrs: Attributes,
         parent: Option<Node>,
     ) -> Node {
         let node = Node::new(NodeData::new_element(name, attrs));
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index be886d02..c528963e 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -452,14 +452,14 @@ macro_rules! call_inner {
 }
 
 impl Element {
-    /// Takes an XML element name and a list of attribute/value pairs and creates an [`Element`].
+    /// Takes an XML element name and consumes a list of attribute/value pairs to create an [`Element`].
     ///
     /// This operation does not fail.  Unknown element names simply produce a [`NonRendering`]
     /// element.
     ///
     /// [`Element`]: type.Element.html
     /// [`NonRendering`]: ../structure/struct.NonRendering.html
-    pub fn new(name: &QualName, attrs: &Attributes) -> Element {
+    pub fn new(name: &QualName, attrs: Attributes) -> Element {
         let mut id = None;
         let mut class = None;
 
@@ -499,7 +499,7 @@ impl Element {
 
         let mut element = create_fn(name, id, class);
 
-        if let Err(e) = element.set_attributes(attrs) {
+        if let Err(e) = element.set_attributes(&attrs) {
             element.set_error(e);
         }
 
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 529e4656..64bd5977 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -710,16 +710,18 @@ mod tests {
 
         let node = Node::new(NodeData::new_element(
             &QualName::new(None, ns!(svg), local_name!("linearGradient")),
-            &attrs,
+            attrs,
         ));
 
         let unresolved = borrow_element_as!(node, LinearGradient).get_unresolved(&node);
         let gradient = unresolved.gradient.resolve_from_defaults();
         assert!(gradient.is_resolved());
 
+        let attrs = unsafe { Attributes::new_from_xml2_attributes(0, ptr::null()) };
+
         let node = Node::new(NodeData::new_element(
             &QualName::new(None, ns!(svg), local_name!("radialGradient")),
-            &attrs,
+            attrs,
         ));
 
         let unresolved = borrow_element_as!(node, RadialGradient).get_unresolved(&node);
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index f12c2917..4a811ed6 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -68,7 +68,7 @@ pub enum NodeData {
 }
 
 impl NodeData {
-    pub fn new_element(name: &QualName, attrs: &Attributes) -> NodeData {
+    pub fn new_element(name: &QualName, attrs: Attributes) -> NodeData {
         NodeData::Element(Element::new(name, attrs))
     }
 
diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs
index ad8a1436..e6071e9a 100644
--- a/rsvg_internals/src/pattern.rs
+++ b/rsvg_internals/src/pattern.rs
@@ -429,7 +429,7 @@ mod tests {
 
         let node = Node::new(NodeData::new_element(
             &QualName::new(None, ns!(svg), local_name!("pattern")),
-            &attrs,
+            attrs,
         ));
 
         let unresolved = borrow_element_as!(node, Pattern).get_unresolved(&node);
diff --git a/rsvg_internals/src/xml.rs b/rsvg_internals/src/xml.rs
index 6cbbeea3..a497481e 100644
--- a/rsvg_internals/src/xml.rs
+++ b/rsvg_internals/src/xml.rs
@@ -166,7 +166,7 @@ impl XmlState {
         }
     }
 
-    pub fn start_element(&self, name: QualName, attrs: &Attributes) -> Result<(), ()> {
+    pub fn start_element(&self, name: QualName, attrs: Attributes) -> Result<(), ()> {
         self.check_limits()?;
 
         let context = self.inner.borrow().context();
@@ -312,7 +312,7 @@ impl XmlState {
         }
     }
 
-    fn element_creation_start_element(&self, name: &QualName, attrs: &Attributes) -> Context {
+    fn element_creation_start_element(&self, name: &QualName, attrs: Attributes) -> Context {
         if name.expanded() == xinclude_name!("include") {
             self.xinclude_start_element(name, attrs)
         } else {
@@ -388,7 +388,7 @@ impl XmlState {
         Context::UnsupportedStyleChild
     }
 
-    fn xinclude_start_element(&self, _name: &QualName, attrs: &Attributes) -> Context {
+    fn xinclude_start_element(&self, _name: &QualName, attrs: Attributes) -> Context {
         let mut href = None;
         let mut parse = None;
         let mut encoding = None;
@@ -443,7 +443,7 @@ impl XmlState {
         &self,
         ctx: &XIncludeContext,
         name: &QualName,
-        attrs: &Attributes,
+        attrs: Attributes,
     ) -> Context {
         if ctx.need_fallback {
             if name.expanded() == xinclude_name!("include") {
diff --git a/rsvg_internals/src/xml2_load.rs b/rsvg_internals/src/xml2_load.rs
index aeae2359..771b5e02 100644
--- a/rsvg_internals/src/xml2_load.rs
+++ b/rsvg_internals/src/xml2_load.rs
@@ -216,7 +216,7 @@ unsafe extern "C" fn sax_start_element_ns_cb(
     let nb_attributes = nb_attributes as usize;
     let attrs = Attributes::new_from_xml2_attributes(nb_attributes, attributes as *const *const _);
 
-    if let Err(e) = xml2_parser.state.start_element(qual_name, &attrs) {
+    if let Err(e) = xml2_parser.state.start_element(qual_name, attrs) {
         let _: () = e; // guard in case we change the error type later
 
         let parser = xml2_parser.parser.get();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]