diff options
Diffstat (limited to 'components/script/dom/bindings/interface.rs')
-rw-r--r-- | components/script/dom/bindings/interface.rs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index fbab9bfcf32..bf14d8ef496 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -537,10 +537,24 @@ unsafe extern "C" fn non_new_constructor( false } +pub enum ProtoOrIfaceIndex { + ID(PrototypeList::ID), + Constructor(PrototypeList::Constructor), +} + +impl Into<usize> for ProtoOrIfaceIndex { + fn into(self) -> usize { + match self { + ProtoOrIfaceIndex::ID(id) => id as usize, + ProtoOrIfaceIndex::Constructor(constructor) => constructor as usize, + } + } +} + pub fn get_per_interface_object_handle( cx: SafeJSContext, global: HandleObject, - id: usize, + id: ProtoOrIfaceIndex, creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray), mut rval: MutableHandleObject, ) { @@ -549,13 +563,14 @@ pub fn get_per_interface_object_handle( /* Check to see whether the interface objects are already installed */ let proto_or_iface_array = get_proto_or_iface_array(global.get()); - rval.set((*proto_or_iface_array)[id]); + let index: usize = id.into(); + rval.set((*proto_or_iface_array)[index]); if !rval.get().is_null() { return; } creator(cx, global, proto_or_iface_array); - rval.set((*proto_or_iface_array)[id]); + rval.set((*proto_or_iface_array)[index]); assert!(!rval.get().is_null()); } } @@ -563,7 +578,7 @@ pub fn get_per_interface_object_handle( pub fn define_dom_interface( cx: SafeJSContext, global: HandleObject, - id: usize, + id: ProtoOrIfaceIndex, creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray), enabled: fn(SafeJSContext, HandleObject) -> bool, ) { |