From 175b88afcf31389ec03b5f471946d8ef7b9619f4 Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Tue, 10 Oct 2017 06:33:14 +0900 Subject: [PATCH] Fix mismatched arguments for Servo_SelectorXXX. --- components/style/gecko/selector_parser.rs | 9 +++++++++ ports/geckolib/glue.rs | 17 +++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/components/style/gecko/selector_parser.rs b/components/style/gecko/selector_parser.rs index 7fdd75f5d5f..56a49f4743a 100644 --- a/components/style/gecko/selector_parser.rs +++ b/components/style/gecko/selector_parser.rs @@ -7,7 +7,10 @@ use cssparser::{BasicParseError, Parser, ToCss, Token, CowRcStr}; use element_state::ElementState; use gecko_bindings::structs::CSSPseudoClassType; +use gecko_bindings::structs::RawServoSelectorList; +use gecko_bindings::sugar::ownership::{HasBoxFFI, HasFFI, HasSimpleFFI}; use selector_parser::{SelectorParser, PseudoElementCascadeType}; +use selectors::SelectorList; use selectors::parser::{Selector, SelectorMethods, SelectorParseError}; use selectors::visitor::SelectorVisitor; use std::fmt; @@ -438,3 +441,9 @@ fn utf16_to_ascii_lowercase(unit: u16) -> u16 { _ => unit } } + +unsafe impl HasFFI for SelectorList { + type FFIType = RawServoSelectorList; +} +unsafe impl HasSimpleFFI for SelectorList {} +unsafe impl HasBoxFFI for SelectorList {} diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 06c7b794a96..8cf788b9ccf 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -43,6 +43,7 @@ use style::gecko_bindings::bindings::{RawServoMediaListBorrowed, RawServoMediaLi use style::gecko_bindings::bindings::{RawServoMediaRule, RawServoMediaRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoNamespaceRule, RawServoNamespaceRuleBorrowed}; use style::gecko_bindings::bindings::{RawServoPageRule, RawServoPageRuleBorrowed}; +use style::gecko_bindings::bindings::{RawServoSelectorListBorrowed, RawServoSelectorListOwned}; use style::gecko_bindings::bindings::{RawServoStyleSetBorrowed, RawServoStyleSetOwned}; use style::gecko_bindings::bindings::{RawServoStyleSheetContentsBorrowed, ServoComputedDataBorrowed}; use style::gecko_bindings::bindings::{RawServoStyleSheetContentsStrong, ServoStyleContextBorrowed}; @@ -91,6 +92,7 @@ use style::gecko_bindings::structs::OriginFlags_User; use style::gecko_bindings::structs::OriginFlags_UserAgent; use style::gecko_bindings::structs::RawGeckoGfxMatrix4x4; use style::gecko_bindings::structs::RawGeckoPresContextOwned; +use style::gecko_bindings::structs::RawServoSelectorList; use style::gecko_bindings::structs::SeenPtrs; use style::gecko_bindings::structs::ServoElementSnapshotTable; use style::gecko_bindings::structs::ServoStyleSetSizes; @@ -1521,8 +1523,10 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(rule: RawServoStyleRule #[no_mangle] pub unsafe extern "C" fn Servo_SelectorList_Matches( element: RawGeckoElementBorrowed, - selectors: &::selectors::SelectorList, + selectors: RawServoSelectorListBorrowed, ) -> bool { + use std::borrow::Borrow; + let element = GeckoElement(element); let mut context = MatchingContext::new( MatchingMode::Normal, @@ -1531,7 +1535,8 @@ pub unsafe extern "C" fn Servo_SelectorList_Matches( element.owner_document_quirks_mode(), ); - selectors::matching::matches_selector_list(selectors, &element, &mut context) + let selectors = ::selectors::SelectorList::from_ffi(selectors).borrow(); + selectors::matching::matches_selector_list(&selectors, &element, &mut context) } #[no_mangle] @@ -4112,7 +4117,7 @@ pub extern "C" fn Servo_HasPendingRestyleAncestor(element: RawGeckoElementBorrow #[no_mangle] pub unsafe extern "C" fn Servo_SelectorList_Parse( selector_list: *const nsACString, -) -> *mut ::selectors::SelectorList { +) -> *mut RawServoSelectorList { use style::selector_parser::SelectorParser; debug_assert!(!selector_list.is_null()); @@ -4123,10 +4128,10 @@ pub unsafe extern "C" fn Servo_SelectorList_Parse( Err(..) => return ptr::null_mut(), }; - Box::into_raw(Box::new(selector_list)) + Box::into_raw(Box::new(selector_list)) as *mut RawServoSelectorList } #[no_mangle] -pub unsafe extern "C" fn Servo_SelectorList_Drop(list: *mut ::selectors::SelectorList) { - let _ = Box::from_raw(list); +pub unsafe extern "C" fn Servo_SelectorList_Drop(list: RawServoSelectorListOwned) { + let _ = list.into_box::<::selectors::SelectorList>(); }