Bug 764456 part 1. Flag consequential interfaces in the WebIDL data model. r=khuey

This commit is contained in:
Boris Zbarsky 2012-06-22 16:18:50 -04:00
Родитель 4214241dca
Коммит 73dde405dc
2 изменённых файлов: 17 добавлений и 5 удалений

Просмотреть файл

@ -1564,11 +1564,11 @@ for (uint32_t i = 0; i < length; ++i) {
elif descriptor.workers: elif descriptor.workers:
templateBody += "${declName} = &${val}.toObject();" templateBody += "${declName} = &${val}.toObject();"
else: else:
# External interface. We always have a holder for these, # Either external, or new-binding non-castable. We always have a
# because we don't actually know whether we have to addref # holder for these, because we don't actually know whether we have
# when unwrapping or not. So we just pass an # to addref when unwrapping or not. So we just pass an
# getter_AddRefs(nsRefPtr) to XPConnect and if we'll need # getter_AddRefs(nsRefPtr) to XPConnect and if we'll need a release
# a release it'll put a non-null pointer in there. # it'll put a non-null pointer in there.
if forceOwningType: if forceOwningType:
# Don't return a holderType in this case; our declName # Don't return a holderType in this case; our declName
# will just own stuff. # will just own stuff.

Просмотреть файл

@ -351,6 +351,9 @@ class IDLExternalInterface(IDLObjectWithIdentifier):
def isInterface(self): def isInterface(self):
return True return True
def isConsequential(self):
return False
def addExtendedAttributes(self, attrs): def addExtendedAttributes(self, attrs):
assert len(attrs) == 0 assert len(attrs) == 0
@ -368,6 +371,7 @@ class IDLInterface(IDLObjectWithScope):
self._finished = False self._finished = False
self.members = list(members) # clone the list self.members = list(members) # clone the list
self.implementedInterfaces = set() self.implementedInterfaces = set()
self._consequential = False
IDLObjectWithScope.__init__(self, location, parentScope, name) IDLObjectWithScope.__init__(self, location, parentScope, name)
@ -459,6 +463,8 @@ class IDLInterface(IDLObjectWithScope):
for iface in sorted(self.getConsequentialInterfaces(), for iface in sorted(self.getConsequentialInterfaces(),
cmp=cmp, cmp=cmp,
key=lambda x: x.identifier.name): key=lambda x: x.identifier.name):
# Flag the interface as being someone's consequential interface
iface.setConsequential()
additionalMembers = iface.originalMembers; additionalMembers = iface.originalMembers;
for additionalMember in additionalMembers: for additionalMember in additionalMembers:
for member in self.members: for member in self.members:
@ -507,6 +513,12 @@ class IDLInterface(IDLObjectWithScope):
def isExternal(self): def isExternal(self):
return False return False
def setConsequential(self):
self._consequential = True
def isConsequential(self):
return self._consequential
def setCallback(self, value): def setCallback(self, value):
self._callback = value self._callback = value