aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2023-05-26 01:02:38 -0400
committerJosh Matthews <josh@joshmatthews.net>2023-05-26 01:02:38 -0400
commit747a99d3f6ddc1f3e3cf539cf873120efd69ef46 (patch)
tree5341eca8cc3c40ca42a25a12cca9356a965006cd /components/script/dom/bindings/codegen
parent4998c65c423f995149f4b314d8ff68024c24cc72 (diff)
downloadservo-747a99d3f6ddc1f3e3cf539cf873120efd69ef46.tar.gz
servo-747a99d3f6ddc1f3e3cf539cf873120efd69ef46.zip
Extract bodies of DefineDOMInterface and GetProtoObject/GetConstructorObject out of generated bindings.
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py41
1 files changed, 12 insertions, 29 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 1bf2b917a9d..828a0e380c0 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -3493,21 +3493,8 @@ class CGGetPerInterfaceObject(CGAbstractMethod):
def definition_body(self):
return CGGeneric("""
-unsafe {
- assert!(((*get_object_class(global.get())).flags & JSCLASS_DOM_GLOBAL) != 0);
-
- /* 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)s as usize]);
- if !rval.get().is_null() {
- return;
- }
-
- CreateInterfaceObjects(cx, global, proto_or_iface_array);
- rval.set((*proto_or_iface_array)[%(id)s as usize]);
- assert!(!rval.get().is_null());
-}
-""" % {"id": self.id})
+ get_per_interface_object_handle(cx, global, %s as usize, CreateInterfaceObjects, rval)
+ """ % self.id)
class CGGetProtoObjectMethod(CGGetPerInterfaceObject):
@@ -3655,25 +3642,19 @@ class CGDefineDOMInterfaceMethod(CGAbstractMethod):
]
CGAbstractMethod.__init__(self, descriptor, 'DefineDOMInterface',
'void', args, pub=True)
+ if self.descriptor.interface.isCallback() or self.descriptor.interface.isNamespace():
+ idPrefix = "PrototypeList::Constructor"
+ else:
+ idPrefix = "PrototypeList::ID"
+ self.id = idPrefix + "::" + MakeNativeName(self.descriptor.name)
def define(self):
return CGAbstractMethod.define(self)
def definition_body(self):
- if self.descriptor.interface.isCallback() or self.descriptor.interface.isNamespace():
- function = "GetConstructorObject"
- else:
- function = "GetProtoObject"
- return CGGeneric("""\
-assert!(!global.get().is_null());
-
-if !ConstructorEnabled(cx, global) {
- return;
-}
-
-rooted!(in(*cx) let mut proto = ptr::null_mut::<JSObject>());
-%s(cx, global, proto.handle_mut());
-assert!(!proto.is_null());""" % (function,))
+ return CGGeneric("""
+ define_dom_interface(cx, global, %s as usize, CreateInterfaceObjects, ConstructorEnabled)
+ """ % self.id)
def needCx(returnType, arguments, considerTypes):
@@ -6453,6 +6434,8 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'crate::dom::bindings::interface::define_guarded_methods',
'crate::dom::bindings::interface::define_guarded_properties',
'crate::dom::bindings::interface::is_exposed_in',
+ '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::push_new_element_queue',
'crate::dom::bindings::iterable::Iterable',