From 0fe55f01b594a2bd9ade7d85f26d25ce68194449 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Thu, 14 Apr 2016 20:16:56 -0700 Subject: [PATCH 1/5] Alter the semantics of derived_from so that it is [] rather than None when the property is not derived. This simplifies some logic in this patch and going forward. Note that the old code stored the derived_from array as rust idents, but then used the parameter (not rust-ident-ified) to access DERIVED_LONGHANDS. No other consumers actually seem to use the values in derived_from, so we change the representation to the more natural thing. --- components/style/properties.mako.rs | 39 ++++++++++++----------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index ee37412da64..94071314a0c 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -84,10 +84,7 @@ class Longhand(object): self.custom_cascade = custom_cascade self.internal = internal self.gecko_ffi_name = gecko_ffi_name or "m" + self.camel_case - if derived_from is None: - self.derived_from = None - else: - self.derived_from = [ to_rust_ident(name) for name in derived_from ] + self.derived_from = (derived_from or "").split() class Shorthand(object): def __init__(self, name, sub_properties, experimental=False, internal=False): @@ -185,9 +182,6 @@ pub mod longhands { <% if not CONFIG['product'] in products: return "" - if derived_from is not None: - derived_from = derived_from.split() - property = Longhand(name, derived_from=derived_from, keyword=keyword, @@ -200,13 +194,12 @@ pub mod longhands { LONGHANDS.append(property) LONGHANDS_BY_NAME[name] = property - if derived_from is not None: - for name in derived_from: - DERIVED_LONGHANDS.setdefault(name, []).append(property) + for derived in property.derived_from: + DERIVED_LONGHANDS.setdefault(derived, []).append(property) %> pub mod ${property.ident} { #![allow(unused_imports)] - % if derived_from is None: + % if not property.derived_from: use cssparser::Parser; use parser::ParserContext; use properties::{CSSWideKeyword, DeclaredValue, Shorthand}; @@ -238,7 +231,7 @@ pub mod longhands { } _ => panic!("entered the wrong cascade_property() implementation"), }; - % if property.derived_from is None: + % if not property.derived_from: if seen.get_${property.ident}() { return } @@ -287,7 +280,7 @@ pub mod longhands { // Do not allow stylesheets to set derived properties. % endif } - % if derived_from is None: + % if not property.derived_from: pub fn parse_declared(context: &ParserContext, input: &mut Parser) -> Result, ()> { match input.try(CSSWideKeyword::parse) { @@ -330,7 +323,7 @@ pub mod longhands { experimental="${experimental}" internal="${internal}" gecko_ffi_name="${gecko_ffi_name}"> ${caller.body()} - % if derived_from is None: + % if not derived_from: pub fn parse_specified(context: &ParserContext, input: &mut Parser) -> Result, ()> { parse(context, input).map(DeclaredValue::Value) @@ -5803,7 +5796,7 @@ mod property_bit_field { self.storage[bit / 32] |= 1 << (bit % 32) } % for i, property in enumerate(LONGHANDS): - % if property.derived_from is None: + % if not property.derived_from: #[allow(non_snake_case)] #[inline] pub fn get_${property.ident}(&self) -> bool { @@ -5820,7 +5813,7 @@ mod property_bit_field { } % for property in LONGHANDS: - % if property.derived_from is None: + % if not property.derived_from: #[allow(non_snake_case)] fn substitute_variables_${property.ident}( value: &DeclaredValue, @@ -5991,7 +5984,7 @@ fn deduplicate_property_declarations(declarations: Vec) match declaration { % for property in LONGHANDS: PropertyDeclaration::${property.camel_case}(..) => { - % if property.derived_from is None: + % if not property.derived_from: if seen.get_${property.ident}() { continue } @@ -6150,7 +6143,7 @@ impl PropertyDeclaration { match *self { % for property in LONGHANDS: PropertyDeclaration::${property.camel_case}(..) => - % if property.derived_from is None: + % if not property.derived_from: PropertyDeclarationName::Longhand("${property.name}"), % else: PropertyDeclarationName::Internal, @@ -6166,7 +6159,7 @@ impl PropertyDeclaration { match *self { % for property in LONGHANDS: PropertyDeclaration::${property.camel_case} - % if property.derived_from is None: + % if not property.derived_from: (ref value) => value.to_css_string(), % else: (_) => panic!("unsupported property declaration: ${property.name}"), @@ -6215,7 +6208,7 @@ impl PropertyDeclaration { match *self { % for property in LONGHANDS: PropertyDeclaration::${property.camel_case}(..) => - % if property.derived_from is None: + % if not property.derived_from: name.eq_ignore_ascii_case("${property.name}"), % else: false, @@ -6244,7 +6237,7 @@ impl PropertyDeclaration { } match_ignore_ascii_case! { name, % for property in LONGHANDS: - % if property.derived_from is None: + % if not property.derived_from: "${property.name}" => { % if property.internal: if context.stylesheet_origin != Origin::UserAgent { @@ -6857,7 +6850,7 @@ fn cascade_with_cached_declarations( match *declaration { % for style_struct in active_style_structs(): % for property in style_struct.longhands: - % if property.derived_from is None: + % if not property.derived_from: PropertyDeclaration::${property.camel_case}(ref ${'_' if not style_struct.inherited else ''}declared_value) => { @@ -7363,7 +7356,7 @@ macro_rules! css_properties_accessors { ($macro_name: ident) => { $macro_name! { % for property in SHORTHANDS + LONGHANDS: - % if property.derived_from is None and not property.internal: + % if not property.derived_from and not property.internal: % if '-' in property.name: [${property.ident.capitalize()}, Set${property.ident.capitalize()}, "${property.name}"], % endif From f58ff4a4f74c3f0348e2a7d705914184ee61ea60 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Thu, 14 Apr 2016 20:24:56 -0700 Subject: [PATCH 2/5] Make raw_longhand take kwargs. --- components/style/properties.mako.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index 94071314a0c..81c429bb0be 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -176,19 +176,14 @@ pub mod longhands { use parser::ParserContext; use values::specified; - <%def name="raw_longhand(name, keyword=None, derived_from=None, products='gecko,servo', - custom_cascade=False, experimental=False, internal=False, - gecko_ffi_name=None)"> + <%def name="raw_longhand(name, **kwargs)"> <% - if not CONFIG['product'] in products: + products = kwargs.pop("products", "gecko,servo") + if not CONFIG["product"] in products: return "" - property = Longhand(name, - derived_from=derived_from, - keyword=keyword, - custom_cascade=custom_cascade, - experimental=experimental, - internal=internal, - gecko_ffi_name=gecko_ffi_name) + + property = Longhand(name, **kwargs) + property.style_struct = THIS_STYLE_STRUCT THIS_STYLE_STRUCT.longhands.append(property) LONGHANDS.append(property) @@ -268,7 +263,7 @@ pub mod longhands { ); } - % if custom_cascade: + % if property.custom_cascade: cascade_property_custom(declaration, inherited_style, context, From dea08f4ca083dce50d7554d4c8a659f72c1673c0 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Thu, 14 Apr 2016 20:39:50 -0700 Subject: [PATCH 3/5] Make longhand take kwargs. --- components/style/properties.mako.rs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index 81c429bb0be..ec19cc9d15d 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -310,21 +310,16 @@ pub mod longhands { } - <%def name="longhand(name, derived_from=None, keyword=None, products='gecko,servo', - custom_cascade=False, experimental=False, internal=False, - gecko_ffi_name=None)"> - <%self:raw_longhand name="${name}" derived_from="${derived_from}" keyword="${keyword}" - products="${products}" custom_cascade="${custom_cascade}" - experimental="${experimental}" internal="${internal}" - gecko_ffi_name="${gecko_ffi_name}"> + <%def name="longhand(name, **kwargs)"> + <%call expr="raw_longhand(name, **kwargs)"> ${caller.body()} - % if not derived_from: + % if not LONGHANDS_BY_NAME[name].derived_from: pub fn parse_specified(context: &ParserContext, input: &mut Parser) -> Result, ()> { parse(context, input).map(DeclaredValue::Value) } % endif - + <%def name="single_keyword_computed(name, values, products='gecko,servo', From e4a8613f6ddf0609255731c65c61db2a192973e6 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Thu, 14 Apr 2016 20:55:10 -0700 Subject: [PATCH 4/5] Make single_keyword_computed take kwargs. --- components/style/properties.mako.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index ec19cc9d15d..001204ec7c7 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -51,7 +51,7 @@ def to_camel_case(ident): class Keyword(object): def __init__(self, name, values, gecko_constant_prefix=None, - extra_gecko_values=None, extra_servo_values=None): + extra_gecko_values=None, extra_servo_values=None, **kwargs): self.name = name self.values = values self.gecko_constant_prefix = gecko_constant_prefix or "NS_STYLE_" + self.name.upper().replace("-", "_") @@ -74,7 +74,7 @@ class Keyword(object): class Longhand(object): def __init__(self, name, derived_from=None, keyword=None, custom_cascade=False, experimental=False, internal=False, - gecko_ffi_name=None): + gecko_ffi_name=None, **kwargs): self.name = name self.keyword = keyword self.ident = to_rust_ident(name) @@ -322,17 +322,8 @@ pub mod longhands { - <%def name="single_keyword_computed(name, values, products='gecko,servo', - extra_gecko_values=None, extra_servo_values=None, - custom_cascade=False, experimental=False, internal=False, - gecko_constant_prefix=None, gecko_ffi_name=None)"> - <%self:longhand name="${name}" keyword="${Keyword(name, values.split(), - gecko_constant_prefix=gecko_constant_prefix, - extra_gecko_values=extra_gecko_values, - extra_servo_values=extra_servo_values)}" - products="${products}" custom_cascade="${custom_cascade}" - experimental="${experimental}" internal="${internal}", - gecko_ffi_name="${gecko_ffi_name}"> + <%def name="single_keyword_computed(name, values, **kwargs)"> + <%call expr="longhand(name, keyword=Keyword(name, values.split(), **kwargs), **kwargs)"> pub use self::computed_value::T as SpecifiedValue; ${caller.body()} pub mod computed_value { @@ -349,7 +340,7 @@ pub mod longhands { -> Result { computed_value::T::parse(input) } - + <%def name="single_keyword(name, values, products='gecko,servo', From 38d2063a9d4e6c6f9c0bc0e87c0ed0aded27cf8c Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Thu, 14 Apr 2016 20:56:29 -0700 Subject: [PATCH 5/5] Make single_keyword take kwargs. --- components/style/properties.mako.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index 001204ec7c7..4fce2ae4549 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -343,19 +343,11 @@ pub mod longhands { - <%def name="single_keyword(name, values, products='gecko,servo', - experimental=False, internal=False, - gecko_constant_prefix=None, gecko_ffi_name=None)"> - <%self:single_keyword_computed name="${name}" - values="${values}" - products="${products}" - experimental="${experimental}" - internal="${internal}", - gecko_constant_prefix="${gecko_constant_prefix}" - gecko_ffi_name="${gecko_ffi_name}"> + <%def name="single_keyword(name, values, **kwargs)"> + <%call expr="single_keyword_computed(name, values, **kwargs)"> use values::computed::ComputedValueAsSpecified; impl ComputedValueAsSpecified for SpecifiedValue {} - + <%def name="predefined_type(name, type, initial_value, parse_method='parse', products='gecko,servo')">