From 05e456d0d2b2c67dfdd7a593aa1514d6bf125b10 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 16 Dec 2015 00:39:22 +0100 Subject: [PATCH 1/3] Do not export GetProtoObject if the interface has no descendants --- components/script/dom/bindings/codegen/CodegenRust.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 75de595694c..199ec0c28ce 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2576,7 +2576,7 @@ class CGGetProtoObjectMethod(CGGetPerInterfaceObject): """ def __init__(self, descriptor): CGGetPerInterfaceObject.__init__(self, descriptor, "GetProtoObject", - "PrototypeList::", pub=True) + "PrototypeList::", pub=descriptor.hasDescendants()) def definition_body(self): return CGList([ @@ -2593,7 +2593,7 @@ class CGGetConstructorObjectMethod(CGGetPerInterfaceObject): """ def __init__(self, descriptor): CGGetPerInterfaceObject.__init__(self, descriptor, "GetConstructorObject", - "constructors::") + "constructors::", pub=descriptor.hasDescendants()) def definition_body(self): return CGList([ From 372da02a4273086ce52ea845f7cb4d0acea77742 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 16 Dec 2015 00:40:37 +0100 Subject: [PATCH 2/3] Link [Abstract] to the existing concrete descriptor field This makes codegen not emit anything strictly related to the interface which are never used in the case of abstract interfaces, such as the Wrap method or the DOMJSClass. --- components/script/dom/bindings/codegen/CodegenRust.py | 3 ++- components/script/dom/bindings/codegen/Configuration.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 199ec0c28ce..bb85fac6533 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -4986,7 +4986,8 @@ class CGDescriptor(CGThing): cgThings.append(CGWrapMethod(descriptor)) if not descriptor.interface.isCallback(): - cgThings.append(CGIDLInterface(descriptor)) + if descriptor.concrete or descriptor.hasDescendants(): + cgThings.append(CGIDLInterface(descriptor)) cgThings.append(CGInterfaceTrait(descriptor)) if descriptor.weakReferenceable: cgThings.append(CGWeakReferenceableTrait(descriptor)) diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index d0af7e37929..58958b61dab 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -180,7 +180,7 @@ class Descriptor(DescriptorProvider): # If we're concrete, we need to crawl our ancestor interfaces and mark # them as having a concrete descendant. self.concrete = (not self.interface.isCallback() and - desc.get('concrete', True)) + not self.interface.getExtendedAttribute("Abstract")) self.hasUnforgeableMembers = (self.concrete and any(MemberIsUnforgeable(m, self) for m in self.interface.members)) From 22d3213737ba7c1af833cb339cdc50ebbfa2471a Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 16 Dec 2015 00:42:20 +0100 Subject: [PATCH 3/3] Mark CSS as [Abstract] It is never instantiated. --- components/script/dom/webidls/CSS.webidl | 1 + 1 file changed, 1 insertion(+) diff --git a/components/script/dom/webidls/CSS.webidl b/components/script/dom/webidls/CSS.webidl index 4ad2f07d893..7b5e31b0160 100644 --- a/components/script/dom/webidls/CSS.webidl +++ b/components/script/dom/webidls/CSS.webidl @@ -6,6 +6,7 @@ * http://dev.w3.org/csswg/cssom/#the-css-interface */ +[Abstract] interface CSS { [Throws] static DOMString escape(DOMString ident);