Make {get,ensure}_expando_object unsafe.

They trust the caller-provided raw pointers to be valid.
This commit is contained in:
Ms2ger 2017-02-07 11:44:38 +01:00
parent bd431039b9
commit b57abc19da

View file

@ -159,30 +159,26 @@ pub unsafe extern "C" fn get_prototype_if_ordinary(_: *mut JSContext,
} }
/// Get the expando object, or null if there is none. /// Get the expando object, or null if there is none.
pub fn get_expando_object(obj: HandleObject, expando: MutableHandleObject) { pub unsafe fn get_expando_object(obj: HandleObject, expando: MutableHandleObject) {
unsafe { assert!(is_dom_proxy(obj.get()));
assert!(is_dom_proxy(obj.get())); let val = GetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO);
let val = GetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO); expando.set(if val.is_undefined() {
expando.set(if val.is_undefined() { ptr::null_mut()
ptr::null_mut() } else {
} else { val.to_object()
val.to_object() });
});
}
} }
/// Get the expando object, or create it if it doesn't exist yet. /// Get the expando object, or create it if it doesn't exist yet.
/// Fails on JSAPI failure. /// Fails on JSAPI failure.
pub fn ensure_expando_object(cx: *mut JSContext, obj: HandleObject, expando: MutableHandleObject) { pub unsafe fn ensure_expando_object(cx: *mut JSContext, obj: HandleObject, expando: MutableHandleObject) {
unsafe { assert!(is_dom_proxy(obj.get()));
assert!(is_dom_proxy(obj.get())); get_expando_object(obj, expando);
get_expando_object(obj, expando); if expando.is_null() {
if expando.is_null() { expando.set(JS_NewObjectWithGivenProto(cx, ptr::null_mut(), HandleObject::null()));
expando.set(JS_NewObjectWithGivenProto(cx, ptr::null_mut(), HandleObject::null())); assert!(!expando.is_null());
assert!(!expando.is_null());
SetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO, &ObjectValue(expando.get())); SetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO, &ObjectValue(expando.get()));
}
} }
} }