Get rid of some of our custom additional methods in favor of clonable keywords.

Now that I'm pretty convinced we can auto-generate these and make them fast, we can
ditch the additional complexity.
This commit is contained in:
Bobby Holley 2016-04-19 16:41:38 -07:00
parent 456b05e9cf
commit cc35d4fcce
5 changed files with 36 additions and 27 deletions

View file

@ -7,7 +7,7 @@
<% from data import Method %> <% from data import Method %>
<% data.new_style_struct("Border", inherited=False, gecko_ffi_name="nsStyleBorder", <% data.new_style_struct("Border", inherited=False, gecko_ffi_name="nsStyleBorder",
additional_methods=[Method("border_" + side + "_is_none_or_hidden_and_has_nonzero_width", additional_methods=[Method("border_" + side + "_has_nonzero_width",
"bool") for side in ["top", "right", "bottom", "left"]]) %> "bool") for side in ["top", "right", "bottom", "left"]]) %>
% for side in ["top", "right", "bottom", "left"]: % for side in ["top", "right", "bottom", "left"]:
@ -15,7 +15,7 @@
% endfor % endfor
% for side in ["top", "right", "bottom", "left"]: % for side in ["top", "right", "bottom", "left"]:
${helpers.predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none")} ${helpers.predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none", need_clone=True)}
% endfor % endfor
% for side in ["top", "right", "bottom", "left"]: % for side in ["top", "right", "bottom", "left"]:

View file

@ -9,10 +9,7 @@
<% data.new_style_struct("Box", <% data.new_style_struct("Box",
inherited=False, inherited=False,
gecko_ffi_name="nsStyleDisplay", gecko_ffi_name="nsStyleDisplay",
additional_methods=[Method("is_floated", "bool"), additional_methods=[Method("transition_count", "usize")]) %>
Method("overflow_x_is_visible", "bool"),
Method("overflow_y_is_visible", "bool"),
Method("transition_count", "usize")]) %>
// TODO(SimonSapin): don't parse `inline-table`, since we don't support it // TODO(SimonSapin): don't parse `inline-table`, since we don't support it
<%helpers:longhand name="display" need_clone="True" custom_cascade="${product == 'servo'}"> <%helpers:longhand name="display" need_clone="True" custom_cascade="${product == 'servo'}">
@ -89,7 +86,7 @@
${helpers.single_keyword("position", "static absolute relative fixed", need_clone=True, extra_gecko_values="sticky")} ${helpers.single_keyword("position", "static absolute relative fixed", need_clone=True, extra_gecko_values="sticky")}
<%helpers:single_keyword_computed name="float" values="none left right" gecko_ffi_name="mFloats"> <%helpers:single_keyword_computed name="float" values="none left right" need_clone="True" gecko_ffi_name="mFloats">
impl ToComputedValue for SpecifiedValue { impl ToComputedValue for SpecifiedValue {
type ComputedValue = computed_value::T; type ComputedValue = computed_value::T;

View file

@ -9,12 +9,12 @@
<% data.new_style_struct("Outline", <% data.new_style_struct("Outline",
inherited=False, inherited=False,
gecko_ffi_name="nsStyleOutline", gecko_ffi_name="nsStyleOutline",
additional_methods=[Method("outline_is_none_or_hidden_and_has_nonzero_width", "bool")]) %> additional_methods=[Method("outline_has_nonzero_width", "bool")]) %>
// TODO(pcwalton): `invert` // TODO(pcwalton): `invert`
${helpers.predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")} ${helpers.predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")}
<%helpers:longhand name="outline-style"> <%helpers:longhand name="outline-style" need_clone="True">
pub use values::specified::BorderStyle as SpecifiedValue; pub use values::specified::BorderStyle as SpecifiedValue;
pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none } pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none }
pub mod computed_value { pub mod computed_value {

View file

@ -277,10 +277,11 @@ pub mod longhands {
internal=True)} internal=True)}
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. // FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
${helpers.single_keyword("overflow-x", "visible hidden scroll auto", gecko_constant_prefix="NS_STYLE_OVERFLOW")} ${helpers.single_keyword("overflow-x", "visible hidden scroll auto", need_clone=True,
gecko_constant_prefix="NS_STYLE_OVERFLOW")}
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. // FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
<%helpers:longhand name="overflow-y"> <%helpers:longhand name="overflow-y" need_clone="True">
use super::overflow_x; use super::overflow_x;
use cssparser::ToCss; use cssparser::ToCss;
@ -5719,8 +5720,10 @@ pub mod style_structs {
% endfor % endfor
% if style_struct.trait_name == "Border": % if style_struct.trait_name == "Border":
% for side in ["top", "right", "bottom", "left"]: % for side in ["top", "right", "bottom", "left"]:
fn border_${side}_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { fn clone_border_${side}_style(&self) -> longhands::border_${side}_style::computed_value::T {
self.border_${side}_style.none_or_hidden() && self.border_${side}_style.clone()
}
fn border_${side}_has_nonzero_width(&self) -> bool {
self.border_${side}_width != ::app_units::Au(0) self.border_${side}_width != ::app_units::Au(0)
} }
% endfor % endfor
@ -5731,14 +5734,14 @@ pub mod style_structs {
fn clone_position(&self) -> longhands::position::computed_value::T { fn clone_position(&self) -> longhands::position::computed_value::T {
self.position.clone() self.position.clone()
} }
fn is_floated(&self) -> bool { fn clone_float(&self) -> longhands::float::computed_value::T {
self.float != longhands::float::SpecifiedValue::none self.float.clone()
} }
fn overflow_x_is_visible(&self) -> bool { fn clone_overflow_x(&self) -> longhands::overflow_x::computed_value::T {
self.overflow_x == longhands::overflow_x::computed_value::T::visible self.overflow_x.clone()
} }
fn overflow_y_is_visible(&self) -> bool { fn clone_overflow_y(&self) -> longhands::overflow_y::computed_value::T {
self.overflow_y.0 == longhands::overflow_x::computed_value::T::visible self.overflow_y.clone()
} }
fn transition_count(&self) -> usize { fn transition_count(&self) -> usize {
self.transition_property.0.len() self.transition_property.0.len()
@ -5778,8 +5781,11 @@ pub mod style_structs {
self._servo_text_decorations_in_effect.clone() self._servo_text_decorations_in_effect.clone()
} }
% elif style_struct.trait_name == "Outline": % elif style_struct.trait_name == "Outline":
fn outline_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { fn clone_outline_style(&self) -> longhands::outline_style::computed_value::T {
self.outline_style.none_or_hidden() && self.outline_width != ::app_units::Au(0) self.outline_style.clone()
}
fn outline_has_nonzero_width(&self) -> bool {
self.outline_width != ::app_units::Au(0)
} }
% elif style_struct.trait_name == "Text": % elif style_struct.trait_name == "Text":
fn has_underline(&self) -> bool { fn has_underline(&self) -> bool {
@ -6438,7 +6444,7 @@ pub fn cascade<C: ComputedValues>(
let positioned = matches!(style.get_box().clone_position(), let positioned = matches!(style.get_box().clone_position(),
longhands::position::SpecifiedValue::absolute | longhands::position::SpecifiedValue::absolute |
longhands::position::SpecifiedValue::fixed); longhands::position::SpecifiedValue::fixed);
let floated = style.get_box().is_floated(); let floated = style.get_box().clone_float() != longhands::float::SpecifiedValue::none;
if positioned || floated || is_root_element { if positioned || floated || is_root_element {
use computed_values::display::T; use computed_values::display::T;
@ -6472,7 +6478,8 @@ pub fn cascade<C: ComputedValues>(
{ {
use computed_values::overflow_x::T as overflow; use computed_values::overflow_x::T as overflow;
use computed_values::overflow_y; use computed_values::overflow_y;
match (style.get_box().overflow_x_is_visible(), style.get_box().overflow_y_is_visible()) { match (style.get_box().clone_overflow_x() == longhands::overflow_x::computed_value::T::visible,
style.get_box().clone_overflow_y().0 == longhands::overflow_x::computed_value::T::visible) {
(true, true) => {} (true, true) => {}
(true, _) => { (true, _) => {
style.mutate_box().set_overflow_x(overflow::auto); style.mutate_box().set_overflow_x(overflow::auto);
@ -6487,13 +6494,15 @@ pub fn cascade<C: ComputedValues>(
// The initial value of border-*-width may be changed at computed value time. // The initial value of border-*-width may be changed at computed value time.
% for side in ["top", "right", "bottom", "left"]: % for side in ["top", "right", "bottom", "left"]:
// Like calling to_computed_value, which wouldn't type check. // Like calling to_computed_value, which wouldn't type check.
if style.get_border().border_${side}_is_none_or_hidden_and_has_nonzero_width() { if style.get_border().clone_border_${side}_style().none_or_hidden() &&
style.get_border().border_${side}_has_nonzero_width() {
style.mutate_border().set_border_${side}_width(Au(0)); style.mutate_border().set_border_${side}_width(Au(0));
} }
% endfor % endfor
// The initial value of outline width may be changed at computed value time. // The initial value of outline width may be changed at computed value time.
if style.get_outline().outline_is_none_or_hidden_and_has_nonzero_width() { if style.get_outline().clone_outline_style().none_or_hidden() &&
style.get_outline().outline_has_nonzero_width() {
style.mutate_outline().set_outline_width(Au(0)); style.mutate_outline().set_outline_width(Au(0));
} }

View file

@ -276,7 +276,7 @@ ${caller.body()}
// iteratively implement more and more methods. // iteratively implement more and more methods.
<%self:impl_trait style_struct_name="Border" <%self:impl_trait style_struct_name="Border"
skip_longhands="${['border-left-color', 'border-left-style']}" skip_longhands="${['border-left-color', 'border-left-style']}"
skip_additionals="${['border_bottom_is_none_or_hidden_and_has_nonzero_width']}"> skip_additionals="${['border_bottom_has_nonzero_width']}">
fn set_border_left_color(&mut self, _: longhands::border_left_color::computed_value::T) { fn set_border_left_color(&mut self, _: longhands::border_left_color::computed_value::T) {
unimplemented!() unimplemented!()
} }
@ -289,7 +289,10 @@ ${caller.body()}
fn copy_border_left_style_from(&mut self, _: &Self) { fn copy_border_left_style_from(&mut self, _: &Self) {
unimplemented!() unimplemented!()
} }
fn border_bottom_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { fn clone_border_left_style(&self) -> longhands::border_left_style::computed_value::T {
unimplemented!()
}
fn border_bottom_has_nonzero_width(&self) -> bool {
unimplemented!() unimplemented!()
} }
</%self:impl_trait> </%self:impl_trait>