diff options
Diffstat (limited to 'components/script/dom/macros.rs')
-rw-r--r-- | components/script/dom/macros.rs | 30 |
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() } + } + ); +); |