diff options
author | Chris Manchester <cmanchester@mozilla.com> | 2015-01-18 17:12:35 -0500 |
---|---|---|
committer | Chris Manchester <cmanchester@mozilla.com> | 2015-02-20 11:35:16 -0800 |
commit | 00f863b4fea0cac93dd2d77964d4b2e6f1f5ccba (patch) | |
tree | f92ccae9866d0042ae858b645fed4b61fba67776 /components/script/dom/bindings/codegen/Configuration.py | |
parent | d1c8ed4359c47cd047e5ca3edfa37e8692058644 (diff) | |
download | servo-00f863b4fea0cac93dd2d77964d4b2e6f1f5ccba.tar.gz servo-00f863b4fea0cac93dd2d77964d4b2e6f1f5ccba.zip |
Add stringifier method support to CodegenRust.py (fixes #1986)
Add a stringifier to URLUtils (Location). (fixes #4605)
wpt metadata updates for #4605
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) |