diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-10-09 23:22:59 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-10-09 23:22:59 -0600 |
commit | 9cccd98254191b1663dcaee9010eee63fa8074a3 (patch) | |
tree | 5643b854c9e7d75138a562985492c3bec8bd64de /components/script/dom/bindings/utils.rs | |
parent | 1192efed505ca19a395f22cd5e5733e8c57a6e82 (diff) | |
parent | 7301609c18105395467b94d75023d58188578a73 (diff) | |
download | servo-9cccd98254191b1663dcaee9010eee63fa8074a3.tar.gz servo-9cccd98254191b1663dcaee9010eee63fa8074a3.zip |
Auto merge of #7948 - kunitsyn:master, r=Manishearth
Changed dom_class type to Option<&'static DOMClass> to fix #7942
I have a feeling that converting `Option<&T>` to `*const libc::c_void` could be less explicit.
Was there any way to do it shorter?
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7948)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bindings/utils.rs')
-rw-r--r-- | components/script/dom/bindings/utils.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 9ebd676e90e..d00c164d0a9 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -215,7 +215,7 @@ pub fn do_create_interface_objects(cx: *mut JSContext, proto_class: Option<&'static JSClass>, constructor: Option<(NonNullJSNative, &'static str, u32)>, named_constructors: &[(NonNullJSNative, &'static str, u32)], - dom_class: *const DOMClass, + dom_class: Option<&'static DOMClass>, members: &'static NativeProperties, rval: MutableHandleObject) { if let Some(proto_class) = proto_class { @@ -223,10 +223,15 @@ pub fn do_create_interface_objects(cx: *mut JSContext, proto_class, members, rval); } - unsafe { - if !rval.get().is_null() { + if !rval.get().is_null() { + let dom_class_ptr = match dom_class { + Some(dom_class) => dom_class as *const DOMClass as *const libc::c_void, + None => ptr::null() as *const libc::c_void, + }; + + unsafe { JS_SetReservedSlot(rval.get(), DOM_PROTO_INSTANCE_CLASS_SLOT, - PrivateValue(dom_class as *const libc::c_void)); + PrivateValue(dom_class_ptr)); } } |