From fb26ae7df5af51d835c860db405cecacf63ffd52 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Thu, 13 Apr 2017 14:10:46 +0800 Subject: [PATCH] stylo: Generate eCSSPropertyID_all as a const rather than an enum value. --- components/style/build_gecko.rs | 21 ++++++++++++++++++++- components/style/properties/gecko.mako.rs | 4 ++-- components/style/properties/helpers.mako.rs | 2 -- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/components/style/build_gecko.rs b/components/style/build_gecko.rs index 07ed6329808..65b323ecb16 100644 --- a/components/style/build_gecko.rs +++ b/components/style/build_gecko.rs @@ -31,6 +31,7 @@ mod common { #[cfg(feature = "bindgen")] mod bindings { use bindgen::{Builder, CodegenConfig}; + use bindgen::chooser::{EnumVariantCustomBehavior, EnumVariantValue, TypeChooser}; use regex::Regex; use std::cmp; use std::collections::HashSet; @@ -258,6 +259,23 @@ mod bindings { .collect() } + #[derive(Debug)] + struct Callbacks; + impl TypeChooser for Callbacks { + fn enum_variant_behavior(&self, + enum_name: Option<&str>, + variant_name: &str, + _variant_value: EnumVariantValue) + -> Option { + if enum_name.map_or(false, |n| n == "nsCSSPropertyID") && + variant_name.starts_with("eCSSProperty_COUNT") { + Some(EnumVariantCustomBehavior::Constify) + } else { + None + } + } + } + pub fn generate_structs(build_type: BuildType) { let mut builder = Builder::get_initial_builder(build_type) .enable_cxx_namespaces() @@ -296,7 +314,8 @@ mod bindings { .hide_type("nsString") .bitfield_enum("nsChangeHint") .bitfield_enum("nsRestyleHint") - .constified_enum("UpdateAnimationsTasks"); + .constified_enum("UpdateAnimationsTasks") + .type_chooser(Box::new(Callbacks)); let whitelist_vars = [ "NS_THEME_.*", "NODE_.*", diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 0bf94e849f6..bff9d838ef5 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -1986,7 +1986,7 @@ fn static_assert() { ${impl_transition_timing_function()} pub fn set_transition_property(&mut self, v: longhands::transition_property::computed_value::T) { - use gecko_bindings::structs::nsCSSPropertyID_eCSSPropertyExtra_no_properties; + use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_no_properties; if !v.0.is_empty() { unsafe { self.gecko.mTransitions.ensure_len(v.0.len()) }; @@ -1997,7 +1997,7 @@ fn static_assert() { } else { // In gecko |none| is represented by eCSSPropertyExtra_no_properties. self.gecko.mTransitionPropertyCount = 1; - self.gecko.mTransitions[0].mProperty = nsCSSPropertyID_eCSSPropertyExtra_no_properties; + self.gecko.mTransitions[0].mProperty = eCSSPropertyExtra_no_properties; } } diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index de6e3424e51..4b6f20e9d7b 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -735,8 +735,6 @@ <%def name="alias_to_nscsspropertyid(alias)"> <% - if alias == "word-wrap": - return "nsCSSPropertyID_eCSSPropertyAlias_WordWrap" return "nsCSSPropertyID::eCSSPropertyAlias_%s" % to_camel_case(alias) %>