mirror of
https://github.com/servo/servo.git
synced 2025-07-28 17:50:37 +01:00
Use an enum to pass the index value for interfaces/protos.
This commit is contained in:
parent
747a99d3f6
commit
7d9dc458af
2 changed files with 27 additions and 9 deletions
|
@ -3490,11 +3490,12 @@ class CGGetPerInterfaceObject(CGAbstractMethod):
|
||||||
CGAbstractMethod.__init__(self, descriptor, name,
|
CGAbstractMethod.__init__(self, descriptor, name,
|
||||||
'void', args, pub=pub)
|
'void', args, pub=pub)
|
||||||
self.id = idPrefix + "::" + MakeNativeName(self.descriptor.name)
|
self.id = idPrefix + "::" + MakeNativeName(self.descriptor.name)
|
||||||
|
self.variant = self.id.split('::')[-2]
|
||||||
|
|
||||||
def definition_body(self):
|
def definition_body(self):
|
||||||
return CGGeneric("""
|
return CGGeneric("""
|
||||||
get_per_interface_object_handle(cx, global, %s as usize, CreateInterfaceObjects, rval)
|
get_per_interface_object_handle(cx, global, ProtoOrIfaceIndex::%s(%s), CreateInterfaceObjects, rval)
|
||||||
""" % self.id)
|
""" % (self.variant, self.id))
|
||||||
|
|
||||||
|
|
||||||
class CGGetProtoObjectMethod(CGGetPerInterfaceObject):
|
class CGGetProtoObjectMethod(CGGetPerInterfaceObject):
|
||||||
|
@ -3647,14 +3648,15 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod):
|
||||||
else:
|
else:
|
||||||
idPrefix = "PrototypeList::ID"
|
idPrefix = "PrototypeList::ID"
|
||||||
self.id = idPrefix + "::" + MakeNativeName(self.descriptor.name)
|
self.id = idPrefix + "::" + MakeNativeName(self.descriptor.name)
|
||||||
|
self.variant = self.id.split('::')[-2]
|
||||||
|
|
||||||
def define(self):
|
def define(self):
|
||||||
return CGAbstractMethod.define(self)
|
return CGAbstractMethod.define(self)
|
||||||
|
|
||||||
def definition_body(self):
|
def definition_body(self):
|
||||||
return CGGeneric("""
|
return CGGeneric("""
|
||||||
define_dom_interface(cx, global, %s as usize, CreateInterfaceObjects, ConstructorEnabled)
|
define_dom_interface(cx, global, ProtoOrIfaceIndex::%s(%s), CreateInterfaceObjects, ConstructorEnabled)
|
||||||
""" % self.id)
|
""" % (self.variant, self.id))
|
||||||
|
|
||||||
|
|
||||||
def needCx(returnType, arguments, considerTypes):
|
def needCx(returnType, arguments, considerTypes):
|
||||||
|
@ -6425,17 +6427,18 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
||||||
'crate::dom::bindings::interface::ConstructorClassHook',
|
'crate::dom::bindings::interface::ConstructorClassHook',
|
||||||
'crate::dom::bindings::interface::InterfaceConstructorBehavior',
|
'crate::dom::bindings::interface::InterfaceConstructorBehavior',
|
||||||
'crate::dom::bindings::interface::NonCallbackInterfaceObjectClass',
|
'crate::dom::bindings::interface::NonCallbackInterfaceObjectClass',
|
||||||
|
'crate::dom::bindings::interface::ProtoOrIfaceIndex',
|
||||||
'crate::dom::bindings::interface::create_global_object',
|
'crate::dom::bindings::interface::create_global_object',
|
||||||
'crate::dom::bindings::interface::create_callback_interface_object',
|
'crate::dom::bindings::interface::create_callback_interface_object',
|
||||||
'crate::dom::bindings::interface::create_interface_prototype_object',
|
'crate::dom::bindings::interface::create_interface_prototype_object',
|
||||||
'crate::dom::bindings::interface::create_named_constructors',
|
'crate::dom::bindings::interface::create_named_constructors',
|
||||||
'crate::dom::bindings::interface::create_noncallback_interface_object',
|
'crate::dom::bindings::interface::create_noncallback_interface_object',
|
||||||
|
'crate::dom::bindings::interface::define_dom_interface',
|
||||||
'crate::dom::bindings::interface::define_guarded_constants',
|
'crate::dom::bindings::interface::define_guarded_constants',
|
||||||
'crate::dom::bindings::interface::define_guarded_methods',
|
'crate::dom::bindings::interface::define_guarded_methods',
|
||||||
'crate::dom::bindings::interface::define_guarded_properties',
|
'crate::dom::bindings::interface::define_guarded_properties',
|
||||||
'crate::dom::bindings::interface::is_exposed_in',
|
'crate::dom::bindings::interface::is_exposed_in',
|
||||||
'crate::dom::bindings::interface::get_per_interface_object_handle',
|
'crate::dom::bindings::interface::get_per_interface_object_handle',
|
||||||
'crate::dom::bindings::interface::define_dom_interface',
|
|
||||||
'crate::dom::bindings::htmlconstructor::pop_current_element_queue',
|
'crate::dom::bindings::htmlconstructor::pop_current_element_queue',
|
||||||
'crate::dom::bindings::htmlconstructor::push_new_element_queue',
|
'crate::dom::bindings::htmlconstructor::push_new_element_queue',
|
||||||
'crate::dom::bindings::iterable::Iterable',
|
'crate::dom::bindings::iterable::Iterable',
|
||||||
|
|
|
@ -537,10 +537,24 @@ unsafe extern "C" fn non_new_constructor(
|
||||||
false
|
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(
|
pub fn get_per_interface_object_handle(
|
||||||
cx: SafeJSContext,
|
cx: SafeJSContext,
|
||||||
global: HandleObject,
|
global: HandleObject,
|
||||||
id: usize,
|
id: ProtoOrIfaceIndex,
|
||||||
creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray),
|
creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray),
|
||||||
mut rval: MutableHandleObject,
|
mut rval: MutableHandleObject,
|
||||||
) {
|
) {
|
||||||
|
@ -549,13 +563,14 @@ pub fn get_per_interface_object_handle(
|
||||||
|
|
||||||
/* Check to see whether the interface objects are already installed */
|
/* Check to see whether the interface objects are already installed */
|
||||||
let proto_or_iface_array = get_proto_or_iface_array(global.get());
|
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() {
|
if !rval.get().is_null() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
creator(cx, global, proto_or_iface_array);
|
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());
|
assert!(!rval.get().is_null());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,7 +578,7 @@ pub fn get_per_interface_object_handle(
|
||||||
pub fn define_dom_interface(
|
pub fn define_dom_interface(
|
||||||
cx: SafeJSContext,
|
cx: SafeJSContext,
|
||||||
global: HandleObject,
|
global: HandleObject,
|
||||||
id: usize,
|
id: ProtoOrIfaceIndex,
|
||||||
creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray),
|
creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray),
|
||||||
enabled: fn(SafeJSContext, HandleObject) -> bool,
|
enabled: fn(SafeJSContext, HandleObject) -> bool,
|
||||||
) {
|
) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue