mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Add stringifier method support to CodegenRust.py (fixes #1986)
Add a stringifier to URLUtils (Location). (fixes #4605) wpt metadata updates for #4605
This commit is contained in:
parent
d1c8ed4359
commit
00f863b4fe
6 changed files with 69 additions and 52 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue