aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-10-15 08:33:46 -0400
committerGitHub <noreply@github.com>2019-10-15 08:33:46 -0400
commitc5d6bb604d8d03d775cfc59e8bf2afdda2301e7d (patch)
tree744a1b430cc2de4d20b3dd3bfa88169b84c9d719 /components/script/dom/bindings/codegen/CodegenRust.py
parent1f6402465579e787e63b34b24ac46593c27c2f3d (diff)
parentb697621b05d5c0b741d377637cb9c16ef31986b9 (diff)
downloadservo-c5d6bb604d8d03d775cfc59e8bf2afdda2301e7d.tar.gz
servo-c5d6bb604d8d03d775cfc59e8bf2afdda2301e7d.zip
Auto merge of #24377 - saschanaz:record-support, r=nox
Support WebIDL `record<>` <!-- Please describe your changes on the following line: --> Rebased @taki-zaro's work (#20318). --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #15012 and closes #20318. Possibly also closes #21463. <!-- Either: --> - [x] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/24377) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py37
1 files changed, 30 insertions, 7 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 103450f78f3..01b7fc698ba 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -77,14 +77,13 @@ def innerContainerType(type):
def wrapInNativeContainerType(type, inner):
if type.isSequence():
- containerType = "Vec"
+ return CGWrapper(inner, pre="Vec<", post=">")
elif type.isRecord():
- containerType = "MozMap"
+ key = type.inner.keyType if type.nullable() else type.keyType
+ return CGRecord(key, inner)
else:
raise TypeError("Unexpected container type %s", type)
- return CGWrapper(inner, pre=containerType + "<", post=">")
-
builtinNames = {
IDLType.Tags.bool: 'bool',
@@ -1905,6 +1904,30 @@ class CGWrapper(CGThing):
return self.pre + defn + self.post
+class CGRecord(CGThing):
+ """
+ CGThing that wraps value CGThing in record with key type equal to keyType parameter
+ """
+ def __init__(self, keyType, value):
+ CGThing.__init__(self)
+ assert keyType.isString()
+ self.keyType = keyType
+ self.value = value
+
+ def define(self):
+ if self.keyType.isByteString():
+ keyDef = "ByteString"
+ elif self.keyType.isDOMString():
+ keyDef = "DOMString"
+ elif self.keyType.isUSVString():
+ keyDef = "USVString"
+ else:
+ assert False
+
+ defn = keyDef + ", " + self.value.define()
+ return "Record<" + defn + ">"
+
+
class CGImports(CGWrapper):
"""
Generates the appropriate import/use statements.
@@ -2024,7 +2047,7 @@ class CGImports(CGWrapper):
extras += [descriptor.path, descriptor.bindingPath]
parentName = descriptor.getParentName()
elif t.isType() and t.isRecord():
- extras += ['crate::dom::bindings::mozmap::MozMap']
+ extras += ['crate::dom::bindings::record::Record']
elif isinstance(t, IDLPromiseType):
extras += ['crate::dom::promise::Promise']
else:
@@ -2373,7 +2396,7 @@ def UnionTypes(descriptors, dictionaries, callbacks, typedefs, config):
'crate::dom::bindings::conversions::StringificationBehavior',
'crate::dom::bindings::conversions::root_from_handlevalue',
'std::ptr::NonNull',
- 'crate::dom::bindings::mozmap::MozMap',
+ 'crate::dom::bindings::record::Record',
'crate::dom::bindings::num::Finite',
'crate::dom::bindings::root::DomRoot',
'crate::dom::bindings::str::ByteString',
@@ -6054,7 +6077,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'crate::dom::bindings::proxyhandler::ensure_expando_object',
'crate::dom::bindings::proxyhandler::fill_property_descriptor',
'crate::dom::bindings::proxyhandler::get_expando_object',
- 'crate::dom::bindings::mozmap::MozMap',
+ 'crate::dom::bindings::record::Record',
'std::ptr::NonNull',
'crate::dom::bindings::num::Finite',
'crate::dom::bindings::str::ByteString',