diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 12 | ||||
-rw-r--r-- | components/script/dom/testbinding.rs | 13 | ||||
-rw-r--r-- | components/script/dom/webidls/TestBinding.webidl | 4 |
3 files changed, 24 insertions, 5 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 2513b5b92eb..757234fdb0f 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -87,6 +87,11 @@ def stripTrailingWhitespace(text): return '\n'.join(lines) + tail +def innerSequenceType(type): + assert type.isSequence() + return type.inner.inner if type.nullable() else type.inner + + def MakeNativeName(name): return name[0].upper() + name[1:] @@ -713,7 +718,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None, raise TypeError("Can't handle array arguments yet") if type.isSequence(): - innerInfo = getJSToNativeConversionInfo(type.unroll(), descriptorProvider) + innerInfo = getJSToNativeConversionInfo(innerSequenceType(type), descriptorProvider) declType = CGWrapper(innerInfo.declType, pre="Vec<", post=">") config = getConversionConfigForType(type, isEnforceRange, isClamp, treatNullAs) @@ -1302,8 +1307,7 @@ def getRetvalDeclarationForType(returnType, descriptorProvider): if returnType.isObject() or returnType.isSpiderMonkeyInterface(): return CGGeneric("*mut JSObject") if returnType.isSequence(): - inner = returnType.unroll() - result = getRetvalDeclarationForType(inner, descriptorProvider) + result = getRetvalDeclarationForType(innerSequenceType(returnType), descriptorProvider) result = CGWrapper(result, pre="Vec<", post=">") if returnType.nullable(): result = CGWrapper(result, pre="Option<", post=">") @@ -3743,7 +3747,7 @@ def getUnionTypeTemplateVars(type, descriptorProvider): typeName = name elif type.isSequence(): name = type.name - inner = getUnionTypeTemplateVars(type.unroll(), descriptorProvider) + inner = getUnionTypeTemplateVars(innerSequenceType(type), descriptorProvider) typeName = "Vec<" + inner["typeName"] + ">" elif type.isArray(): name = str(type) diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index 64fb6fb7578..66a6f97f333 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::FunctionBinding::Function; use dom::bindings::codegen::Bindings::TestBindingBinding; use dom::bindings::codegen::Bindings::TestBindingBinding::{TestBindingMethods, TestDictionary}; use dom::bindings::codegen::Bindings::TestBindingBinding::{TestDictionaryDefaults, TestEnum}; -use dom::bindings::codegen::UnionTypes::{BlobOrBoolean, BlobOrBlobSequence}; +use dom::bindings::codegen::UnionTypes::{BlobOrBoolean, BlobOrBlobSequence, LongOrLongSequenceSequence}; use dom::bindings::codegen::UnionTypes::{BlobOrString, BlobOrUnsignedLong, EventOrString}; use dom::bindings::codegen::UnionTypes::{EventOrUSVString, HTMLElementOrLong}; use dom::bindings::codegen::UnionTypes::{HTMLElementOrUnsignedLongOrStringOrBoolean, LongSequenceOrBoolean}; @@ -572,6 +572,17 @@ impl TestBindingMethods for TestBinding { fn FuncControlledMethodDisabled(&self) {} fn FuncControlledMethodEnabled(&self) {} + fn PassSequenceSequence(&self, _seq: Vec<Vec<i32>>) {} + fn ReturnSequenceSequence(&self) -> Vec<Vec<i32>> { vec![] } + fn PassUnionSequenceSequence(&self, seq: LongOrLongSequenceSequence) { + match seq { + LongOrLongSequenceSequence::Long(_) => (), + LongOrLongSequenceSequence::LongSequenceSequence(seq) => { + let _seq: Vec<Vec<i32>> = seq; + } + } + } + #[allow(unsafe_code)] fn CrashHard(&self) { static READ_ONLY_VALUE: i32 = 0; diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl index 355141a4d92..5ead5918ecc 100644 --- a/components/script/dom/webidls/TestBinding.webidl +++ b/components/script/dom/webidls/TestBinding.webidl @@ -409,6 +409,10 @@ interface TestBinding { void passVariadicAny(any... args); void passVariadicObject(object... args); + void passSequenceSequence(sequence<sequence<long>> seq); + sequence<sequence<long>> returnSequenceSequence(); + void passUnionSequenceSequence((long or sequence<sequence<long>>) seq); + static attribute boolean booleanAttributeStatic; static void receiveVoidStatic(); boolean BooleanMozPreference(DOMString pref_name); |