diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-01-26 22:10:57 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-01-26 22:10:57 +0530 |
commit | a75f2cecda9b259dcfe576de53f690d9c96a36d8 (patch) | |
tree | 6407730cae2fa501dc3457ac5ce3109ef94b33fc /components/script/dom | |
parent | a19b14313a333c5e895e481768237275f564044f (diff) | |
parent | d6df844ae532b45905ed616118d0d70903c0b84d (diff) | |
download | servo-a75f2cecda9b259dcfe576de53f690d9c96a36d8.tar.gz servo-a75f2cecda9b259dcfe576de53f690d9c96a36d8.zip |
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 -->
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 12 | ||||
-rw-r--r-- | components/script/dom/bindings/codegen/Configuration.py | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 395d095c937..8d539136802 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -5286,6 +5286,7 @@ class CGBindingRoot(CGThing): isCallback=True) enums = config.getEnums(webIDLFile) + typedefs = config.getTypedefs(webIDLFile) if not (descriptors or dictionaries or mainCallbacks or callbackDescriptors or enums): self.root = None @@ -5294,6 +5295,17 @@ class CGBindingRoot(CGThing): # Do codegen for all the 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. cgthings.extend([CGDictionary(d, config.getDescriptorProvider()) for d in dictionaries]) diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index ac78e52c071..762998b91ac 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -60,6 +60,7 @@ class Configuration: descriptor.uniqueImplementation = len(otherDescriptors) == 1 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.callbacks = [c for c in parseData if c.isCallback() and not c.isInterface()] @@ -90,6 +91,9 @@ class Configuration: def getEnums(self, webIDLFile): return filter(lambda e: e.filename() == webIDLFile, self.enums) + def getTypedefs(self, webIDLFile): + return filter(lambda e: e.filename() == webIDLFile, self.typedefs) + @staticmethod def _filterForFile(items, webIDLFile=""): """Gets the items that match the given filters.""" |