Auto merge of #9419 - psdh:includeTypedef, r=nox

generate typedefs in CodegenRust.

fixes #9384

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9419)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-01-26 22:10:57 +05:30
commit a75f2cecda
2 changed files with 16 additions and 0 deletions

View file

@ -5286,6 +5286,7 @@ class CGBindingRoot(CGThing):
isCallback=True) isCallback=True)
enums = config.getEnums(webIDLFile) enums = config.getEnums(webIDLFile)
typedefs = config.getTypedefs(webIDLFile)
if not (descriptors or dictionaries or mainCallbacks or callbackDescriptors or enums): if not (descriptors or dictionaries or mainCallbacks or callbackDescriptors or enums):
self.root = None self.root = None
@ -5294,6 +5295,17 @@ class CGBindingRoot(CGThing):
# Do codegen for all the enums. # Do codegen for all the enums.
cgthings = [CGEnum(e) for e in enums] cgthings = [CGEnum(e) for e in enums]
# Do codegen for all the typdefs
for t in typedefs:
if t.innerType.isUnion():
cgthings.extend([CGGeneric("\npub type %s = %s;\n\n" % (t.identifier.name,
"UnionTypes::" + str(t.innerType)))])
else:
assert not typeNeedsRooting(t.innerType, config.getDescriptorProvider)
cgthings.extend([CGGeneric("\npub type %s = " % (t.identifier.name)),
getRetvalDeclarationForType(t.innerType, config.getDescriptorProvider()),
CGGeneric(";\n\n")])
# Do codegen for all the dictionaries. # Do codegen for all the dictionaries.
cgthings.extend([CGDictionary(d, config.getDescriptorProvider()) cgthings.extend([CGDictionary(d, config.getDescriptorProvider())
for d in dictionaries]) for d in dictionaries])

View file

@ -60,6 +60,7 @@ class Configuration:
descriptor.uniqueImplementation = len(otherDescriptors) == 1 descriptor.uniqueImplementation = len(otherDescriptors) == 1
self.enums = [e for e in parseData if e.isEnum()] self.enums = [e for e in parseData if e.isEnum()]
self.typedefs = [e for e in parseData if e.isTypedef()]
self.dictionaries = [d for d in parseData if d.isDictionary()] self.dictionaries = [d for d in parseData if d.isDictionary()]
self.callbacks = [c for c in parseData if self.callbacks = [c for c in parseData if
c.isCallback() and not c.isInterface()] c.isCallback() and not c.isInterface()]
@ -90,6 +91,9 @@ class Configuration:
def getEnums(self, webIDLFile): def getEnums(self, webIDLFile):
return filter(lambda e: e.filename() == webIDLFile, self.enums) return filter(lambda e: e.filename() == webIDLFile, self.enums)
def getTypedefs(self, webIDLFile):
return filter(lambda e: e.filename() == webIDLFile, self.typedefs)
@staticmethod @staticmethod
def _filterForFile(items, webIDLFile=""): def _filterForFile(items, webIDLFile=""):
"""Gets the items that match the given filters.""" """Gets the items that match the given filters."""