diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-09-20 10:01:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-20 10:01:07 -0500 |
commit | eefd59e9332ea054908548eaba63ac12ff4bf46c (patch) | |
tree | 80b4407bab822b484d77beacc0a91ac4b96e9faf | |
parent | 98e3bb3cddb1c2e91b1f265269668e11843758fa (diff) | |
parent | 7bcd57d3c6f395f870c0c432d95d0f05ed01239b (diff) | |
download | servo-eefd59e9332ea054908548eaba63ac12ff4bf46c.tar.gz servo-eefd59e9332ea054908548eaba63ac12ff4bf46c.zip |
Auto merge of #18577 - moz-servo-sync:gecko-backout, r=moz-servo-sync
Backed out changeset 5b56ebe80e22 (bug 1400438) for heap write hazard. r=backout
Backed out changeset 5b56ebe80e22 (bug 1400438) for heap write hazard. r=backout
Backs out https://github.com/servo/servo/pull/18574
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18577)
<!-- Reviewable:end -->
-rw-r--r-- | components/style/gecko/generated/bindings.rs | 13 | ||||
-rw-r--r-- | components/style/gecko/generated/structs_debug.rs | 97 | ||||
-rw-r--r-- | components/style/gecko/generated/structs_release.rs | 97 | ||||
-rw-r--r-- | components/style/properties/gecko.mako.rs | 71 |
4 files changed, 102 insertions, 176 deletions
diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index 5a5a624b160..59c97a0658e 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -71,6 +71,7 @@ use gecko_bindings::structs::StyleBasicShapeType; use gecko_bindings::structs::StyleShapeSource; use gecko_bindings::structs::StyleTransition; use gecko_bindings::structs::gfxFontFeatureValueSet; +use gecko_bindings::structs::nsBorderColors; use gecko_bindings::structs::nsCSSCounterStyleRule; use gecko_bindings::structs::nsCSSFontFaceRule; use gecko_bindings::structs::nsCSSKeyword; @@ -876,10 +877,22 @@ extern "C" { pub fn Gecko_EnsureMozBorderColors(aBorder: *mut nsStyleBorder); } extern "C" { + pub fn Gecko_ClearMozBorderColors(aBorder: *mut nsStyleBorder, + aSide: Side); +} +extern "C" { + pub fn Gecko_AppendMozBorderColors(aBorder: *mut nsStyleBorder, + aSide: Side, aColor: nscolor); +} +extern "C" { pub fn Gecko_CopyMozBorderColors(aDest: *mut nsStyleBorder, aSrc: *const nsStyleBorder, aSide: Side); } extern "C" { + pub fn Gecko_GetMozBorderColors(aBorder: *const nsStyleBorder, + aSide: Side) -> *const nsBorderColors; +} +extern "C" { pub fn Gecko_FontFamilyList_Clear(aList: *mut FontFamilyList); } extern "C" { diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs index 5f4e696f5ea..59807d919eb 100644 --- a/components/style/gecko/generated/structs_debug.rs +++ b/components/style/gecko/generated/structs_debug.rs @@ -14284,7 +14284,7 @@ pub mod root { #[repr(C)] #[derive(Debug)] pub struct nsStyleBorder { - pub mBorderColors: root::mozilla::UniquePtr<root::nsBorderColors>, + pub mBorderColors: *mut *mut root::nsBorderColors, pub mBorderRadius: root::nsStyleCorners, pub mBorderImageSource: root::nsStyleImage, pub mBorderImageSlice: root::nsStyleSides, @@ -30544,6 +30544,29 @@ pub mod root { } #[repr(C)] #[derive(Debug)] + pub struct nsBorderColors { + pub mNext: *mut root::nsBorderColors, + pub mColor: root::nscolor, + } + #[test] + fn bindgen_test_layout_nsBorderColors() { + assert_eq!(::std::mem::size_of::<nsBorderColors>() , 16usize , concat + ! ( "Size of: " , stringify ! ( nsBorderColors ) )); + assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat + ! ( "Alignment of " , stringify ! ( nsBorderColors ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const nsBorderColors ) ) . mNext as * const + _ as usize } , 0usize , concat ! ( + "Alignment of field: " , stringify ! ( nsBorderColors ) , + "::" , stringify ! ( mNext ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const nsBorderColors ) ) . mColor as * + const _ as usize } , 8usize , concat ! ( + "Alignment of field: " , stringify ! ( nsBorderColors ) , + "::" , stringify ! ( mColor ) )); + } + #[repr(C)] + #[derive(Debug)] pub struct nsCSSShadowItem { pub mXOffset: root::nscoord, pub mYOffset: root::nscoord, @@ -30628,23 +30651,6 @@ pub mod root { "Alignment of field: " , stringify ! ( nsCSSShadowArray ) , "::" , stringify ! ( mArray ) )); } - #[repr(C)] - #[derive(Debug)] - pub struct nsBorderColors { - pub mColors: [root::nsTArray<::std::os::raw::c_uint>; 4usize], - } - #[test] - fn bindgen_test_layout_nsBorderColors() { - assert_eq!(::std::mem::size_of::<nsBorderColors>() , 32usize , concat - ! ( "Size of: " , stringify ! ( nsBorderColors ) )); - assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat - ! ( "Alignment of " , stringify ! ( nsBorderColors ) )); - assert_eq! (unsafe { - & ( * ( 0 as * const nsBorderColors ) ) . mColors as * - const _ as usize } , 0usize , concat ! ( - "Alignment of field: " , stringify ! ( nsBorderColors ) , - "::" , stringify ! ( mColors ) )); - } /// An object that allows sharing of arrays that store 'quotes' property /// values. This is particularly important for inheritance, where we want /// to share the same 'quotes' value with a parent style context. @@ -33513,28 +33519,6 @@ pub mod root { root::RefPtr<root::nsCSSValueSharedList> ) )); } #[test] - fn __bindgen_test_layout_UniquePtr_open0_nsBorderColors_DefaultDelete_open1_nsBorderColors_close1_close0_instantiation() { - assert_eq!(::std::mem::size_of::<root::mozilla::UniquePtr<root::nsBorderColors>>() - , 8usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::mozilla::UniquePtr<root::nsBorderColors> ) )); - assert_eq!(::std::mem::align_of::<root::mozilla::UniquePtr<root::nsBorderColors>>() - , 8usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::mozilla::UniquePtr<root::nsBorderColors> ) )); - } - #[test] - fn __bindgen_test_layout_DefaultDelete_open0_nsBorderColors_close0_instantiation() { - assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() , - 1usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::mozilla::DefaultDelete ) )); - assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() , - 1usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::mozilla::DefaultDelete ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0_nsStyleFilter_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsStyleFilter>>() , 8usize , concat ! ( @@ -33590,17 +33574,6 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_2() { - assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize , - concat ! ( - "Size of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize , - concat ! ( - "Alignment of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_202536_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>() , 8usize , concat ! ( @@ -34833,17 +34806,6 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_3() { - assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize , - concat ! ( - "Size of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize , - concat ! ( - "Alignment of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_213307_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>() , 8usize , concat ! ( @@ -36742,17 +36704,6 @@ pub mod root { )); } #[test] - fn __bindgen_test_layout_nsTArray_open0_unsigned_int_close0_instantiation_5() { - assert_eq!(::std::mem::size_of::<root::nsTArray<::std::os::raw::c_uint>>() - , 8usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::nsTArray<::std::os::raw::c_uint> ) )); - assert_eq!(::std::mem::align_of::<root::nsTArray<::std::os::raw::c_uint>>() - , 8usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::nsTArray<::std::os::raw::c_uint> ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0_pair_open1_nsString_nsString_close1_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::std::pair<::nsstring::nsStringRepr, ::nsstring::nsStringRepr>>>() diff --git a/components/style/gecko/generated/structs_release.rs b/components/style/gecko/generated/structs_release.rs index faf3924a299..dd1e0f487bd 100644 --- a/components/style/gecko/generated/structs_release.rs +++ b/components/style/gecko/generated/structs_release.rs @@ -14131,7 +14131,7 @@ pub mod root { #[repr(C)] #[derive(Debug)] pub struct nsStyleBorder { - pub mBorderColors: root::mozilla::UniquePtr<root::nsBorderColors>, + pub mBorderColors: *mut *mut root::nsBorderColors, pub mBorderRadius: root::nsStyleCorners, pub mBorderImageSource: root::nsStyleImage, pub mBorderImageSlice: root::nsStyleSides, @@ -30130,6 +30130,29 @@ pub mod root { } #[repr(C)] #[derive(Debug)] + pub struct nsBorderColors { + pub mNext: *mut root::nsBorderColors, + pub mColor: root::nscolor, + } + #[test] + fn bindgen_test_layout_nsBorderColors() { + assert_eq!(::std::mem::size_of::<nsBorderColors>() , 16usize , concat + ! ( "Size of: " , stringify ! ( nsBorderColors ) )); + assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat + ! ( "Alignment of " , stringify ! ( nsBorderColors ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const nsBorderColors ) ) . mNext as * const + _ as usize } , 0usize , concat ! ( + "Alignment of field: " , stringify ! ( nsBorderColors ) , + "::" , stringify ! ( mNext ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const nsBorderColors ) ) . mColor as * + const _ as usize } , 8usize , concat ! ( + "Alignment of field: " , stringify ! ( nsBorderColors ) , + "::" , stringify ! ( mColor ) )); + } + #[repr(C)] + #[derive(Debug)] pub struct nsCSSShadowItem { pub mXOffset: root::nscoord, pub mYOffset: root::nscoord, @@ -30214,23 +30237,6 @@ pub mod root { "Alignment of field: " , stringify ! ( nsCSSShadowArray ) , "::" , stringify ! ( mArray ) )); } - #[repr(C)] - #[derive(Debug)] - pub struct nsBorderColors { - pub mColors: [root::nsTArray<::std::os::raw::c_uint>; 4usize], - } - #[test] - fn bindgen_test_layout_nsBorderColors() { - assert_eq!(::std::mem::size_of::<nsBorderColors>() , 32usize , concat - ! ( "Size of: " , stringify ! ( nsBorderColors ) )); - assert_eq! (::std::mem::align_of::<nsBorderColors>() , 8usize , concat - ! ( "Alignment of " , stringify ! ( nsBorderColors ) )); - assert_eq! (unsafe { - & ( * ( 0 as * const nsBorderColors ) ) . mColors as * - const _ as usize } , 0usize , concat ! ( - "Alignment of field: " , stringify ! ( nsBorderColors ) , - "::" , stringify ! ( mColors ) )); - } /// An object that allows sharing of arrays that store 'quotes' property /// values. This is particularly important for inheritance, where we want /// to share the same 'quotes' value with a parent style context. @@ -33099,28 +33105,6 @@ pub mod root { root::RefPtr<root::nsCSSValueSharedList> ) )); } #[test] - fn __bindgen_test_layout_UniquePtr_open0_nsBorderColors_DefaultDelete_open1_nsBorderColors_close1_close0_instantiation() { - assert_eq!(::std::mem::size_of::<root::mozilla::UniquePtr<root::nsBorderColors>>() - , 8usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::mozilla::UniquePtr<root::nsBorderColors> ) )); - assert_eq!(::std::mem::align_of::<root::mozilla::UniquePtr<root::nsBorderColors>>() - , 8usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::mozilla::UniquePtr<root::nsBorderColors> ) )); - } - #[test] - fn __bindgen_test_layout_DefaultDelete_open0_nsBorderColors_close0_instantiation() { - assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() , - 1usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::mozilla::DefaultDelete ) )); - assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() , - 1usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::mozilla::DefaultDelete ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0_nsStyleFilter_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsStyleFilter>>() , 8usize , concat ! ( @@ -33176,17 +33160,6 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_2() { - assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize , - concat ! ( - "Size of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize , - concat ! ( - "Alignment of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_200130_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>() , 8usize , concat ! ( @@ -34419,17 +34392,6 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_nsTString_open0_char16_t_close0_instantiation_3() { - assert_eq!(::std::mem::size_of::<::nsstring::nsStringRepr>() , 16usize , - concat ! ( - "Size of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - assert_eq!(::std::mem::align_of::<::nsstring::nsStringRepr>() , 8usize , - concat ! ( - "Alignment of template specialization: " , stringify ! ( - ::nsstring::nsStringRepr ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0__bindgen_ty_id_210857_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::StyleSheet>>() , 8usize , concat ! ( @@ -36315,17 +36277,6 @@ pub mod root { )); } #[test] - fn __bindgen_test_layout_nsTArray_open0_unsigned_int_close0_instantiation_5() { - assert_eq!(::std::mem::size_of::<root::nsTArray<::std::os::raw::c_uint>>() - , 8usize , concat ! ( - "Size of template specialization: " , stringify ! ( - root::nsTArray<::std::os::raw::c_uint> ) )); - assert_eq!(::std::mem::align_of::<root::nsTArray<::std::os::raw::c_uint>>() - , 8usize , concat ! ( - "Alignment of template specialization: " , stringify ! ( - root::nsTArray<::std::os::raw::c_uint> ) )); - } - #[test] fn __bindgen_test_layout_nsTArray_open0_pair_open1_nsString_nsString_close1_close0_instantiation() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::std::pair<::nsstring::nsStringRepr, ::nsstring::nsStringRepr>>>() diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 19add7085f4..1d8ff1bf08d 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -1272,34 +1272,6 @@ fn static_assert() { border-image-repeat border-image-width border-image-slice ${skip_moz_border_color_longhands}"> - fn set_moz_border_colors(&mut self, side: structs::Side, v: Option<Vec<::cssparser::RGBA>>) { - match v { - None => { - let ptr = self.gecko.mBorderColors.mPtr; - if let Some(colors) = unsafe { ptr.as_mut() } { - unsafe { colors.mColors[side as usize].clear() }; - } - } - Some(ref colors) => { - unsafe { bindings::Gecko_EnsureMozBorderColors(&mut self.gecko) }; - let border_colors = unsafe { self.gecko.mBorderColors.mPtr.as_mut().unwrap() }; - let dest_colors = &mut border_colors.mColors[side as usize]; - unsafe { dest_colors.set_len_pod(colors.len() as u32) }; - for (dst, src) in dest_colors.iter_mut().zip(colors.into_iter()) { - *dst = convert_rgba_to_nscolor(src); - } - } - } - } - - fn clone_moz_border_colors(&self, side: structs::Side) -> Option<Vec<::cssparser::RGBA>> { - unsafe { self.gecko.mBorderColors.mPtr.as_ref() }.map(|colors| { - colors.mColors[side as usize].iter() - .map(|color| convert_nscolor_to_rgba(*color)) - .collect() - }) - } - % for side in SIDES: <% impl_keyword("border_%s_style" % side.ident, "mBorderStyle[%s]" % side.index, @@ -1350,7 +1322,29 @@ fn static_assert() { #[allow(non_snake_case)] pub fn set__moz_border_${side.ident}_colors(&mut self, v: longhands::_moz_border_${side.ident}_colors::computed_value::T) { - self.set_moz_border_colors(structs::Side::eSide${to_camel_case(side.ident)}, v.0); + match v.0 { + None => { + unsafe { + bindings::Gecko_ClearMozBorderColors(&mut self.gecko, + structs::Side::eSide${to_camel_case(side.ident)}); + } + }, + Some(ref colors) => { + unsafe { + bindings::Gecko_EnsureMozBorderColors(&mut self.gecko); + bindings::Gecko_ClearMozBorderColors(&mut self.gecko, + structs::Side::eSide${to_camel_case(side.ident)}); + } + for color in colors { + let c = convert_rgba_to_nscolor(color); + unsafe { + bindings::Gecko_AppendMozBorderColors(&mut self.gecko, + structs::Side::eSide${to_camel_case(side.ident)}, + c); + } + } + } + } } #[allow(non_snake_case)] @@ -1370,7 +1364,24 @@ fn static_assert() { pub fn clone__moz_border_${side.ident}_colors(&self) -> longhands::_moz_border_${side.ident}_colors::computed_value::T { use self::longhands::_moz_border_${side.ident}_colors::computed_value::T; - T(self.clone_moz_border_colors(structs::Side::eSide${to_camel_case(side.ident)})) + + let mut gecko_colors = + unsafe { bindings::Gecko_GetMozBorderColors(&self.gecko, + structs::Side::eSide${to_camel_case(side.ident)}) }; + + if gecko_colors.is_null() { + return T(None); + } + + let mut colors = Vec::new(); + loop { + unsafe { + colors.push(convert_nscolor_to_rgba((*gecko_colors).mColor)); + if (*gecko_colors).mNext.is_null() { break; } + gecko_colors = (*gecko_colors).mNext; + } + } + T(Some(colors)) } % endfor |