diff options
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 22 | ||||
-rw-r--r-- | components/script/dom/bindings/codegen/Configuration.py | 3 |
2 files changed, 23 insertions, 2 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 5b3a3de2f18..d0b45e350a3 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1722,6 +1722,25 @@ class CGNamespace(CGWrapper): return CGNamespace(namespaces[0], inner, public=public) +def EventTargetEnum(desc): + protochain = desc.prototypeChain + if protochain[0] != "EventTarget": + return "None" + + inner = "" + name = desc.interface.identifier.name + if desc.interface.getUserData("hasConcreteDescendant", False): + inner = "(::dom::%s::%sTypeId::%s)" % (name.lower(), name, name) + prev_proto = "" + for proto in reversed(protochain): + if prev_proto != "": + inner = "(::dom::%s::%sTypeId::%s%s)" % (proto.lower(), proto, prev_proto, inner) + prev_proto = proto + if inner == "": + return "None" + return "Some%s" % inner + + def DOMClass(descriptor): protoList = ['PrototypeList::ID::' + proto for proto in descriptor.prototypeChain] # Pad out the list to the right length with ID::Count so we @@ -1734,7 +1753,8 @@ def DOMClass(descriptor): DOMClass { interface_chain: [ %s ], native_hooks: &sNativePropertyHooks, -}""" % prototypeChainString + type_id: %s, +}""" % (prototypeChainString, EventTargetEnum(descriptor)) class CGDOMJSClass(CGThing): diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index 1a88968619b..2573e96fc78 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -223,8 +223,9 @@ class Descriptor(DescriptorProvider): if m.isDeleter(): addIndexedOrNamedOperation('Deleter', m) - iface.setUserData('hasConcreteDescendant', True) iface = iface.parent + if iface: + iface.setUserData('hasConcreteDescendant', True) if self.proxy: iface = self.interface |