aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py12
-rw-r--r--components/script/dom/testbinding.rs13
-rw-r--r--components/script/dom/webidls/TestBinding.webidl4
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);