diff --git a/servo/components/script/dom/bindings/callback.rs b/servo/components/script/dom/bindings/callback.rs index 7e509edb3230..e8a9683a4b25 100644 --- a/servo/components/script/dom/bindings/callback.rs +++ b/servo/components/script/dom/bindings/callback.rs @@ -8,6 +8,7 @@ use dom::bindings::error::{Error, Fallible, report_pending_exception}; use dom::bindings::js::{JS, Root}; use dom::bindings::reflector::DomObject; use dom::bindings::settings_stack::{AutoEntryScript, AutoIncumbentScript}; +use dom::bindings::utils::AsCCharPtrPtr; use dom::globalscope::GlobalScope; use js::jsapi::{Heap, MutableHandleObject}; use js::jsapi::{IsCallable, JSContext, JSObject, JS_WrapObject, AddRawValueRoot}; @@ -81,7 +82,7 @@ impl CallbackObject { self.callback.set(callback); self.permanent_js_root.set(ObjectValue(callback)); assert!(AddRawValueRoot(cx, self.permanent_js_root.get_unsafe(), - b"CallbackObject::root\n" as *const _ as *const _)); + b"CallbackObject::root\n".as_c_char_ptr())); } } diff --git a/servo/components/script/dom/bindings/codegen/CodegenRust.py b/servo/components/script/dom/bindings/codegen/CodegenRust.py index 1b5b7b0d2eb2..a54ea0c3c979 100644 --- a/servo/components/script/dom/bindings/codegen/CodegenRust.py +++ b/servo/components/script/dom/bindings/codegen/CodegenRust.py @@ -3086,7 +3086,7 @@ let traps = ProxyTraps { isConstructor: None, }; -CreateProxyHandler(&traps, &Class as *const _ as *const _)\ +CreateProxyHandler(&traps, Class.as_void_ptr())\ """ % args) @@ -5565,6 +5565,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'dom::bindings::namespace::create_namespace_object', 'dom::bindings::reflector::MutDomObject', 'dom::bindings::reflector::DomObject', + 'dom::bindings::utils::AsVoidPtr', 'dom::bindings::utils::DOMClass', 'dom::bindings::utils::DOMJSClass', 'dom::bindings::utils::DOM_PROTO_UNFORGEABLE_HOLDER_SLOT', diff --git a/servo/components/script/dom/bindings/utils.rs b/servo/components/script/dom/bindings/utils.rs index b5f787346f19..c7039fd168ca 100644 --- a/servo/components/script/dom/bindings/utils.rs +++ b/servo/components/script/dom/bindings/utils.rs @@ -33,7 +33,7 @@ use js::jsval::{JSVal, UndefinedValue}; use js::rust::{GCMethods, ToString, get_object_class, is_dom_class}; use libc; use std::ffi::CString; -use std::os::raw::c_void; +use std::os::raw::{c_char, c_void}; use std::ptr; use std::slice; @@ -513,3 +513,24 @@ unsafe extern "C" fn instance_class_has_proto_at_depth(clasp: *const js::jsapi:: pub const DOM_CALLBACKS: DOMCallbacks = DOMCallbacks { instanceClassMatchesProto: Some(instance_class_has_proto_at_depth), }; + +// Generic method for returning libc::c_void from caller +pub trait AsVoidPtr { + fn as_void_ptr(&self) -> *const libc::c_void; +} +impl AsVoidPtr for T { + fn as_void_ptr(&self) -> *const libc::c_void { + self as *const T as *const libc::c_void + } +} + +// Generic method for returning c_char from caller +pub trait AsCCharPtrPtr { + fn as_c_char_ptr(&self) -> *const c_char; +} + +impl AsCCharPtrPtr for [u8] { + fn as_c_char_ptr(&self) -> *const c_char { + self as *const [u8] as *const c_char + } +} diff --git a/servo/components/script/dom/browsingcontext.rs b/servo/components/script/dom/browsingcontext.rs index b5e66b0fd7b9..5a1a82ff9b08 100644 --- a/servo/components/script/dom/browsingcontext.rs +++ b/servo/components/script/dom/browsingcontext.rs @@ -9,8 +9,7 @@ use dom::bindings::js::{JS, Root, RootedReference}; use dom::bindings::proxyhandler::{fill_property_descriptor, get_property_descriptor}; use dom::bindings::reflector::{DomObject, Reflector}; use dom::bindings::trace::JSTraceable; -use dom::bindings::utils::WindowProxyHandler; -use dom::bindings::utils::get_array_index_from_id; +use dom::bindings::utils::{WindowProxyHandler, get_array_index_from_id, AsVoidPtr}; use dom::dissimilaroriginwindow::DissimilarOriginWindow; use dom::element::Element; use dom::globalscope::GlobalScope; @@ -112,7 +111,7 @@ impl BrowsingContext { // The window proxy owns the browsing context. // When we finalize the window proxy, it drops the browsing context it owns. - SetProxyExtra(window_proxy.get(), 0, &PrivateValue(&*browsing_context as *const _ as *const _)); + SetProxyExtra(window_proxy.get(), 0, &PrivateValue((&*browsing_context).as_void_ptr())); // Notify the JS engine about the new window proxy binding. SetWindowProxy(cx, window_jsobject, window_proxy.handle()); @@ -152,7 +151,7 @@ impl BrowsingContext { // The window proxy owns the browsing context. // When we finalize the window proxy, it drops the browsing context it owns. - SetProxyExtra(window_proxy.get(), 0, &PrivateValue(&*browsing_context as *const _ as *const _)); + SetProxyExtra(window_proxy.get(), 0, &PrivateValue((&*browsing_context).as_void_ptr())); // Notify the JS engine about the new window proxy binding. SetWindowProxy(cx, window_jsobject, window_proxy.handle()); @@ -225,7 +224,7 @@ impl BrowsingContext { debug!("Transplanted window proxy is {:p}.", new_window_proxy.get()); // Transfer ownership of this browsing context from the old window proxy to the new one. - SetProxyExtra(new_window_proxy.get(), 0, &PrivateValue(self as *const _ as *const _)); + SetProxyExtra(new_window_proxy.get(), 0, &PrivateValue(self.as_void_ptr())); // Notify the JS engine about the new window proxy binding. SetWindowProxy(cx, window_jsobject, new_window_proxy.handle()); @@ -601,4 +600,3 @@ unsafe extern fn trace(trc: *mut JSTracer, obj: *mut JSObject) { } (*this).trace(trc); } - diff --git a/servo/components/script/dom/promise.rs b/servo/components/script/dom/promise.rs index b2a2bfdc8bdb..136890234625 100644 --- a/servo/components/script/dom/promise.rs +++ b/servo/components/script/dom/promise.rs @@ -16,6 +16,7 @@ use dom::bindings::codegen::Bindings::PromiseBinding::AnyCallback; use dom::bindings::conversions::root_from_object; use dom::bindings::error::{Error, Fallible}; use dom::bindings::reflector::{DomObject, MutDomObject, Reflector}; +use dom::bindings::utils::AsCCharPtrPtr; use dom::globalscope::GlobalScope; use dom::promisenativehandler::PromiseNativeHandler; use dom_struct::dom_struct; @@ -55,7 +56,7 @@ impl PromiseHelper for Rc { self.permanent_js_root.set(ObjectValue(*obj)); assert!(AddRawValueRoot(cx, self.permanent_js_root.get_unsafe(), - b"Promise::root\0" as *const _ as *const _)); + b"Promise::root\0".as_c_char_ptr())); } }