diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-02-20 13:01:02 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-02-20 13:01:02 -0700 |
commit | 172db80703fc19ff078f2f46fb299cadd99a483b (patch) | |
tree | 09184aec85214913683a7dc81b39bdcb091de10c /components/script/dom/bindings/codegen/Configuration.py | |
parent | 276f74b1ddec9dfa4cb053eb0802f95bd5ed6b66 (diff) | |
parent | 00f863b4fea0cac93dd2d77964d4b2e6f1f5ccba (diff) | |
download | servo-172db80703fc19ff078f2f46fb299cadd99a483b.tar.gz servo-172db80703fc19ff078f2f46fb299cadd99a483b.zip |
auto merge of #4882 : chmanchester/servo/stringifiers, r=Ms2ger
Diffstat (limited to 'components/script/dom/bindings/codegen/Configuration.py')
-rw-r--r-- | components/script/dom/bindings/codegen/Configuration.py | 59 |
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) |