[librsvg: 13/16] ComputedValues::get_value - New function; do all property accesses through this



commit 6676472c134413171b5f0abc5d032df4bf2a9a89
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Mar 25 14:02:32 2020 -0600

    ComputedValues::get_value - New function; do all property accesses through this

 rsvg_internals/src/properties.rs | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)
---
diff --git a/rsvg_internals/src/properties.rs b/rsvg_internals/src/properties.rs
index 3474ae44..e4332102 100644
--- a/rsvg_internals/src/properties.rs
+++ b/rsvg_internals/src/properties.rs
@@ -333,7 +333,11 @@ macro_rules! make_properties {
         impl ComputedValues {
             $(
                 pub fn $long_field(&self) -> $long_name {
-                    self.$long_field.clone()
+                    if let ComputedValue::$long_name(v) = self.get_value(PropertyId::$long_name) {
+                        v
+                    } else {
+                        unreachable!();
+                    }
                 }
             )+
 
@@ -342,6 +346,18 @@ macro_rules! make_properties {
                     $(ComputedValue::$long_name(v) => self.$long_field = v,)+
                 }
             }
+
+            fn get_value(&self, id: PropertyId) -> ComputedValue {
+                assert!(!id.is_shorthand());
+
+                match id {
+                    $(
+                        PropertyId::$long_name =>
+                            ComputedValue::$long_name(self.$long_field.clone()),
+                    )+
+                    _ => unreachable!(),
+                }
+            }
         }
     };
 }
@@ -475,7 +491,9 @@ impl SpecifiedValues {
             ($name:ident, $field:ident) => {
                 let prop_val = self.get_property(PropertyId::$name);
                 if let ParsedProperty::$name(s) = prop_val {
-                    computed.set_value(ComputedValue::$name(s.compute(&computed.$field(), computed)));
+                    computed.set_value(ComputedValue::$name(
+                        s.compute(&computed.$field(), computed),
+                    ));
                 } else {
                     unreachable!();
                 }


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