mirror of
https://github.com/servo/servo.git
synced 2025-07-16 20:03:39 +01:00
style: Make CASCADE_PROPERTY a real static array.
Why wasn't this done before?
This commit is contained in:
parent
d3a1a4ec7d
commit
2faaf952c7
2 changed files with 17 additions and 24 deletions
|
@ -1275,7 +1275,7 @@ pub trait ComputedValues : Debug + Clone + Send + Sync + 'static {
|
||||||
|
|
||||||
fn initial_values() -> &'static Self;
|
fn initial_values() -> &'static Self;
|
||||||
|
|
||||||
fn do_cascade_property<F: FnOnce(&Vec<CascadePropertyFn<Self>>)>(f: F);
|
fn do_cascade_property<F: FnOnce(&[CascadePropertyFn<Self>])>(f: F);
|
||||||
|
|
||||||
% for style_struct in data.active_style_structs():
|
% for style_struct in data.active_style_structs():
|
||||||
fn clone_${style_struct.trait_name_lower}(&self) ->
|
fn clone_${style_struct.trait_name_lower}(&self) ->
|
||||||
|
@ -1346,8 +1346,9 @@ impl ComputedValues for ServoComputedValues {
|
||||||
|
|
||||||
fn initial_values() -> &'static Self { &*INITIAL_SERVO_VALUES }
|
fn initial_values() -> &'static Self { &*INITIAL_SERVO_VALUES }
|
||||||
|
|
||||||
fn do_cascade_property<F: FnOnce(&Vec<CascadePropertyFn<Self>>)>(f: F) {
|
#[inline]
|
||||||
CASCADE_PROPERTY.with(|x| f(x));
|
fn do_cascade_property<F: FnOnce(&[CascadePropertyFn<Self>])>(f: F) {
|
||||||
|
f(&CASCADE_PROPERTY)
|
||||||
}
|
}
|
||||||
|
|
||||||
% for style_struct in data.active_style_structs():
|
% for style_struct in data.active_style_structs():
|
||||||
|
@ -1747,19 +1748,11 @@ pub type CascadePropertyFn<C /*: ComputedValues */> =
|
||||||
cacheable: &mut bool,
|
cacheable: &mut bool,
|
||||||
error_reporter: &mut StdBox<ParseErrorReporter + Send>);
|
error_reporter: &mut StdBox<ParseErrorReporter + Send>);
|
||||||
|
|
||||||
pub fn make_cascade_vec<C: ComputedValues>() -> Vec<CascadePropertyFn<C>> {
|
static CASCADE_PROPERTY: [CascadePropertyFn<ServoComputedValues>; ${len(data.longhands)}] = [
|
||||||
vec![
|
% for property in data.longhands:
|
||||||
% for property in data.longhands:
|
longhands::${property.ident}::cascade_property,
|
||||||
longhands::${property.ident}::cascade_property,
|
% endfor
|
||||||
% endfor
|
];
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is a thread-local rather than a lazy static to avoid atomic operations when cascading
|
|
||||||
// properties.
|
|
||||||
thread_local!(static CASCADE_PROPERTY: Vec<CascadePropertyFn<ServoComputedValues>> = {
|
|
||||||
make_cascade_vec::<ServoComputedValues>()
|
|
||||||
});
|
|
||||||
|
|
||||||
/// Performs the CSS cascade, computing new styles for an element from its parent style and
|
/// Performs the CSS cascade, computing new styles for an element from its parent style and
|
||||||
/// optionally a cached related style. The arguments are:
|
/// optionally a cached related style. The arguments are:
|
||||||
|
|
|
@ -33,7 +33,6 @@ use style::custom_properties::ComputedValuesMap;
|
||||||
use style::logical_geometry::WritingMode;
|
use style::logical_geometry::WritingMode;
|
||||||
use style::properties::{CascadePropertyFn, ServoComputedValues, ComputedValues};
|
use style::properties::{CascadePropertyFn, ServoComputedValues, ComputedValues};
|
||||||
use style::properties::longhands;
|
use style::properties::longhands;
|
||||||
use style::properties::make_cascade_vec;
|
|
||||||
use style::properties::style_struct_traits::*;
|
use style::properties::style_struct_traits::*;
|
||||||
use values::{StyleCoordHelpers, ToGeckoStyleCoord, convert_nscolor_to_rgba};
|
use values::{StyleCoordHelpers, ToGeckoStyleCoord, convert_nscolor_to_rgba};
|
||||||
use values::{convert_rgba_to_nscolor, debug_assert_unit_is_safe_to_copy};
|
use values::{convert_rgba_to_nscolor, debug_assert_unit_is_safe_to_copy};
|
||||||
|
@ -106,8 +105,9 @@ impl ComputedValues for GeckoComputedValues {
|
||||||
|
|
||||||
fn initial_values() -> &'static Self { &*INITIAL_GECKO_VALUES }
|
fn initial_values() -> &'static Self { &*INITIAL_GECKO_VALUES }
|
||||||
|
|
||||||
fn do_cascade_property<F: FnOnce(&Vec<CascadePropertyFn<Self>>)>(f: F) {
|
#[inline]
|
||||||
CASCADE_PROPERTY.with(|x| f(x));
|
fn do_cascade_property<F: FnOnce(&[CascadePropertyFn<Self>])>(f: F) {
|
||||||
|
f(&CASCADE_PROPERTY)
|
||||||
}
|
}
|
||||||
|
|
||||||
% for style_struct in data.style_structs:
|
% for style_struct in data.style_structs:
|
||||||
|
@ -1139,8 +1139,8 @@ lazy_static! {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is a thread-local rather than a lazy static to avoid atomic operations when cascading
|
static CASCADE_PROPERTY: [CascadePropertyFn<GeckoComputedValues>; ${len(data.longhands)}] = [
|
||||||
// properties.
|
% for property in data.longhands:
|
||||||
thread_local!(static CASCADE_PROPERTY: Vec<CascadePropertyFn<GeckoComputedValues>> = {
|
longhands::${property.ident}::cascade_property,
|
||||||
make_cascade_vec::<GeckoComputedValues>()
|
% endfor
|
||||||
});
|
];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue