aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-10-09 23:22:59 -0600
committerbors-servo <metajack+bors@gmail.com>2015-10-09 23:22:59 -0600
commit9cccd98254191b1663dcaee9010eee63fa8074a3 (patch)
tree5643b854c9e7d75138a562985492c3bec8bd64de /components/script
parent1192efed505ca19a395f22cd5e5733e8c57a6e82 (diff)
parent7301609c18105395467b94d75023d58188578a73 (diff)
downloadservo-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')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py6
-rw-r--r--components/script/dom/bindings/utils.rs13
2 files changed, 12 insertions, 7 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index b154bbdcf5a..8a66a99cb38 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2357,11 +2357,11 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod):
if self.descriptor.concrete:
if self.descriptor.proxy:
- domClass = "&Class"
+ domClass = "Some(&Class)"
else:
- domClass = "&Class.dom_class"
+ domClass = "Some(&Class.dom_class)"
else:
- domClass = "ptr::null()"
+ domClass = "None"
if self.descriptor.interface.hasInterfaceObject():
if self.descriptor.interface.ctor():
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));
}
}