aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/Configuration.py
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/codegen/Configuration.py')
-rw-r--r--components/script/dom/bindings/codegen/Configuration.py59
1 files changed, 32 insertions, 27 deletions
diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py
index 22efa56f6d7..8944070f09c 100644
--- a/components/script/dom/bindings/codegen/Configuration.py
+++ b/components/script/dom/bindings/codegen/Configuration.py
@@ -166,28 +166,37 @@ class Descriptor(DescriptorProvider):
# If we're concrete, we need to crawl our ancestor interfaces and mark
# them as having a concrete descendant.
self.concrete = desc.get('concrete', True)
+
+ self.operations = {
+ 'IndexedGetter': None,
+ 'IndexedSetter': None,
+ 'IndexedCreator': None,
+ 'IndexedDeleter': None,
+ 'NamedGetter': None,
+ 'NamedSetter': None,
+ 'NamedCreator': None,
+ 'NamedDeleter': None,
+ 'Stringifier': None,
+ }
+
+ def addOperation(operation, m):
+ if not self.operations[operation]:
+ self.operations[operation] = m
+
+ # Since stringifiers go on the prototype, we only need to worry
+ # about our own stringifier, not those of our ancestor interfaces.
+ for m in self.interface.members:
+ if m.isMethod() and m.isStringifier():
+ addOperation('Stringifier', m)
+
if self.concrete:
self.proxy = False
- operations = {
- 'IndexedGetter': None,
- 'IndexedSetter': None,
- 'IndexedCreator': None,
- 'IndexedDeleter': None,
- 'NamedGetter': None,
- 'NamedSetter': None,
- 'NamedCreator': None,
- 'NamedDeleter': None,
- 'Stringifier': None
- }
iface = self.interface
while iface:
for m in iface.members:
if not m.isMethod():
continue
- def addOperation(operation, m):
- if not operations[operation]:
- operations[operation] = m
def addIndexedOrNamedOperation(operation, m):
self.proxy = True
if m.isIndexed():
@@ -196,24 +205,20 @@ class Descriptor(DescriptorProvider):
assert m.isNamed()
operation = 'Named' + operation
addOperation(operation, m)
-
- if m.isStringifier():
- addOperation('Stringifier', m)
- else:
- if m.isGetter():
- addIndexedOrNamedOperation('Getter', m)
- if m.isSetter():
- addIndexedOrNamedOperation('Setter', m)
- if m.isCreator():
- addIndexedOrNamedOperation('Creator', m)
- if m.isDeleter():
- addIndexedOrNamedOperation('Deleter', m)
+
+ if m.isGetter():
+ addIndexedOrNamedOperation('Getter', m)
+ if m.isSetter():
+ addIndexedOrNamedOperation('Setter', m)
+ if m.isCreator():
+ addIndexedOrNamedOperation('Creator', m)
+ if m.isDeleter():
+ addIndexedOrNamedOperation('Deleter', m)
iface.setUserData('hasConcreteDescendant', True)
iface = iface.parent
if self.proxy:
- self.operations = operations
iface = self.interface
while iface:
iface.setUserData('hasProxyDescendant', True)