aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/macros.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/macros.rs')
-rw-r--r--components/script/dom/macros.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs
index a566fee4fb6..0fb51c7d8fd 100644
--- a/components/script/dom/macros.rs
+++ b/components/script/dom/macros.rs
@@ -632,3 +632,33 @@ macro_rules! handle_potential_webgl_error {
handle_potential_webgl_error!($context, $call, ());
};
}
+
+macro_rules! impl_rare_data (
+ ($type:ty) => (
+ fn init_rare_data(&self) {
+ let mut rare_data = self.rare_data.borrow_mut();
+ if rare_data.is_none() {
+ *rare_data = Some(Default::default());
+ }
+ }
+
+ fn rare_data(&self) -> Ref<Option<Box<$type>>> {
+ self.init_rare_data();
+ self.rare_data.borrow()
+ }
+
+ fn rare_data_mut(&self) -> RefMut<Option<Box<$type>>> {
+ self.init_rare_data();
+ self.rare_data.borrow_mut()
+ }
+
+ #[allow(unsafe_code)]
+ fn rare_data_for_layout(&self) -> &Option<Box<$type>> {
+ let mut rare_data = self.rare_data.borrow_mut_for_layout();
+ if rare_data.is_none() {
+ *rare_data = Some(Default::default());
+ }
+ unsafe { self.rare_data.borrow_for_layout() }
+ }
+ );
+);