aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2014-01-08 16:08:42 +0000
committerSimon Sapin <simon.sapin@exyr.org>2014-01-08 16:08:42 +0000
commit8d8a8ad6e7cc20389eebbf25069ccfa629617c0c (patch)
tree4cc09cd77970d42b7172ca80736cec79307244f3 /src
parent724fd7caaf87048b6188c7bb252c5b18ddf11d8c (diff)
downloadservo-8d8a8ad6e7cc20389eebbf25069ccfa629617c0c.tar.gz
servo-8d8a8ad6e7cc20389eebbf25069ccfa629617c0c.zip
De-duplicate some redundant code with a macro.
Diffstat (limited to 'src')
-rw-r--r--src/components/main/css/matching.rs125
1 files changed, 30 insertions, 95 deletions
diff --git a/src/components/main/css/matching.rs b/src/components/main/css/matching.rs
index 87d91006f20..cace6ffd5f1 100644
--- a/src/components/main/css/matching.rs
+++ b/src/components/main/css/matching.rs
@@ -24,9 +24,6 @@ pub trait MatchMethods {
fn match_node(&self, stylist: &Stylist);
fn match_subtree(&self, stylist: RWArc<Stylist>);
- fn cascade_before_node(&self, parent: Option<LayoutNode>);
- fn cascade_node(&self, parent: Option<LayoutNode>);
- fn cascade_after_node(&self, parent: Option<LayoutNode>);
fn cascade_subtree(&self, parent: Option<LayoutNode>);
}
@@ -102,109 +99,47 @@ impl<'self> MatchMethods for LayoutNode<'self> {
}
}
- fn cascade_before_node(&self, parent: Option<LayoutNode>) {
- let parent_style = match parent {
- Some(ref parent) => Some(parent.style()),
- None => None
- };
-
- let computed_values = unsafe {
- Arc::new(cascade(self.borrow_layout_data_unchecked()
- .as_ref()
- .unwrap()
- .before_applicable_declarations,
- parent_style.map(|parent_style| parent_style.get())))
- };
-
- match *self.mutate_layout_data().ptr {
- None => fail!("no layout data"),
- Some(ref mut layout_data) => {
- let style = &mut layout_data.before_style;
- match *style {
- None => (),
- Some(ref previous_style) => {
- layout_data.restyle_damage =
- Some(incremental::compute_damage(previous_style.get(),
- computed_values.get()).to_int())
- }
- }
- *style = Some(computed_values)
- }
- }
- }
-
- fn cascade_node(&self, parent: Option<LayoutNode>) {
- let parent_style = match parent {
- Some(ref parent) => Some(parent.style()),
- None => None
- };
-
- let computed_values = unsafe {
- Arc::new(cascade(self.borrow_layout_data_unchecked()
- .as_ref()
- .unwrap()
- .applicable_declarations,
- parent_style.map(|parent_style| parent_style.get())))
- };
-
- match *self.mutate_layout_data().ptr {
- None => fail!("no layout data"),
- Some(ref mut layout_data) => {
- let style = &mut layout_data.style;
- match *style {
- None => (),
- Some(ref previous_style) => {
- layout_data.restyle_damage =
- Some(incremental::compute_damage(previous_style.get(),
- computed_values.get()).to_int())
- }
- }
- *style = Some(computed_values)
- }
- }
- }
-
- fn cascade_after_node(&self, parent: Option<LayoutNode>) {
- let parent_style = match parent {
- Some(ref parent) => Some(parent.style()),
- None => None
- };
-
- let computed_values = unsafe {
- Arc::new(cascade(self.borrow_layout_data_unchecked()
- .as_ref()
- .unwrap()
- .after_applicable_declarations,
- parent_style.map(|parent_style| parent_style.get())))
+ fn cascade_subtree(&self, parent: Option<LayoutNode>) {
+ let layout_data = unsafe {
+ self.borrow_layout_data_unchecked().as_ref().unwrap()
};
+ macro_rules! cascade_node(
+ ($applicable_declarations: ident, $style: ident) => {{
+ let parent_style = match parent {
+ Some(ref parent) => Some(parent.style()),
+ None => None
+ };
- match *self.mutate_layout_data().ptr {
- None => fail!("no layout data"),
- Some(ref mut layout_data) => {
- let style = &mut layout_data.after_style;
- match *style {
- None => (),
- Some(ref previous_style) => {
- layout_data.restyle_damage =
- Some(incremental::compute_damage(previous_style.get(),
- computed_values.get()).to_int())
+ let computed_values = Arc::new(cascade(
+ layout_data.$applicable_declarations,
+ parent_style.map(|parent_style| parent_style.get())));
+
+ match *self.mutate_layout_data().ptr {
+ None => fail!("no layout data"),
+ Some(ref mut layout_data) => {
+ let style = &mut layout_data.$style;
+ match *style {
+ None => (),
+ Some(ref previous_style) => {
+ layout_data.restyle_damage = Some(incremental::compute_damage(
+ previous_style.get(), computed_values.get()).to_int())
+ }
+ }
+ *style = Some(computed_values)
}
}
- *style = Some(computed_values)
- }
- }
- }
+ }}
+ );
- fn cascade_subtree(&self, parent: Option<LayoutNode>) {
unsafe {
if self.borrow_layout_data_unchecked().as_ref().unwrap().before_applicable_declarations.len() > 0 {
- self.cascade_before_node(parent);
+ cascade_node!(before_applicable_declarations, before_style);
}
}
- self.cascade_node(parent);
+ cascade_node!(applicable_declarations, style);
unsafe {
if self.borrow_layout_data_unchecked().as_ref().unwrap().after_applicable_declarations.len() > 0 {
- self.cascade_after_node(parent);
+ cascade_node!(after_applicable_declarations, after_style);
}
}