Support nullable typed arrays in codegen

This commit is contained in:
Igor Matuszewski 2018-03-13 13:05:04 +01:00
parent e025bbb079
commit 6beb32e28e
3 changed files with 5 additions and 2 deletions

View file

@ -882,7 +882,8 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
else: else:
unwrapFailureCode = failureCode unwrapFailureCode = failureCode
typeName = type.name typeName = type.unroll().name # unroll because it may be nullable
if isMember == "Union": if isMember == "Union":
typeName = "Heap" + typeName typeName = "Heap" + typeName
@ -902,7 +903,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if isMember == "Union": if isMember == "Union":
templateBody = "RootedTraceableBox::new(%s)" % templateBody templateBody = "RootedTraceableBox::new(%s)" % templateBody
declType = CGGeneric("typedarray::%s" % type.name) declType = CGGeneric("typedarray::%s" % typeName)
if type.nullable(): if type.nullable():
templateBody = "Some(%s)" % templateBody templateBody = "Some(%s)" % templateBody
declType = CGWrapper(declType, pre="Option<", post=">") declType = CGWrapper(declType, pre="Option<", post=">")

View file

@ -492,6 +492,7 @@ impl TestBindingMethods for TestBinding {
fn PassNullableInterface(&self, _: Option<&Blob>) {} fn PassNullableInterface(&self, _: Option<&Blob>) {}
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe fn PassNullableObject(&self, _: *mut JSContext, _: *mut JSObject) {} unsafe fn PassNullableObject(&self, _: *mut JSContext, _: *mut JSObject) {}
fn PassNullableTypedArray(&self, _: CustomAutoRooterGuard<Option<typedarray::Int8Array>>) { }
fn PassNullableUnion(&self, _: Option<HTMLElementOrLong>) {} fn PassNullableUnion(&self, _: Option<HTMLElementOrLong>) {}
fn PassNullableUnion2(&self, _: Option<EventOrString>) {} fn PassNullableUnion2(&self, _: Option<EventOrString>) {}
fn PassNullableUnion3(&self, _: Option<StringOrLongSequence>) {} fn PassNullableUnion3(&self, _: Option<StringOrLongSequence>) {}

View file

@ -294,6 +294,7 @@ interface TestBinding {
// void passNullableEnum(TestEnum? arg); // void passNullableEnum(TestEnum? arg);
void passNullableInterface(Blob? arg); void passNullableInterface(Blob? arg);
void passNullableObject(object? arg); void passNullableObject(object? arg);
void passNullableTypedArray(Int8Array? arg);
void passNullableUnion((HTMLElement or long)? arg); void passNullableUnion((HTMLElement or long)? arg);
void passNullableUnion2((Event or DOMString)? data); void passNullableUnion2((Event or DOMString)? data);
void passNullableUnion3((DOMString or sequence<long>)? data); void passNullableUnion3((DOMString or sequence<long>)? data);