summaryrefslogtreecommitdiffstats
path: root/servo/components/style/gecko/arc_types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'servo/components/style/gecko/arc_types.rs')
-rw-r--r--servo/components/style/gecko/arc_types.rs171
1 files changed, 171 insertions, 0 deletions
diff --git a/servo/components/style/gecko/arc_types.rs b/servo/components/style/gecko/arc_types.rs
new file mode 100644
index 0000000000..24bf22d69a
--- /dev/null
+++ b/servo/components/style/gecko/arc_types.rs
@@ -0,0 +1,171 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+//! This file lists all arc FFI types and defines corresponding addref and release functions. This
+//! list loosely corresponds to ServoLockedArcTypeList.h file in Gecko.
+
+#![allow(non_snake_case, missing_docs)]
+
+use crate::gecko::url::CssUrlData;
+use crate::media_queries::MediaList;
+use crate::properties::animated_properties::AnimationValue;
+use crate::properties::{ComputedValues, PropertyDeclarationBlock};
+use crate::shared_lock::Locked;
+use crate::stylesheets::keyframes_rule::Keyframe;
+use crate::stylesheets::{
+ ContainerRule, CounterStyleRule, CssRules, DocumentRule, FontFaceRule, FontFeatureValuesRule,
+ FontPaletteValuesRule, ImportRule, KeyframesRule, LayerBlockRule, LayerStatementRule,
+ MediaRule, NamespaceRule, PageRule, PropertyRule, StyleRule, StylesheetContents, SupportsRule,
+};
+use servo_arc::Arc;
+
+macro_rules! impl_simple_arc_ffi {
+ ($ty:ty, $addref:ident, $release:ident) => {
+ #[no_mangle]
+ pub unsafe extern "C" fn $addref(obj: *const $ty) {
+ std::mem::forget(Arc::from_raw_addrefed(obj));
+ }
+
+ #[no_mangle]
+ pub unsafe extern "C" fn $release(obj: *const $ty) {
+ let _ = Arc::from_raw(obj);
+ }
+ };
+}
+
+macro_rules! impl_locked_arc_ffi {
+ ($servo_type:ty, $alias:ident, $addref:ident, $release:ident) => {
+ /// A simple alias for a locked type.
+ pub type $alias = Locked<$servo_type>;
+ impl_simple_arc_ffi!($alias, $addref, $release);
+ };
+}
+
+impl_locked_arc_ffi!(
+ CssRules,
+ LockedCssRules,
+ Servo_CssRules_AddRef,
+ Servo_CssRules_Release
+);
+impl_locked_arc_ffi!(
+ PropertyDeclarationBlock,
+ LockedDeclarationBlock,
+ Servo_DeclarationBlock_AddRef,
+ Servo_DeclarationBlock_Release
+);
+impl_locked_arc_ffi!(
+ StyleRule,
+ LockedStyleRule,
+ Servo_StyleRule_AddRef,
+ Servo_StyleRule_Release
+);
+impl_locked_arc_ffi!(
+ ImportRule,
+ LockedImportRule,
+ Servo_ImportRule_AddRef,
+ Servo_ImportRule_Release
+);
+impl_locked_arc_ffi!(
+ Keyframe,
+ LockedKeyframe,
+ Servo_Keyframe_AddRef,
+ Servo_Keyframe_Release
+);
+impl_locked_arc_ffi!(
+ KeyframesRule,
+ LockedKeyframesRule,
+ Servo_KeyframesRule_AddRef,
+ Servo_KeyframesRule_Release
+);
+impl_simple_arc_ffi!(
+ LayerBlockRule,
+ Servo_LayerBlockRule_AddRef,
+ Servo_LayerBlockRule_Release
+);
+impl_simple_arc_ffi!(
+ LayerStatementRule,
+ Servo_LayerStatementRule_AddRef,
+ Servo_LayerStatementRule_Release
+);
+impl_locked_arc_ffi!(
+ MediaList,
+ LockedMediaList,
+ Servo_MediaList_AddRef,
+ Servo_MediaList_Release
+);
+impl_simple_arc_ffi!(MediaRule, Servo_MediaRule_AddRef, Servo_MediaRule_Release);
+impl_simple_arc_ffi!(
+ NamespaceRule,
+ Servo_NamespaceRule_AddRef,
+ Servo_NamespaceRule_Release
+);
+impl_locked_arc_ffi!(
+ PageRule,
+ LockedPageRule,
+ Servo_PageRule_AddRef,
+ Servo_PageRule_Release
+);
+impl_simple_arc_ffi!(
+ PropertyRule,
+ Servo_PropertyRule_AddRef,
+ Servo_PropertyRule_Release
+);
+impl_simple_arc_ffi!(
+ SupportsRule,
+ Servo_SupportsRule_AddRef,
+ Servo_SupportsRule_Release
+);
+impl_simple_arc_ffi!(
+ ContainerRule,
+ Servo_ContainerRule_AddRef,
+ Servo_ContainerRule_Release
+);
+impl_simple_arc_ffi!(
+ DocumentRule,
+ Servo_DocumentRule_AddRef,
+ Servo_DocumentRule_Release
+);
+impl_simple_arc_ffi!(
+ FontFeatureValuesRule,
+ Servo_FontFeatureValuesRule_AddRef,
+ Servo_FontFeatureValuesRule_Release
+);
+impl_simple_arc_ffi!(
+ FontPaletteValuesRule,
+ Servo_FontPaletteValuesRule_AddRef,
+ Servo_FontPaletteValuesRule_Release
+);
+impl_locked_arc_ffi!(
+ FontFaceRule,
+ LockedFontFaceRule,
+ Servo_FontFaceRule_AddRef,
+ Servo_FontFaceRule_Release
+);
+impl_locked_arc_ffi!(
+ CounterStyleRule,
+ LockedCounterStyleRule,
+ Servo_CounterStyleRule_AddRef,
+ Servo_CounterStyleRule_Release
+);
+
+impl_simple_arc_ffi!(
+ StylesheetContents,
+ Servo_StyleSheetContents_AddRef,
+ Servo_StyleSheetContents_Release
+);
+impl_simple_arc_ffi!(
+ CssUrlData,
+ Servo_CssUrlData_AddRef,
+ Servo_CssUrlData_Release
+);
+impl_simple_arc_ffi!(
+ ComputedValues,
+ Servo_ComputedStyle_AddRef,
+ Servo_ComputedStyle_Release
+);
+impl_simple_arc_ffi!(
+ AnimationValue,
+ Servo_AnimationValue_AddRef,
+ Servo_AnimationValue_Release
+);