servo: Merge #11549 - Generate debug and release Gecko bindings (from heycam:release-bindings); r=heycam
authorCameron McCormack <cam@mcc.id.au>
Fri, 03 Jun 2016 01:55:33 -0500
changeset 338997 258b6dd147cf6779fd5230fdcf9a7e34d89868cd
parent 338996 9b818629d468bc2f9afee13a8a05522257d25faf
child 338998 7fd1d00cb1ebe8d7764893799550fffd2d65540d
push id31307
push usergszorc@mozilla.com
push dateSat, 04 Feb 2017 00:59:06 +0000
treeherdermozilla-central@94079d43835f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersheycam
servo: Merge #11549 - Generate debug and release Gecko bindings (from heycam:release-bindings); r=heycam <!-- Please describe your changes on the following line: --> This makes `generate_style_structs.py` generate bindings for both `DEBUG` and non-`DEBUG` Gecko configurations. The corresponding generated bindings are used in geckolib based on `cfg(debug-assertions)`. I regenerated bindings on top of Gecko master plus https://bugzilla.mozilla.org/show_bug.cgi?id=1277154 (landing soon), which tripped up the bindgen due to bitfield layout issues. r? @emilio --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because they are geckolib only <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: 71db2705edbf2381849af0e2edf7743c286881ec
servo/ports/geckolib/gecko_bindings/lib.rs
servo/ports/geckolib/gecko_bindings/structs.rs
servo/ports/geckolib/gecko_bindings/structs_debug.rs
servo/ports/geckolib/gecko_bindings/structs_release.rs
servo/ports/geckolib/gecko_bindings/tools/regen_style_structs.sh
servo/python/tidy/servo_tidy/tidy.py
--- a/servo/ports/geckolib/gecko_bindings/lib.rs
+++ b/servo/ports/geckolib/gecko_bindings/lib.rs
@@ -6,11 +6,19 @@
 #![feature(concat_idents)]
 #![feature(type_macros)]
 
 extern crate heapsize;
 
 #[allow(dead_code, non_camel_case_types)]
 pub mod bindings;
 pub mod ptr;
-pub mod sugar;
+#[cfg(debug_assertions)]
 #[allow(dead_code, non_camel_case_types, non_snake_case, non_upper_case_globals)]
-pub mod structs;
+pub mod structs {
+    include!("structs_debug.rs");
+}
+#[cfg(not(debug_assertions))]
+#[allow(dead_code, non_camel_case_types, non_snake_case, non_upper_case_globals)]
+pub mod structs {
+    include!("structs_release.rs");
+}
+pub mod sugar;
rename from servo/ports/geckolib/gecko_bindings/structs.rs
rename to servo/ports/geckolib/gecko_bindings/structs_debug.rs
--- a/servo/ports/geckolib/gecko_bindings/structs.rs
+++ b/servo/ports/geckolib/gecko_bindings/structs_debug.rs
@@ -2715,16 +2715,20 @@ extern "C" {
     #[link_name = "_ZN25nsTArray_CopyWithMemutils12allowReallocE"]
     pub static nsTArray_CopyWithMemutils_consts_allowRealloc: bool;
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_CopyWithConstructors<ElemType> {
     pub _phantom0: ::std::marker::PhantomData<ElemType>,
 }
+extern "C" {
+    #[link_name = "_ZN29nsTArray_CopyWithConstructors12allowReallocE"]
+    pub static nsTArray_CopyWithConstructors_consts_allowRealloc: bool;
+}
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_CopyChooser<E> {
     pub _phantom0: ::std::marker::PhantomData<E>,
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_TypedBase<E, Derived> {
@@ -2901,17 +2905,16 @@ pub enum gfxContentType {
     SENTINEL = 65535,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct piecewise_construct_t;
 impl ::std::clone::Clone for piecewise_construct_t {
     fn clone(&self) -> Self { *self }
 }
-pub enum tuple { }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct pair<_T1, _T2> {
     pub first: _T1,
     pub second: _T2,
 }
 pub type Float = f32;
 #[repr(i8)]
@@ -3174,22 +3177,16 @@ pub enum SideBits {
 pub struct tuple_size<_Tp> {
     pub _phantom0: ::std::marker::PhantomData<_Tp>,
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct tuple_element<_Tp> {
     pub _phantom0: ::std::marker::PhantomData<_Tp>,
 }
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _Itup_cat<_Itup1, _Itup2> {
-    pub _phantom0: ::std::marker::PhantomData<_Itup1>,
-    pub _phantom1: ::std::marker::PhantomData<_Itup2>,
-}
 pub type nscoord = i32;
 #[repr(C)]
 pub struct nsIntPoint {
     pub _bindgen_opaque_blob: [u32; 2usize],
 }
 #[test]
 fn bindgen_test_layout_nsIntPoint() {
     assert_eq!(::std::mem::size_of::<nsIntPoint>() , 8usize);
@@ -3843,73 +3840,74 @@ pub enum nsCSSProperty {
     eCSSPropertyAlias_MozBorderEndColor = 377,
     eCSSPropertyAlias_MozBorderEndStyle = 378,
     eCSSPropertyAlias_MozBorderEndWidth = 379,
     eCSSPropertyAlias_MozBorderStart = 380,
     eCSSPropertyAlias_MozBorderStartColor = 381,
     eCSSPropertyAlias_MozBorderStartStyle = 382,
     eCSSPropertyAlias_MozBorderStartWidth = 383,
     eCSSPropertyAlias_MozHyphens = 384,
-    eCSSPropertyAlias_WebkitAnimation = 385,
-    eCSSPropertyAlias_WebkitAnimationDelay = 386,
-    eCSSPropertyAlias_WebkitAnimationDirection = 387,
-    eCSSPropertyAlias_WebkitAnimationDuration = 388,
-    eCSSPropertyAlias_WebkitAnimationFillMode = 389,
-    eCSSPropertyAlias_WebkitAnimationIterationCount = 390,
-    eCSSPropertyAlias_WebkitAnimationName = 391,
-    eCSSPropertyAlias_WebkitAnimationPlayState = 392,
-    eCSSPropertyAlias_WebkitAnimationTimingFunction = 393,
-    eCSSPropertyAlias_WebkitFilter = 394,
-    eCSSPropertyAlias_WebkitTextSizeAdjust = 395,
-    eCSSPropertyAlias_WebkitTransform = 396,
-    eCSSPropertyAlias_WebkitTransformOrigin = 397,
-    eCSSPropertyAlias_WebkitTransformStyle = 398,
-    eCSSPropertyAlias_WebkitBackfaceVisibility = 399,
-    eCSSPropertyAlias_WebkitPerspective = 400,
-    eCSSPropertyAlias_WebkitPerspectiveOrigin = 401,
-    eCSSPropertyAlias_WebkitTransition = 402,
-    eCSSPropertyAlias_WebkitTransitionDelay = 403,
-    eCSSPropertyAlias_WebkitTransitionDuration = 404,
-    eCSSPropertyAlias_WebkitTransitionProperty = 405,
-    eCSSPropertyAlias_WebkitTransitionTimingFunction = 406,
-    eCSSPropertyAlias_WebkitBorderRadius = 407,
-    eCSSPropertyAlias_WebkitBorderTopLeftRadius = 408,
-    eCSSPropertyAlias_WebkitBorderTopRightRadius = 409,
-    eCSSPropertyAlias_WebkitBorderBottomLeftRadius = 410,
-    eCSSPropertyAlias_WebkitBorderBottomRightRadius = 411,
-    eCSSPropertyAlias_WebkitBackgroundClip = 412,
-    eCSSPropertyAlias_WebkitBackgroundOrigin = 413,
-    eCSSPropertyAlias_WebkitBackgroundSize = 414,
-    eCSSPropertyAlias_WebkitBorderImage = 415,
-    eCSSPropertyAlias_WebkitBoxShadow = 416,
-    eCSSPropertyAlias_WebkitBoxSizing = 417,
-    eCSSPropertyAlias_WebkitBoxFlex = 418,
-    eCSSPropertyAlias_WebkitBoxOrdinalGroup = 419,
-    eCSSPropertyAlias_WebkitBoxOrient = 420,
-    eCSSPropertyAlias_WebkitBoxDirection = 421,
-    eCSSPropertyAlias_WebkitBoxAlign = 422,
-    eCSSPropertyAlias_WebkitBoxPack = 423,
-    eCSSPropertyAlias_WebkitFlexDirection = 424,
-    eCSSPropertyAlias_WebkitFlexWrap = 425,
-    eCSSPropertyAlias_WebkitFlexFlow = 426,
-    eCSSPropertyAlias_WebkitOrder = 427,
-    eCSSPropertyAlias_WebkitFlex = 428,
-    eCSSPropertyAlias_WebkitFlexGrow = 429,
-    eCSSPropertyAlias_WebkitFlexShrink = 430,
-    eCSSPropertyAlias_WebkitFlexBasis = 431,
-    eCSSPropertyAlias_WebkitJustifyContent = 432,
-    eCSSPropertyAlias_WebkitAlignItems = 433,
-    eCSSPropertyAlias_WebkitAlignSelf = 434,
-    eCSSPropertyAlias_WebkitAlignContent = 435,
-    eCSSPropertyAlias_WebkitUserSelect = 436,
-    eCSSProperty_COUNT_with_aliases = 437,
-    eCSSPropertyExtra_all_properties = 438,
-    eCSSPropertyExtra_x_none_value = 439,
-    eCSSPropertyExtra_x_auto_value = 440,
-    eCSSPropertyExtra_variable = 441,
+    eCSSPropertyAlias_MozTextAlignLast = 385,
+    eCSSPropertyAlias_WebkitAnimation = 386,
+    eCSSPropertyAlias_WebkitAnimationDelay = 387,
+    eCSSPropertyAlias_WebkitAnimationDirection = 388,
+    eCSSPropertyAlias_WebkitAnimationDuration = 389,
+    eCSSPropertyAlias_WebkitAnimationFillMode = 390,
+    eCSSPropertyAlias_WebkitAnimationIterationCount = 391,
+    eCSSPropertyAlias_WebkitAnimationName = 392,
+    eCSSPropertyAlias_WebkitAnimationPlayState = 393,
+    eCSSPropertyAlias_WebkitAnimationTimingFunction = 394,
+    eCSSPropertyAlias_WebkitFilter = 395,
+    eCSSPropertyAlias_WebkitTextSizeAdjust = 396,
+    eCSSPropertyAlias_WebkitTransform = 397,
+    eCSSPropertyAlias_WebkitTransformOrigin = 398,
+    eCSSPropertyAlias_WebkitTransformStyle = 399,
+    eCSSPropertyAlias_WebkitBackfaceVisibility = 400,
+    eCSSPropertyAlias_WebkitPerspective = 401,
+    eCSSPropertyAlias_WebkitPerspectiveOrigin = 402,
+    eCSSPropertyAlias_WebkitTransition = 403,
+    eCSSPropertyAlias_WebkitTransitionDelay = 404,
+    eCSSPropertyAlias_WebkitTransitionDuration = 405,
+    eCSSPropertyAlias_WebkitTransitionProperty = 406,
+    eCSSPropertyAlias_WebkitTransitionTimingFunction = 407,
+    eCSSPropertyAlias_WebkitBorderRadius = 408,
+    eCSSPropertyAlias_WebkitBorderTopLeftRadius = 409,
+    eCSSPropertyAlias_WebkitBorderTopRightRadius = 410,
+    eCSSPropertyAlias_WebkitBorderBottomLeftRadius = 411,
+    eCSSPropertyAlias_WebkitBorderBottomRightRadius = 412,
+    eCSSPropertyAlias_WebkitBackgroundClip = 413,
+    eCSSPropertyAlias_WebkitBackgroundOrigin = 414,
+    eCSSPropertyAlias_WebkitBackgroundSize = 415,
+    eCSSPropertyAlias_WebkitBorderImage = 416,
+    eCSSPropertyAlias_WebkitBoxShadow = 417,
+    eCSSPropertyAlias_WebkitBoxSizing = 418,
+    eCSSPropertyAlias_WebkitBoxFlex = 419,
+    eCSSPropertyAlias_WebkitBoxOrdinalGroup = 420,
+    eCSSPropertyAlias_WebkitBoxOrient = 421,
+    eCSSPropertyAlias_WebkitBoxDirection = 422,
+    eCSSPropertyAlias_WebkitBoxAlign = 423,
+    eCSSPropertyAlias_WebkitBoxPack = 424,
+    eCSSPropertyAlias_WebkitFlexDirection = 425,
+    eCSSPropertyAlias_WebkitFlexWrap = 426,
+    eCSSPropertyAlias_WebkitFlexFlow = 427,
+    eCSSPropertyAlias_WebkitOrder = 428,
+    eCSSPropertyAlias_WebkitFlex = 429,
+    eCSSPropertyAlias_WebkitFlexGrow = 430,
+    eCSSPropertyAlias_WebkitFlexShrink = 431,
+    eCSSPropertyAlias_WebkitFlexBasis = 432,
+    eCSSPropertyAlias_WebkitJustifyContent = 433,
+    eCSSPropertyAlias_WebkitAlignItems = 434,
+    eCSSPropertyAlias_WebkitAlignSelf = 435,
+    eCSSPropertyAlias_WebkitAlignContent = 436,
+    eCSSPropertyAlias_WebkitUserSelect = 437,
+    eCSSProperty_COUNT_with_aliases = 438,
+    eCSSPropertyExtra_all_properties = 439,
+    eCSSPropertyExtra_x_none_value = 440,
+    eCSSPropertyExtra_x_auto_value = 441,
+    eCSSPropertyExtra_variable = 442,
 }
 #[repr(i32)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsCSSFontDesc {
     eCSSFontDesc_UNKNOWN = -1,
     eCSSFontDesc_Family = 0,
     eCSSFontDesc_Style = 1,
     eCSSFontDesc_Weight = 2,
@@ -6090,17 +6088,17 @@ extern "C" {
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsStyleSVGPaintType {
     eStyleSVGPaintType_None = 1,
     eStyleSVGPaintType_Color = 2,
     eStyleSVGPaintType_Server = 3,
     eStyleSVGPaintType_ContextFill = 4,
     eStyleSVGPaintType_ContextStroke = 5,
 }
-#[repr(u32)]
+#[repr(i8)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsStyleSVGOpacitySource {
     eStyleSVGOpacitySource_Normal = 0,
     eStyleSVGOpacitySource_ContextFillOpacity = 1,
     eStyleSVGOpacitySource_ContextStrokeOpacity = 2,
 }
 #[repr(C)]
 #[derive(Debug)]
@@ -6144,70 +6142,47 @@ fn bindgen_test_layout_nsStyleSVGPaint()
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleSVG {
     pub mFill: nsStyleSVGPaint,
     pub mStroke: nsStyleSVGPaint,
     pub mMarkerEnd: nsCOMPtr<nsIURI>,
     pub mMarkerMid: nsCOMPtr<nsIURI>,
     pub mMarkerStart: nsCOMPtr<nsIURI>,
-    pub mStrokeDasharray: *mut nsStyleCoord,
+    pub mStrokeDasharray: nsTArray<nsStyleCoord>,
     pub mStrokeDashoffset: nsStyleCoord,
     pub mStrokeWidth: nsStyleCoord,
     pub mFillOpacity: f32,
     pub mStrokeMiterlimit: f32,
     pub mStrokeOpacity: f32,
-    pub mStrokeDasharrayLength: u32,
     pub mClipRule: u8,
     pub mColorInterpolation: u8,
     pub mColorInterpolationFilters: u8,
     pub mFillRule: u8,
     pub mPaintOrder: u8,
     pub mShapeRendering: u8,
     pub mStrokeLinecap: u8,
     pub mStrokeLinejoin: u8,
     pub mTextAnchor: u8,
-    pub _bitfield_1: u32,
-}
-impl nsStyleSVG {
-    pub fn set_mFillOpacitySource(&mut self, val: u8) {
-        self._bitfield_1 &= !(((1 << (3u32 as u32)) - 1) << 0usize);
-        self._bitfield_1 |= (val as u32) << 0usize;
-    }
-    pub fn set_mStrokeOpacitySource(&mut self, val: u8) {
-        self._bitfield_1 &= !(((1 << (3u32 as u32)) - 1) << 3usize);
-        self._bitfield_1 |= (val as u32) << 3usize;
-    }
-    pub fn set_mStrokeDasharrayFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 6usize);
-        self._bitfield_1 |= (val as u32) << 6usize;
-    }
-    pub fn set_mStrokeDashoffsetFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 7usize);
-        self._bitfield_1 |= (val as u32) << 7usize;
-    }
-    pub fn set_mStrokeWidthFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 8usize);
-        self._bitfield_1 |= (val as u32) << 8usize;
-    }
-    pub const fn new_bitfield_1(mFillOpacitySource: u8,
-                                mStrokeOpacitySource: u8,
-                                mStrokeDasharrayFromObject: bool,
-                                mStrokeDashoffsetFromObject: bool,
-                                mStrokeWidthFromObject: bool) -> u32 {
-        0 | ((mFillOpacitySource as u32) << 0u32) |
-            ((mStrokeOpacitySource as u32) << 3u32) |
-            ((mStrokeDasharrayFromObject as u32) << 6u32) |
-            ((mStrokeDashoffsetFromObject as u32) << 7u32) |
-            ((mStrokeWidthFromObject as u32) << 8u32)
-    }
+    pub mContextFlags: u8,
+}
+#[repr(u32)]
+#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
+pub enum nsStyleSVG_nsStyleStruct_h_unnamed_25 {
+    FILL_OPACITY_SOURCE_MASK = 3,
+    STROKE_OPACITY_SOURCE_MASK = 12,
+    STROKE_DASHARRAY_CONTEXT = 16,
+    STROKE_DASHOFFSET_CONTEXT = 32,
+    STROKE_WIDTH_CONTEXT = 64,
+    FILL_OPACITY_SOURCE_SHIFT = 0,
+    STROKE_OPACITY_SOURCE_SHIFT = 2,
 }
 #[test]
 fn bindgen_test_layout_nsStyleSVG() {
-    assert_eq!(::std::mem::size_of::<nsStyleSVG>() , 128usize);
+    assert_eq!(::std::mem::size_of::<nsStyleSVG>() , 120usize);
     assert_eq!(::std::mem::align_of::<nsStyleSVG>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleBasicShape {
     pub mRefCnt: nsAutoRefCnt,
     pub _mOwningThread: nsAutoOwningThread,
     pub mType: nsStyleBasicShape_Type,
@@ -6228,83 +6203,83 @@ pub enum nsStyleBasicShape_Type {
 fn bindgen_test_layout_nsStyleBasicShape() {
     assert_eq!(::std::mem::size_of::<nsStyleBasicShape>() , 128usize);
     assert_eq!(::std::mem::align_of::<nsStyleBasicShape>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleClipPath {
     pub mType: i32,
-    pub nsStyleClipPath_nsStyleStruct_h_unnamed_25: nsStyleClipPath_nsStyleStruct_h_unnamed_25,
+    pub nsStyleClipPath_nsStyleStruct_h_unnamed_26: nsStyleClipPath_nsStyleStruct_h_unnamed_26,
     pub mSizingBox: u8,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
-pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     pub mBasicShape: __BindgenUnionField<*mut nsStyleBasicShape>,
     pub mURL: __BindgenUnionField<*mut nsIURI>,
     pub _bindgen_data_: u64,
 }
-impl nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+impl nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     pub unsafe fn mBasicShape(&mut self) -> *mut *mut nsStyleBasicShape {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
     pub unsafe fn mURL(&mut self) -> *mut *mut nsIURI {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
 }
-impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     fn clone(&self) -> Self { *self }
 }
 #[test]
-fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_25() {
-    assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_25>()
+fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_26() {
+    assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_26>()
                , 8usize);
-    assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_25>()
+    assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_26>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleClipPath() {
     assert_eq!(::std::mem::size_of::<nsStyleClipPath>() , 24usize);
     assert_eq!(::std::mem::align_of::<nsStyleClipPath>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleFilter {
     pub mType: i32,
     pub mFilterParameter: nsStyleCoord,
-    pub nsStyleFilter_nsStyleStruct_h_unnamed_26: nsStyleFilter_nsStyleStruct_h_unnamed_26,
+    pub nsStyleFilter_nsStyleStruct_h_unnamed_27: nsStyleFilter_nsStyleStruct_h_unnamed_27,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
-pub struct nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+pub struct nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     pub mURL: __BindgenUnionField<*mut nsIURI>,
     pub mDropShadow: __BindgenUnionField<*mut nsCSSShadowArray>,
     pub _bindgen_data_: u64,
 }
-impl nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+impl nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     pub unsafe fn mURL(&mut self) -> *mut *mut nsIURI {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
     pub unsafe fn mDropShadow(&mut self) -> *mut *mut nsCSSShadowArray {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
 }
-impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     fn clone(&self) -> Self { *self }
 }
 #[test]
-fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_26() {
-    assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_26>()
+fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_27() {
+    assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_27>()
                , 8usize);
-    assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_26>()
+    assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_27>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleFilter() {
     assert_eq!(::std::mem::size_of::<nsStyleFilter>() , 32usize);
     assert_eq!(::std::mem::align_of::<nsStyleFilter>() , 8usize);
 }
 #[repr(C)]
copy from servo/ports/geckolib/gecko_bindings/structs.rs
copy to servo/ports/geckolib/gecko_bindings/structs_release.rs
--- a/servo/ports/geckolib/gecko_bindings/structs.rs
+++ b/servo/ports/geckolib/gecko_bindings/structs_release.rs
@@ -2334,17 +2334,18 @@ pub struct nsCOMPtr_base {
 #[test]
 fn bindgen_test_layout_nsCOMPtr_base() {
     assert_eq!(::std::mem::size_of::<nsCOMPtr_base>() , 8usize);
     assert_eq!(::std::mem::align_of::<nsCOMPtr_base>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsCOMPtr<T> {
-    pub mRawPtr: *mut T,
+    pub _base: nsCOMPtr_base,
+    pub _phantom0: ::std::marker::PhantomData<T>,
 }
 /**
  * This class is designed to be used for anonymous temporary objects in the
  * argument list of calls that return COM interface pointers, e.g.,
  *
  *   nsCOMPtr<IFoo> fooP;
  *   ...->QueryInterface(iid, getter_AddRefs(fooP))
  *
@@ -2352,17 +2353,17 @@ pub struct nsCOMPtr<T> {
  *
  * When initialized with a |nsCOMPtr|, as in the example above, it returns
  * a |void**|, a |T**|, or an |nsISupports**| as needed, that the outer call
  * (|QueryInterface| in this case) can fill in.
  *
  * This type should be a nested class inside |nsCOMPtr<T>|.
  */
 #[repr(C)]
-#[derive(Debug)]
+#[derive(Debug, Copy, Clone)]
 pub struct nsGetterAddRefs<T> {
     pub mTargetSmartPtr: *mut nsCOMPtr<T>,
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsAutoPtr<T> {
     pub mRawPtr: *mut T,
 }
@@ -2393,45 +2394,23 @@ impl ::std::clone::Clone for PLDHashEntr
     fn clone(&self) -> Self { *self }
 }
 #[test]
 fn bindgen_test_layout_PLDHashEntryHdr() {
     assert_eq!(::std::mem::size_of::<PLDHashEntryHdr>() , 4usize);
     assert_eq!(::std::mem::align_of::<PLDHashEntryHdr>() , 4usize);
 }
 #[repr(C)]
-#[derive(Debug)]
-pub struct Checker {
-    pub mState: u32,
-    pub mIsWritable: u32,
-}
-#[test]
-fn bindgen_test_layout_Checker() {
-    assert_eq!(::std::mem::size_of::<Checker>() , 8usize);
-    assert_eq!(::std::mem::align_of::<Checker>() , 4usize);
-}
-extern "C" {
-    #[link_name = "_ZN7Checker5kIdleE"]
-    pub static Checker_consts_kIdle: ::std::os::raw::c_uint;
-    #[link_name = "_ZN7Checker6kRead1E"]
-    pub static Checker_consts_kRead1: ::std::os::raw::c_uint;
-    #[link_name = "_ZN7Checker8kReadMaxE"]
-    pub static Checker_consts_kReadMax: ::std::os::raw::c_uint;
-    #[link_name = "_ZN7Checker6kWriteE"]
-    pub static Checker_consts_kWrite: ::std::os::raw::c_uint;
-}
-#[repr(C)]
 pub struct PLDHashTable {
     pub mOps: *const PLDHashTableOps,
     pub mHashShift: i16,
     pub mEntrySize: u32,
     pub mEntryCount: u32,
     pub mRemovedCount: u32,
     pub mEntryStore: [u64; 2usize],
-    pub mChecker: ::std::cell::UnsafeCell<Checker>,
 }
 #[repr(C)]
 pub struct PLDHashTable_EntryStore {
     pub _bindgen_opaque_blob: [u64; 2usize],
 }
 #[test]
 fn bindgen_test_layout_PLDHashTable_EntryStore() {
     assert_eq!(::std::mem::size_of::<PLDHashTable_EntryStore>() , 16usize);
@@ -2453,17 +2432,17 @@ fn bindgen_test_layout_PLDHashTable_Iter
     assert_eq!(::std::mem::size_of::<PLDHashTable_Iterator>() , 48usize);
     assert_eq!(::std::mem::align_of::<PLDHashTable_Iterator>() , 8usize);
 }
 #[repr(u32)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum PLDHashTable_SearchReason { ForSearchOrRemove = 0, ForAdd = 1, }
 #[test]
 fn bindgen_test_layout_PLDHashTable() {
-    assert_eq!(::std::mem::size_of::<PLDHashTable>() , 48usize);
+    assert_eq!(::std::mem::size_of::<PLDHashTable>() , 40usize);
     assert_eq!(::std::mem::align_of::<PLDHashTable>() , 8usize);
 }
 extern "C" {
     #[link_name = "_ZN12PLDHashTable12kMaxCapacityE"]
     pub static PLDHashTable_consts_kMaxCapacity: ::std::os::raw::c_uint;
     #[link_name = "_ZN12PLDHashTable12kMinCapacityE"]
     pub static PLDHashTable_consts_kMinCapacity: ::std::os::raw::c_uint;
     #[link_name = "_ZN12PLDHashTable17kMaxInitialLengthE"]
@@ -2715,16 +2694,20 @@ extern "C" {
     #[link_name = "_ZN25nsTArray_CopyWithMemutils12allowReallocE"]
     pub static nsTArray_CopyWithMemutils_consts_allowRealloc: bool;
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_CopyWithConstructors<ElemType> {
     pub _phantom0: ::std::marker::PhantomData<ElemType>,
 }
+extern "C" {
+    #[link_name = "_ZN29nsTArray_CopyWithConstructors12allowReallocE"]
+    pub static nsTArray_CopyWithConstructors_consts_allowRealloc: bool;
+}
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_CopyChooser<E> {
     pub _phantom0: ::std::marker::PhantomData<E>,
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct nsTArray_TypedBase<E, Derived> {
@@ -2749,17 +2732,17 @@ pub struct ItemComparatorFirstElementGT<
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsTArray<T> {
     pub mBuffer: *mut T,
 }
 pub enum CSSVariableResolver { }
 #[repr(C)]
 pub struct CSSVariableValues {
-    pub mVariableIDs: [u64; 6usize],
+    pub mVariableIDs: [u64; 5usize],
     /**
    * Array of variables, indexed by variable ID.
    */
     pub mVariables: nsTArray<CSSVariableValues_Variable>,
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct CSSVariableValues_Variable {
@@ -2770,17 +2753,17 @@ pub struct CSSVariableValues_Variable {
 }
 #[test]
 fn bindgen_test_layout_CSSVariableValues_Variable() {
     assert_eq!(::std::mem::size_of::<CSSVariableValues_Variable>() , 40usize);
     assert_eq!(::std::mem::align_of::<CSSVariableValues_Variable>() , 8usize);
 }
 #[test]
 fn bindgen_test_layout_CSSVariableValues() {
-    assert_eq!(::std::mem::size_of::<CSSVariableValues>() , 56usize);
+    assert_eq!(::std::mem::size_of::<CSSVariableValues>() , 48usize);
     assert_eq!(::std::mem::align_of::<CSSVariableValues>() , 8usize);
 }
 #[repr(i8)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum SheetType {
     Agent = 0,
     User = 1,
     PresHint = 2,
@@ -2901,17 +2884,16 @@ pub enum gfxContentType {
     SENTINEL = 65535,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct piecewise_construct_t;
 impl ::std::clone::Clone for piecewise_construct_t {
     fn clone(&self) -> Self { *self }
 }
-pub enum tuple { }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct pair<_T1, _T2> {
     pub first: _T1,
     pub second: _T2,
 }
 pub type Float = f32;
 #[repr(i8)]
@@ -3174,22 +3156,16 @@ pub enum SideBits {
 pub struct tuple_size<_Tp> {
     pub _phantom0: ::std::marker::PhantomData<_Tp>,
 }
 #[repr(C)]
 #[derive(Debug, Copy, Clone)]
 pub struct tuple_element<_Tp> {
     pub _phantom0: ::std::marker::PhantomData<_Tp>,
 }
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _Itup_cat<_Itup1, _Itup2> {
-    pub _phantom0: ::std::marker::PhantomData<_Itup1>,
-    pub _phantom1: ::std::marker::PhantomData<_Itup2>,
-}
 pub type nscoord = i32;
 #[repr(C)]
 pub struct nsIntPoint {
     pub _bindgen_opaque_blob: [u32; 2usize],
 }
 #[test]
 fn bindgen_test_layout_nsIntPoint() {
     assert_eq!(::std::mem::size_of::<nsIntPoint>() , 8usize);
@@ -3355,21 +3331,21 @@ pub struct gfxAlternateValue {
 }
 #[test]
 fn bindgen_test_layout_gfxAlternateValue() {
     assert_eq!(::std::mem::size_of::<gfxAlternateValue>() , 24usize);
     assert_eq!(::std::mem::align_of::<gfxAlternateValue>() , 8usize);
 }
 #[repr(C)]
 pub struct gfxFontFeatureValueSet {
-    pub _bindgen_opaque_blob: [u64; 8usize],
+    pub _bindgen_opaque_blob: [u64; 7usize],
 }
 #[test]
 fn bindgen_test_layout_gfxFontFeatureValueSet() {
-    assert_eq!(::std::mem::size_of::<gfxFontFeatureValueSet>() , 64usize);
+    assert_eq!(::std::mem::size_of::<gfxFontFeatureValueSet>() , 56usize);
     assert_eq!(::std::mem::align_of::<gfxFontFeatureValueSet>() , 8usize);
 }
 pub enum gfxFontStyle { }
 pub type nsFontFamilyEnumFunc =
     ::std::option::Option<unsafe extern "C" fn(aFamily: *const nsString,
                                                aGeneric: bool,
                                                aData:
                                                    *mut ::std::os::raw::c_void)
@@ -3843,73 +3819,74 @@ pub enum nsCSSProperty {
     eCSSPropertyAlias_MozBorderEndColor = 377,
     eCSSPropertyAlias_MozBorderEndStyle = 378,
     eCSSPropertyAlias_MozBorderEndWidth = 379,
     eCSSPropertyAlias_MozBorderStart = 380,
     eCSSPropertyAlias_MozBorderStartColor = 381,
     eCSSPropertyAlias_MozBorderStartStyle = 382,
     eCSSPropertyAlias_MozBorderStartWidth = 383,
     eCSSPropertyAlias_MozHyphens = 384,
-    eCSSPropertyAlias_WebkitAnimation = 385,
-    eCSSPropertyAlias_WebkitAnimationDelay = 386,
-    eCSSPropertyAlias_WebkitAnimationDirection = 387,
-    eCSSPropertyAlias_WebkitAnimationDuration = 388,
-    eCSSPropertyAlias_WebkitAnimationFillMode = 389,
-    eCSSPropertyAlias_WebkitAnimationIterationCount = 390,
-    eCSSPropertyAlias_WebkitAnimationName = 391,
-    eCSSPropertyAlias_WebkitAnimationPlayState = 392,
-    eCSSPropertyAlias_WebkitAnimationTimingFunction = 393,
-    eCSSPropertyAlias_WebkitFilter = 394,
-    eCSSPropertyAlias_WebkitTextSizeAdjust = 395,
-    eCSSPropertyAlias_WebkitTransform = 396,
-    eCSSPropertyAlias_WebkitTransformOrigin = 397,
-    eCSSPropertyAlias_WebkitTransformStyle = 398,
-    eCSSPropertyAlias_WebkitBackfaceVisibility = 399,
-    eCSSPropertyAlias_WebkitPerspective = 400,
-    eCSSPropertyAlias_WebkitPerspectiveOrigin = 401,
-    eCSSPropertyAlias_WebkitTransition = 402,
-    eCSSPropertyAlias_WebkitTransitionDelay = 403,
-    eCSSPropertyAlias_WebkitTransitionDuration = 404,
-    eCSSPropertyAlias_WebkitTransitionProperty = 405,
-    eCSSPropertyAlias_WebkitTransitionTimingFunction = 406,
-    eCSSPropertyAlias_WebkitBorderRadius = 407,
-    eCSSPropertyAlias_WebkitBorderTopLeftRadius = 408,
-    eCSSPropertyAlias_WebkitBorderTopRightRadius = 409,
-    eCSSPropertyAlias_WebkitBorderBottomLeftRadius = 410,
-    eCSSPropertyAlias_WebkitBorderBottomRightRadius = 411,
-    eCSSPropertyAlias_WebkitBackgroundClip = 412,
-    eCSSPropertyAlias_WebkitBackgroundOrigin = 413,
-    eCSSPropertyAlias_WebkitBackgroundSize = 414,
-    eCSSPropertyAlias_WebkitBorderImage = 415,
-    eCSSPropertyAlias_WebkitBoxShadow = 416,
-    eCSSPropertyAlias_WebkitBoxSizing = 417,
-    eCSSPropertyAlias_WebkitBoxFlex = 418,
-    eCSSPropertyAlias_WebkitBoxOrdinalGroup = 419,
-    eCSSPropertyAlias_WebkitBoxOrient = 420,
-    eCSSPropertyAlias_WebkitBoxDirection = 421,
-    eCSSPropertyAlias_WebkitBoxAlign = 422,
-    eCSSPropertyAlias_WebkitBoxPack = 423,
-    eCSSPropertyAlias_WebkitFlexDirection = 424,
-    eCSSPropertyAlias_WebkitFlexWrap = 425,
-    eCSSPropertyAlias_WebkitFlexFlow = 426,
-    eCSSPropertyAlias_WebkitOrder = 427,
-    eCSSPropertyAlias_WebkitFlex = 428,
-    eCSSPropertyAlias_WebkitFlexGrow = 429,
-    eCSSPropertyAlias_WebkitFlexShrink = 430,
-    eCSSPropertyAlias_WebkitFlexBasis = 431,
-    eCSSPropertyAlias_WebkitJustifyContent = 432,
-    eCSSPropertyAlias_WebkitAlignItems = 433,
-    eCSSPropertyAlias_WebkitAlignSelf = 434,
-    eCSSPropertyAlias_WebkitAlignContent = 435,
-    eCSSPropertyAlias_WebkitUserSelect = 436,
-    eCSSProperty_COUNT_with_aliases = 437,
-    eCSSPropertyExtra_all_properties = 438,
-    eCSSPropertyExtra_x_none_value = 439,
-    eCSSPropertyExtra_x_auto_value = 440,
-    eCSSPropertyExtra_variable = 441,
+    eCSSPropertyAlias_MozTextAlignLast = 385,
+    eCSSPropertyAlias_WebkitAnimation = 386,
+    eCSSPropertyAlias_WebkitAnimationDelay = 387,
+    eCSSPropertyAlias_WebkitAnimationDirection = 388,
+    eCSSPropertyAlias_WebkitAnimationDuration = 389,
+    eCSSPropertyAlias_WebkitAnimationFillMode = 390,
+    eCSSPropertyAlias_WebkitAnimationIterationCount = 391,
+    eCSSPropertyAlias_WebkitAnimationName = 392,
+    eCSSPropertyAlias_WebkitAnimationPlayState = 393,
+    eCSSPropertyAlias_WebkitAnimationTimingFunction = 394,
+    eCSSPropertyAlias_WebkitFilter = 395,
+    eCSSPropertyAlias_WebkitTextSizeAdjust = 396,
+    eCSSPropertyAlias_WebkitTransform = 397,
+    eCSSPropertyAlias_WebkitTransformOrigin = 398,
+    eCSSPropertyAlias_WebkitTransformStyle = 399,
+    eCSSPropertyAlias_WebkitBackfaceVisibility = 400,
+    eCSSPropertyAlias_WebkitPerspective = 401,
+    eCSSPropertyAlias_WebkitPerspectiveOrigin = 402,
+    eCSSPropertyAlias_WebkitTransition = 403,
+    eCSSPropertyAlias_WebkitTransitionDelay = 404,
+    eCSSPropertyAlias_WebkitTransitionDuration = 405,
+    eCSSPropertyAlias_WebkitTransitionProperty = 406,
+    eCSSPropertyAlias_WebkitTransitionTimingFunction = 407,
+    eCSSPropertyAlias_WebkitBorderRadius = 408,
+    eCSSPropertyAlias_WebkitBorderTopLeftRadius = 409,
+    eCSSPropertyAlias_WebkitBorderTopRightRadius = 410,
+    eCSSPropertyAlias_WebkitBorderBottomLeftRadius = 411,
+    eCSSPropertyAlias_WebkitBorderBottomRightRadius = 412,
+    eCSSPropertyAlias_WebkitBackgroundClip = 413,
+    eCSSPropertyAlias_WebkitBackgroundOrigin = 414,
+    eCSSPropertyAlias_WebkitBackgroundSize = 415,
+    eCSSPropertyAlias_WebkitBorderImage = 416,
+    eCSSPropertyAlias_WebkitBoxShadow = 417,
+    eCSSPropertyAlias_WebkitBoxSizing = 418,
+    eCSSPropertyAlias_WebkitBoxFlex = 419,
+    eCSSPropertyAlias_WebkitBoxOrdinalGroup = 420,
+    eCSSPropertyAlias_WebkitBoxOrient = 421,
+    eCSSPropertyAlias_WebkitBoxDirection = 422,
+    eCSSPropertyAlias_WebkitBoxAlign = 423,
+    eCSSPropertyAlias_WebkitBoxPack = 424,
+    eCSSPropertyAlias_WebkitFlexDirection = 425,
+    eCSSPropertyAlias_WebkitFlexWrap = 426,
+    eCSSPropertyAlias_WebkitFlexFlow = 427,
+    eCSSPropertyAlias_WebkitOrder = 428,
+    eCSSPropertyAlias_WebkitFlex = 429,
+    eCSSPropertyAlias_WebkitFlexGrow = 430,
+    eCSSPropertyAlias_WebkitFlexShrink = 431,
+    eCSSPropertyAlias_WebkitFlexBasis = 432,
+    eCSSPropertyAlias_WebkitJustifyContent = 433,
+    eCSSPropertyAlias_WebkitAlignItems = 434,
+    eCSSPropertyAlias_WebkitAlignSelf = 435,
+    eCSSPropertyAlias_WebkitAlignContent = 436,
+    eCSSPropertyAlias_WebkitUserSelect = 437,
+    eCSSProperty_COUNT_with_aliases = 438,
+    eCSSPropertyExtra_all_properties = 439,
+    eCSSPropertyExtra_x_none_value = 440,
+    eCSSPropertyExtra_x_auto_value = 441,
+    eCSSPropertyExtra_variable = 442,
 }
 #[repr(i32)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsCSSFontDesc {
     eCSSFontDesc_UNKNOWN = -1,
     eCSSFontDesc_Family = 0,
     eCSSFontDesc_Style = 1,
     eCSSFontDesc_Weight = 2,
@@ -4042,21 +4019,21 @@ pub struct URLValue {
 }
 #[test]
 fn bindgen_test_layout_URLValue() {
     assert_eq!(::std::mem::size_of::<URLValue>() , 48usize);
     assert_eq!(::std::mem::align_of::<URLValue>() , 8usize);
 }
 #[repr(C)]
 pub struct ImageValue {
-    pub _bindgen_opaque_blob: [u64; 13usize],
+    pub _bindgen_opaque_blob: [u64; 12usize],
 }
 #[test]
 fn bindgen_test_layout_ImageValue() {
-    assert_eq!(::std::mem::size_of::<ImageValue>() , 104usize);
+    assert_eq!(::std::mem::size_of::<ImageValue>() , 96usize);
     assert_eq!(::std::mem::align_of::<ImageValue>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct GridNamedArea {
     pub mName: nsString,
     pub mColumnStart: u32,
     pub mColumnEnd: u32,
@@ -4584,21 +4561,21 @@ pub struct _vftable_AnonymousCounterStyl
 }
 #[test]
 fn bindgen_test_layout_AnonymousCounterStyle() {
     assert_eq!(::std::mem::size_of::<AnonymousCounterStyle>() , 48usize);
     assert_eq!(::std::mem::align_of::<AnonymousCounterStyle>() , 8usize);
 }
 #[repr(C)]
 pub struct CounterStyleManager {
-    pub _bindgen_opaque_blob: [u64; 9usize],
+    pub _bindgen_opaque_blob: [u64; 8usize],
 }
 #[test]
 fn bindgen_test_layout_CounterStyleManager() {
-    assert_eq!(::std::mem::size_of::<CounterStyleManager>() , 72usize);
+    assert_eq!(::std::mem::size_of::<CounterStyleManager>() , 64usize);
     assert_eq!(::std::mem::align_of::<CounterStyleManager>() , 8usize);
 }
 /**
  * Enum defining the mode in which a sheet is to be parsed.  This is
  * usually, but not always, the same as the cascade level at which the
  * sheet will apply (see nsStyleSet.h).  Most of the Loader APIs only
  * support loading of author sheets.
  *
@@ -5107,17 +5084,16 @@ pub enum nsStyleImageType {
  * image of type (1)).
  */
 #[repr(C)]
 pub struct nsStyleImage {
     pub mSubImages: u64,
     pub mType: nsStyleImageType,
     pub nsStyleImage_nsStyleStruct_h_unnamed_18: nsStyleImage_nsStyleStruct_h_unnamed_18,
     pub mCropRect: nsAutoPtr<nsStyleSides>,
-    pub mImageTracked: bool,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct nsStyleImage_nsStyleStruct_h_unnamed_18 {
     pub mImage: __BindgenUnionField<*mut imgRequestProxy>,
     pub mGradient: __BindgenUnionField<*mut nsStyleGradient>,
     pub mElementId: __BindgenUnionField<*mut ::std::os::raw::c_ushort>,
     pub _bindgen_data_: u64,
@@ -5144,17 +5120,17 @@ impl ::std::clone::Clone for nsStyleImag
 fn bindgen_test_layout_nsStyleImage_nsStyleStruct_h_unnamed_18() {
     assert_eq!(::std::mem::size_of::<nsStyleImage_nsStyleStruct_h_unnamed_18>()
                , 8usize);
     assert_eq!(::std::mem::align_of::<nsStyleImage_nsStyleStruct_h_unnamed_18>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleImage() {
-    assert_eq!(::std::mem::size_of::<nsStyleImage>() , 40usize);
+    assert_eq!(::std::mem::size_of::<nsStyleImage>() , 32usize);
     assert_eq!(::std::mem::align_of::<nsStyleImage>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleColor {
     pub mColor: nscolor,
 }
 #[test]
@@ -5289,22 +5265,22 @@ pub struct nsStyleImageLayers_Layer {
     pub mAttachment: u8,
     pub mBlendMode: u8,
     pub mComposite: u8,
     pub mMaskMode: u8,
     pub mRepeat: nsStyleImageLayers_Repeat,
 }
 #[test]
 fn bindgen_test_layout_nsStyleImageLayers_Layer() {
-    assert_eq!(::std::mem::size_of::<nsStyleImageLayers_Layer>() , 112usize);
+    assert_eq!(::std::mem::size_of::<nsStyleImageLayers_Layer>() , 104usize);
     assert_eq!(::std::mem::align_of::<nsStyleImageLayers_Layer>() , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleImageLayers() {
-    assert_eq!(::std::mem::size_of::<nsStyleImageLayers>() , 168usize);
+    assert_eq!(::std::mem::size_of::<nsStyleImageLayers>() , 160usize);
     assert_eq!(::std::mem::align_of::<nsStyleImageLayers>() , 8usize);
 }
 extern "C" {
     #[link_name = "_ZN18nsStyleImageLayers21kBackgroundLayerTableE"]
     pub static mut nsStyleImageLayers_consts_kBackgroundLayerTable:
                *const nsCSSProperty;
     #[link_name = "_ZN18nsStyleImageLayers15kMaskLayerTableE"]
     pub static mut nsStyleImageLayers_consts_kMaskLayerTable:
@@ -5312,17 +5288,17 @@ extern "C" {
 }
 #[repr(C)]
 pub struct nsStyleBackground {
     pub mImage: nsStyleImageLayers,
     pub mBackgroundColor: nscolor,
 }
 #[test]
 fn bindgen_test_layout_nsStyleBackground() {
-    assert_eq!(::std::mem::size_of::<nsStyleBackground>() , 176usize);
+    assert_eq!(::std::mem::size_of::<nsStyleBackground>() , 168usize);
     assert_eq!(::std::mem::align_of::<nsStyleBackground>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleMargin {
     pub mMargin: nsStyleSides,
 }
 #[test]
@@ -5396,17 +5372,17 @@ pub struct nsStyleBorder {
     pub mComputedBorder: nsMargin,
     pub mBorder: nsMargin,
     pub mBorderStyle: [u8; 4usize],
     pub mBorderColor: [nscolor; 4usize],
     pub mTwipsPerPixel: nscoord,
 }
 #[test]
 fn bindgen_test_layout_nsStyleBorder() {
-    assert_eq!(::std::mem::size_of::<nsStyleBorder>() , 304usize);
+    assert_eq!(::std::mem::size_of::<nsStyleBorder>() , 296usize);
     assert_eq!(::std::mem::align_of::<nsStyleBorder>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleOutline {
     pub mOutlineRadius: nsStyleCorners,
     pub mOutlineWidth: nsStyleCoord,
     pub mOutlineOffset: nscoord,
@@ -5935,17 +5911,16 @@ pub enum nsStyleContentType {
     eStyleContentType_AltContent = 50,
     eStyleContentType_Uninitialized = 51,
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleContentData {
     pub mType: nsStyleContentType,
     pub mContent: nsStyleContentData_nsStyleStruct_h_unnamed_23,
-    pub mImageTracked: bool,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
 pub struct nsStyleContentData_nsStyleStruct_h_unnamed_23 {
     pub mString: __BindgenUnionField<*mut ::std::os::raw::c_ushort>,
     pub mImage: __BindgenUnionField<*mut imgRequestProxy>,
     pub mCounters: __BindgenUnionField<*mut Array>,
     pub _bindgen_data_: u64,
@@ -5971,17 +5946,17 @@ impl ::std::clone::Clone for nsStyleCont
 fn bindgen_test_layout_nsStyleContentData_nsStyleStruct_h_unnamed_23() {
     assert_eq!(::std::mem::size_of::<nsStyleContentData_nsStyleStruct_h_unnamed_23>()
                , 8usize);
     assert_eq!(::std::mem::align_of::<nsStyleContentData_nsStyleStruct_h_unnamed_23>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleContentData() {
-    assert_eq!(::std::mem::size_of::<nsStyleContentData>() , 24usize);
+    assert_eq!(::std::mem::size_of::<nsStyleContentData>() , 16usize);
     assert_eq!(::std::mem::align_of::<nsStyleContentData>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleCounterData {
     pub mCounter: nsString,
     pub mValue: i32,
 }
@@ -6090,17 +6065,17 @@ extern "C" {
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsStyleSVGPaintType {
     eStyleSVGPaintType_None = 1,
     eStyleSVGPaintType_Color = 2,
     eStyleSVGPaintType_Server = 3,
     eStyleSVGPaintType_ContextFill = 4,
     eStyleSVGPaintType_ContextStroke = 5,
 }
-#[repr(u32)]
+#[repr(i8)]
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
 pub enum nsStyleSVGOpacitySource {
     eStyleSVGOpacitySource_Normal = 0,
     eStyleSVGOpacitySource_ContextFillOpacity = 1,
     eStyleSVGOpacitySource_ContextStrokeOpacity = 2,
 }
 #[repr(C)]
 #[derive(Debug)]
@@ -6144,70 +6119,47 @@ fn bindgen_test_layout_nsStyleSVGPaint()
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleSVG {
     pub mFill: nsStyleSVGPaint,
     pub mStroke: nsStyleSVGPaint,
     pub mMarkerEnd: nsCOMPtr<nsIURI>,
     pub mMarkerMid: nsCOMPtr<nsIURI>,
     pub mMarkerStart: nsCOMPtr<nsIURI>,
-    pub mStrokeDasharray: *mut nsStyleCoord,
+    pub mStrokeDasharray: nsTArray<nsStyleCoord>,
     pub mStrokeDashoffset: nsStyleCoord,
     pub mStrokeWidth: nsStyleCoord,
     pub mFillOpacity: f32,
     pub mStrokeMiterlimit: f32,
     pub mStrokeOpacity: f32,
-    pub mStrokeDasharrayLength: u32,
     pub mClipRule: u8,
     pub mColorInterpolation: u8,
     pub mColorInterpolationFilters: u8,
     pub mFillRule: u8,
     pub mPaintOrder: u8,
     pub mShapeRendering: u8,
     pub mStrokeLinecap: u8,
     pub mStrokeLinejoin: u8,
     pub mTextAnchor: u8,
-    pub _bitfield_1: u32,
-}
-impl nsStyleSVG {
-    pub fn set_mFillOpacitySource(&mut self, val: u8) {
-        self._bitfield_1 &= !(((1 << (3u32 as u32)) - 1) << 0usize);
-        self._bitfield_1 |= (val as u32) << 0usize;
-    }
-    pub fn set_mStrokeOpacitySource(&mut self, val: u8) {
-        self._bitfield_1 &= !(((1 << (3u32 as u32)) - 1) << 3usize);
-        self._bitfield_1 |= (val as u32) << 3usize;
-    }
-    pub fn set_mStrokeDasharrayFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 6usize);
-        self._bitfield_1 |= (val as u32) << 6usize;
-    }
-    pub fn set_mStrokeDashoffsetFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 7usize);
-        self._bitfield_1 |= (val as u32) << 7usize;
-    }
-    pub fn set_mStrokeWidthFromObject(&mut self, val: bool) {
-        self._bitfield_1 &= !(((1 << (1u32 as u32)) - 1) << 8usize);
-        self._bitfield_1 |= (val as u32) << 8usize;
-    }
-    pub const fn new_bitfield_1(mFillOpacitySource: u8,
-                                mStrokeOpacitySource: u8,
-                                mStrokeDasharrayFromObject: bool,
-                                mStrokeDashoffsetFromObject: bool,
-                                mStrokeWidthFromObject: bool) -> u32 {
-        0 | ((mFillOpacitySource as u32) << 0u32) |
-            ((mStrokeOpacitySource as u32) << 3u32) |
-            ((mStrokeDasharrayFromObject as u32) << 6u32) |
-            ((mStrokeDashoffsetFromObject as u32) << 7u32) |
-            ((mStrokeWidthFromObject as u32) << 8u32)
-    }
+    pub mContextFlags: u8,
+}
+#[repr(u32)]
+#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
+pub enum nsStyleSVG_nsStyleStruct_h_unnamed_25 {
+    FILL_OPACITY_SOURCE_MASK = 3,
+    STROKE_OPACITY_SOURCE_MASK = 12,
+    STROKE_DASHARRAY_CONTEXT = 16,
+    STROKE_DASHOFFSET_CONTEXT = 32,
+    STROKE_WIDTH_CONTEXT = 64,
+    FILL_OPACITY_SOURCE_SHIFT = 0,
+    STROKE_OPACITY_SOURCE_SHIFT = 2,
 }
 #[test]
 fn bindgen_test_layout_nsStyleSVG() {
-    assert_eq!(::std::mem::size_of::<nsStyleSVG>() , 128usize);
+    assert_eq!(::std::mem::size_of::<nsStyleSVG>() , 120usize);
     assert_eq!(::std::mem::align_of::<nsStyleSVG>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleBasicShape {
     pub mRefCnt: nsAutoRefCnt,
     pub _mOwningThread: nsAutoOwningThread,
     pub mType: nsStyleBasicShape_Type,
@@ -6228,83 +6180,83 @@ pub enum nsStyleBasicShape_Type {
 fn bindgen_test_layout_nsStyleBasicShape() {
     assert_eq!(::std::mem::size_of::<nsStyleBasicShape>() , 128usize);
     assert_eq!(::std::mem::align_of::<nsStyleBasicShape>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleClipPath {
     pub mType: i32,
-    pub nsStyleClipPath_nsStyleStruct_h_unnamed_25: nsStyleClipPath_nsStyleStruct_h_unnamed_25,
+    pub nsStyleClipPath_nsStyleStruct_h_unnamed_26: nsStyleClipPath_nsStyleStruct_h_unnamed_26,
     pub mSizingBox: u8,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
-pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     pub mBasicShape: __BindgenUnionField<*mut nsStyleBasicShape>,
     pub mURL: __BindgenUnionField<*mut nsIURI>,
     pub _bindgen_data_: u64,
 }
-impl nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+impl nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     pub unsafe fn mBasicShape(&mut self) -> *mut *mut nsStyleBasicShape {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
     pub unsafe fn mURL(&mut self) -> *mut *mut nsIURI {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
 }
-impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_25 {
+impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_26 {
     fn clone(&self) -> Self { *self }
 }
 #[test]
-fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_25() {
-    assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_25>()
+fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_26() {
+    assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_26>()
                , 8usize);
-    assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_25>()
+    assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_26>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleClipPath() {
     assert_eq!(::std::mem::size_of::<nsStyleClipPath>() , 24usize);
     assert_eq!(::std::mem::align_of::<nsStyleClipPath>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleFilter {
     pub mType: i32,
     pub mFilterParameter: nsStyleCoord,
-    pub nsStyleFilter_nsStyleStruct_h_unnamed_26: nsStyleFilter_nsStyleStruct_h_unnamed_26,
+    pub nsStyleFilter_nsStyleStruct_h_unnamed_27: nsStyleFilter_nsStyleStruct_h_unnamed_27,
 }
 #[repr(C)]
 #[derive(Debug, Copy)]
-pub struct nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+pub struct nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     pub mURL: __BindgenUnionField<*mut nsIURI>,
     pub mDropShadow: __BindgenUnionField<*mut nsCSSShadowArray>,
     pub _bindgen_data_: u64,
 }
-impl nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+impl nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     pub unsafe fn mURL(&mut self) -> *mut *mut nsIURI {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
     pub unsafe fn mDropShadow(&mut self) -> *mut *mut nsCSSShadowArray {
         let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
         ::std::mem::transmute(raw.offset(0))
     }
 }
-impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_26 {
+impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_27 {
     fn clone(&self) -> Self { *self }
 }
 #[test]
-fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_26() {
-    assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_26>()
+fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_27() {
+    assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_27>()
                , 8usize);
-    assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_26>()
+    assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_27>()
                , 8usize);
 }
 #[test]
 fn bindgen_test_layout_nsStyleFilter() {
     assert_eq!(::std::mem::size_of::<nsStyleFilter>() , 32usize);
     assert_eq!(::std::mem::align_of::<nsStyleFilter>() , 8usize);
 }
 #[repr(C)]
@@ -6317,26 +6269,26 @@ pub struct nsStyleSVGReset {
     pub mStopOpacity: f32,
     pub mFloodOpacity: f32,
     pub mDominantBaseline: u8,
     pub mVectorEffect: u8,
     pub mMaskType: u8,
 }
 #[test]
 fn bindgen_test_layout_nsStyleSVGReset() {
-    assert_eq!(::std::mem::size_of::<nsStyleSVGReset>() , 216usize);
+    assert_eq!(::std::mem::size_of::<nsStyleSVGReset>() , 208usize);
     assert_eq!(::std::mem::align_of::<nsStyleSVGReset>() , 8usize);
 }
 #[repr(C)]
 pub struct nsStyleVariables {
     pub mVariables: CSSVariableValues,
 }
 #[test]
 fn bindgen_test_layout_nsStyleVariables() {
-    assert_eq!(::std::mem::size_of::<nsStyleVariables>() , 56usize);
+    assert_eq!(::std::mem::size_of::<nsStyleVariables>() , 48usize);
     assert_eq!(::std::mem::align_of::<nsStyleVariables>() , 8usize);
 }
 #[repr(C)]
 #[derive(Debug)]
 pub struct nsStyleEffects {
     pub mFilters: nsTArray<nsStyleFilter>,
     pub mBoxShadow: RefPtr<nsCSSShadowArray>,
     pub mClip: nsRect,
--- a/servo/ports/geckolib/gecko_bindings/tools/regen_style_structs.sh
+++ b/servo/ports/geckolib/gecko_bindings/tools/regen_style_structs.sh
@@ -33,111 +33,115 @@ fi
 export DIST_INCLUDE="$1/dist/include"
 if [ ! -d "$DIST_INCLUDE" ]; then
   echo "$DIST_INCLUDE: directory not found"
   exit 1
 fi
 
 export RUST_BACKTRACE=1
 
-./rust-bindgen/target/debug/bindgen                                 \
-  -o ../structs.rs                                                  \
-  -x c++ -std=gnu++0x                                               \
-  -allow-unknown-types                                              \
-  "-I$DIST_INCLUDE" "-I$DIST_INCLUDE/nspr"                          \
-  "-I$1/../nsprpub/pr/include"                                      \
-  $PLATFORM_DEPENDENT_DEFINES                                       \
-  -ignore-functions                                                 \
-  -no-type-renaming                                                 \
-  -DMOZILLA_INTERNAL_API                                            \
-  -DMOZ_STYLO_BINDINGS=1                                            \
-  -DJS_DEBUG=1                                                      \
-  -DDEBUG=1 -DTRACING=1 -DOS_POSIX=1                                \
-  -DIMPL_LIBXUL                                                     \
-  -include "nsThemeConstants.h"                                     \
-  -match "RefCountType.h"                                           \
-  -match "nscore.h"                                                 \
-  -match "nsError.h"                                                \
-  -match "nsID.h"                                                   \
-  -match "nsString"                                                 \
-  -match "nsAString"                                                \
-  -match "nsSubstring"                                              \
-  -match "nsTSubstring"                                             \
-  -match "nsTString"                                                \
-  -match "nsISupportsBase.h"                                        \
-  -match "nsCOMPtr.h"                                               \
-  -match "nsIAtom.h"                                                \
-  -match "nsIURI.h"                                                 \
-  -match "nsAutoPtr.h"                                              \
-  -match "nsColor.h"                                                \
-  -match "nsCoord.h"                                                \
-  -match "nsPoint.h"                                                \
-  -match "nsRect.h"                                                 \
-  -match "nsMargin.h"                                               \
-  -match "nsThemeConstants.h"                                       \
-  -match "nsCSSProperty.h"                                          \
-  -match "CSSVariableValues.h"                                      \
-  -match "nsFont.h"                                                 \
-  -match "nsTHashtable.h"                                           \
-  -match "PLDHashTable.h"                                           \
-  -match "nsColor.h"                                                \
-  -match "nsStyleStruct.h"                                          \
-  -match "nsStyleCoord.h"                                           \
-  -match "RefPtr.h"                                                 \
-  -match "nsISupportsImpl.h"                                        \
-  -match "gfxFontConstants.h"                                       \
-  -match "gfxFontFamilyList.h"                                      \
-  -match "gfxFontFeatures.h"                                        \
-  -match "imgRequestProxy.h"                                        \
-  -match "nsIRequest.h"                                             \
-  -match "imgIRequest.h"                                            \
-  -match "CounterStyleManager.h"                                    \
-  -match "nsStyleConsts.h"                                          \
-  -match "nsCSSValue.h"                                             \
-  -match "SheetType.h"                                              \
-  -match "nsIPrincipal.h"                                           \
-  -match "nsDataHashtable.h"                                        \
-  -match "nsCSSScanner.h"                                           \
-  -match "Types.h"                                                  \
-  -match "utility"                                                  \
-  -match "nsTArray"                                                 \
-  -match "pair"                                                     \
-  -match "SheetParsingMode.h"                                       \
-  -match "StaticPtr.h"                                              \
-  -match "nsProxyRelease.h"                                         \
-  -blacklist-type "IsDestructibleFallbackImpl"                      \
-  -blacklist-type "IsDestructibleFallback"                          \
-  -blacklist-type "nsProxyReleaseEvent"                             \
-  -blacklist-type "FallibleTArray"                                  \
-  -blacklist-type "nsTArray_Impl"                                   \
-  -blacklist-type "__is_tuple_like_impl"                            \
-  -opaque-type "nsIntMargin"                                        \
-  -opaque-type "nsIntPoint"                                         \
-  -opaque-type "nsIntRect"                                          \
-  -opaque-type "nsCOMArray"                                         \
-  -opaque-type "nsDependentString"                                  \
-  -opaque-type "EntryStore"                                         \
-  -opaque-type "gfxFontFeatureValueSet"                             \
-  -opaque-type "imgRequestProxy"                                    \
-  -opaque-type "imgRequestProxyStatic"                              \
-  -opaque-type "CounterStyleManager"                                \
-  -opaque-type "ImageValue"                                         \
-  -opaque-type "URLValue"                                           \
-  -opaque-type "URLValueData"                                       \
-  -opaque-type "nsIPrincipal"                                       \
-  -opaque-type "nsDataHashtable"                                    \
-  -opaque-type "imgIRequest"                                        \
-  -include "$1/mozilla-config.h"                                    \
-  "$DIST_INCLUDE/nsStyleStruct.h"
+for target in debug release; do
+  ./rust-bindgen/target/debug/bindgen                               \
+    -o ../structs_${target}.rs                                      \
+    -x c++ -std=gnu++0x                                             \
+    -allow-unknown-types                                            \
+    "-I$DIST_INCLUDE" "-I$DIST_INCLUDE/nspr"                        \
+    "-I$1/../nsprpub/pr/include"                                    \
+    $PLATFORM_DEPENDENT_DEFINES                                     \
+    -ignore-functions                                               \
+    -no-type-renaming                                               \
+    -DMOZILLA_INTERNAL_API                                          \
+    -DMOZ_STYLO_BINDINGS=1                                          \
+    `[ "$target" = debug ] && echo "-DDEBUG=1 -DJS_DEBUG=1"`        \
+    -DTRACING=1 -DOS_POSIX=1                                        \
+    -DIMPL_LIBXUL                                                   \
+    -include "nsThemeConstants.h"                                   \
+    -match "RefCountType.h"                                         \
+    -match "nscore.h"                                               \
+    -match "nsError.h"                                              \
+    -match "nsID.h"                                                 \
+    -match "nsString"                                               \
+    -match "nsAString"                                              \
+    -match "nsSubstring"                                            \
+    -match "nsTSubstring"                                           \
+    -match "nsTString"                                              \
+    -match "nsISupportsBase.h"                                      \
+    -match "nsCOMPtr.h"                                             \
+    -match "nsIAtom.h"                                              \
+    -match "nsIURI.h"                                               \
+    -match "nsAutoPtr.h"                                            \
+    -match "nsColor.h"                                              \
+    -match "nsCoord.h"                                              \
+    -match "nsPoint.h"                                              \
+    -match "nsRect.h"                                               \
+    -match "nsMargin.h"                                             \
+    -match "nsThemeConstants.h"                                     \
+    -match "nsCSSProperty.h"                                        \
+    -match "CSSVariableValues.h"                                    \
+    -match "nsFont.h"                                               \
+    -match "nsTHashtable.h"                                         \
+    -match "PLDHashTable.h"                                         \
+    -match "nsColor.h"                                              \
+    -match "nsStyleStruct.h"                                        \
+    -match "nsStyleCoord.h"                                         \
+    -match "RefPtr.h"                                               \
+    -match "nsISupportsImpl.h"                                      \
+    -match "gfxFontConstants.h"                                     \
+    -match "gfxFontFamilyList.h"                                    \
+    -match "gfxFontFeatures.h"                                      \
+    -match "imgRequestProxy.h"                                      \
+    -match "nsIRequest.h"                                           \
+    -match "imgIRequest.h"                                          \
+    -match "CounterStyleManager.h"                                  \
+    -match "nsStyleConsts.h"                                        \
+    -match "nsCSSValue.h"                                           \
+    -match "SheetType.h"                                            \
+    -match "nsIPrincipal.h"                                         \
+    -match "nsDataHashtable.h"                                      \
+    -match "nsCSSScanner.h"                                         \
+    -match "Types.h"                                                \
+    -match "utility"                                                \
+    -match "nsTArray"                                               \
+    -match "pair"                                                   \
+    -match "SheetParsingMode.h"                                     \
+    -match "StaticPtr.h"                                            \
+    -match "nsProxyRelease.h"                                       \
+    -blacklist-type "IsDestructibleFallbackImpl"                    \
+    -blacklist-type "IsDestructibleFallback"                        \
+    -blacklist-type "nsProxyReleaseEvent"                           \
+    -blacklist-type "FallibleTArray"                                \
+    -blacklist-type "nsTArray_Impl"                                 \
+    -blacklist-type "__is_tuple_like_impl"                          \
+    -opaque-type "nsIntMargin"                                      \
+    -opaque-type "nsIntPoint"                                       \
+    -opaque-type "nsIntRect"                                        \
+    -opaque-type "nsCOMArray"                                       \
+    -opaque-type "nsDependentString"                                \
+    -opaque-type "EntryStore"                                       \
+    -opaque-type "gfxFontFeatureValueSet"                           \
+    -opaque-type "imgRequestProxy"                                  \
+    -opaque-type "imgRequestProxyStatic"                            \
+    -opaque-type "CounterStyleManager"                              \
+    -opaque-type "ImageValue"                                       \
+    -opaque-type "URLValue"                                         \
+    -opaque-type "URLValueData"                                     \
+    -opaque-type "nsIPrincipal"                                     \
+    -opaque-type "nsDataHashtable"                                  \
+    -opaque-type "imgIRequest"                                      \
+    -include "$1/mozilla-config.h"                                  \
+    "$DIST_INCLUDE/nsStyleStruct.h"
+  if [ $? -ne 0 ]; then
+    echo -e "\e[91mwarning:\e[0m bindgen exited with nonzero exit status"
+    exit 1
+  fi
+done
 
-if [ $? -ne 0 ]; then
-  echo -e "\e[91mwarning:\e[0m bindgen exited with nonzero exit status"
-else
-  echo -e "\e[34minfo:\e[0m bindgen exited successfully, running tests"
-  TESTS_FILE=$(mktemp)
-  TESTS_SRC=$(mktemp)
+echo -e "\e[34minfo:\e[0m bindgen exited successfully, running tests"
+TESTS_FILE=$(mktemp)
+TESTS_SRC=$(mktemp)
+for target in debug release; do
   echo "#![feature(const_fn)]" > $TESTS_SRC
-  cat ../structs.rs >> $TESTS_SRC
-  rustc $TESTS_SRC --test -o $TESTS_FILE
+  cat ../structs_${target}.rs >> $TESTS_SRC
+  multirust run nightly rustc $TESTS_SRC --test -o $TESTS_FILE
   $TESTS_FILE
-  rm $TESTS_FILE
-  rm $TESTS_SRC
-fi
+done
+rm $TESTS_FILE
+rm $TESTS_SRC
--- a/servo/python/tidy/servo_tidy/tidy.py
+++ b/servo/python/tidy/servo_tidy/tidy.py
@@ -29,17 +29,18 @@ file_patterns_to_ignore = [
     "*.#*",
     "*.pyc",
 ]
 
 # Files that are ignored for all tidy and lint checks.
 ignored_files = [
     # Generated and upstream code combined with our own. Could use cleanup
     os.path.join(".", "ports", "geckolib", "gecko_bindings", "bindings.rs"),
-    os.path.join(".", "ports", "geckolib", "gecko_bindings", "structs.rs"),
+    os.path.join(".", "ports", "geckolib", "gecko_bindings", "structs_debug.rs"),
+    os.path.join(".", "ports", "geckolib", "gecko_bindings", "structs_release.rs"),
     os.path.join(".", "ports", "geckolib", "string_cache", "atom_macro.rs"),
     os.path.join(".", "resources", "hsts_preload.json"),
     os.path.join(".", "tests", "wpt", "metadata", "MANIFEST.json"),
     os.path.join(".", "tests", "wpt", "metadata-css", "MANIFEST.json"),
     os.path.join(".", "components", "script", "dom", "webidls", "ForceTouchEvent.webidl"),
     # Hidden files
     os.path.join(".", "."),
 ]