From 46785438399e264e9dfc194645d3a82f4403cf4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 4 Jun 2018 19:53:45 +0200 Subject: [PATCH] Bug 1466609: Make the threadsafe refcounting macros more reusable. r=xidorn MozReview-Commit-ID: IanxqRksGqE --- .../style/gecko_bindings/sugar/refptr.rs | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/servo/components/style/gecko_bindings/sugar/refptr.rs b/servo/components/style/gecko_bindings/sugar/refptr.rs index 76a7021ef5b0..5019663a5803 100644 --- a/servo/components/style/gecko_bindings/sugar/refptr.rs +++ b/servo/components/style/gecko_bindings/sugar/refptr.rs @@ -4,7 +4,7 @@ //! A rust helper to ease the use of Gecko's refcounted types. -use gecko_bindings::structs; +use gecko_bindings::{structs, bindings}; use gecko_bindings::sugar::ownership::HasArcFFI; use servo_arc::Arc; use std::{fmt, mem, ptr}; @@ -255,13 +255,16 @@ unsafe impl Send for RefPtr {} unsafe impl Sync for RefPtr {} macro_rules! impl_refcount { - ($t:ty, $addref:ident, $release:ident) => { + ($t:ty, $addref:path, $release:path) => { unsafe impl RefCounted for $t { + #[inline] fn addref(&self) { - unsafe { ::gecko_bindings::bindings::$addref(self as *const _ as *mut _) } + unsafe { $addref(self as *const _ as *mut _) } } + + #[inline] unsafe fn release(&self) { - ::gecko_bindings::bindings::$release(self as *const _ as *mut _) + $release(self as *const _ as *mut _) } } }; @@ -271,50 +274,49 @@ macro_rules! impl_refcount { // // Gets you a free RefCounted impl implemented via FFI. macro_rules! impl_threadsafe_refcount { - ($t:ty, $addref:ident, $release:ident) => { + ($t:ty, $addref:path, $release:path) => { impl_refcount!($t, $addref, $release); unsafe impl ThreadSafeRefCounted for $t {} }; } impl_threadsafe_refcount!( - ::gecko_bindings::structs::RawGeckoURLExtraData, - Gecko_AddRefURLExtraDataArbitraryThread, - Gecko_ReleaseURLExtraDataArbitraryThread + structs::RawGeckoURLExtraData, + bindings::Gecko_AddRefURLExtraDataArbitraryThread, + bindings::Gecko_ReleaseURLExtraDataArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::nsStyleQuoteValues, - Gecko_AddRefQuoteValuesArbitraryThread, - Gecko_ReleaseQuoteValuesArbitraryThread + structs::nsStyleQuoteValues, + bindings::Gecko_AddRefQuoteValuesArbitraryThread, + bindings::Gecko_ReleaseQuoteValuesArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::nsCSSValueSharedList, - Gecko_AddRefCSSValueSharedListArbitraryThread, - Gecko_ReleaseCSSValueSharedListArbitraryThread + structs::nsCSSValueSharedList, + bindings::Gecko_AddRefCSSValueSharedListArbitraryThread, + bindings::Gecko_ReleaseCSSValueSharedListArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::mozilla::css::URLValue, - Gecko_AddRefCSSURLValueArbitraryThread, - Gecko_ReleaseCSSURLValueArbitraryThread + structs::mozilla::css::URLValue, + bindings::Gecko_AddRefCSSURLValueArbitraryThread, + bindings::Gecko_ReleaseCSSURLValueArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::mozilla::css::GridTemplateAreasValue, - Gecko_AddRefGridTemplateAreasValueArbitraryThread, - Gecko_ReleaseGridTemplateAreasValueArbitraryThread + structs::mozilla::css::GridTemplateAreasValue, + bindings::Gecko_AddRefGridTemplateAreasValueArbitraryThread, + bindings::Gecko_ReleaseGridTemplateAreasValueArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::ImageValue, - Gecko_AddRefImageValueArbitraryThread, - Gecko_ReleaseImageValueArbitraryThread + structs::ImageValue, + bindings::Gecko_AddRefImageValueArbitraryThread, + bindings::Gecko_ReleaseImageValueArbitraryThread ); impl_threadsafe_refcount!( - ::gecko_bindings::structs::SharedFontList, - Gecko_AddRefSharedFontListArbitraryThread, - Gecko_ReleaseSharedFontListArbitraryThread + structs::SharedFontList, + bindings::Gecko_AddRefSharedFontListArbitraryThread, + bindings::Gecko_ReleaseSharedFontListArbitraryThread ); - impl_threadsafe_refcount!( - ::gecko_bindings::structs::SheetLoadDataHolder, - Gecko_AddRefSheetLoadDataHolderArbitraryThread, - Gecko_ReleaseSheetLoadDataHolderArbitraryThread + structs::SheetLoadDataHolder, + bindings::Gecko_AddRefSheetLoadDataHolderArbitraryThread, + bindings::Gecko_ReleaseSheetLoadDataHolderArbitraryThread );