aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/Configuration.py
diff options
context:
space:
mode:
authorChris Manchester <cmanchester@mozilla.com>2015-01-18 17:12:35 -0500
committerChris Manchester <cmanchester@mozilla.com>2015-02-20 11:35:16 -0800
commit00f863b4fea0cac93dd2d77964d4b2e6f1f5ccba (patch)
treef92ccae9866d0042ae858b645fed4b61fba67776 /components/script/dom/bindings/codegen/Configuration.py
parentd1c8ed4359c47cd047e5ca3edfa37e8692058644 (diff)
downloadservo-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.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)