mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 21:05:36 +00:00
Bug 1026080 part 2. Add binding codegen support for [] as a default value for sequence arguments and dictionary entries. r=khuey
This commit is contained in:
parent
6c70fe8c81
commit
f8dc563a90
@ -10,7 +10,7 @@ import string
|
||||
import math
|
||||
import textwrap
|
||||
|
||||
from WebIDL import BuiltinTypes, IDLBuiltinType, IDLNullValue, IDLSequenceType, IDLType, IDLAttribute, IDLUndefinedValue
|
||||
from WebIDL import BuiltinTypes, IDLBuiltinType, IDLNullValue, IDLSequenceType, IDLType, IDLAttribute, IDLUndefinedValue, IDLEmptySequenceValue
|
||||
from Configuration import NoSuchDescriptorError, getTypesFromDescriptor, getTypesFromDictionary, getTypesFromCallback, Descriptor
|
||||
|
||||
AUTOGENERATED_WARNING_COMMENT = \
|
||||
@ -3579,14 +3579,6 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
|
||||
indent(setDefault) +
|
||||
"}\n")
|
||||
|
||||
# A helper function for handling null default values. Much like
|
||||
# handleDefault, but checks that the default value, if it exists, is null.
|
||||
def handleDefaultNull(template, codeToSetNull):
|
||||
if (defaultValue is not None and
|
||||
not isinstance(defaultValue, IDLNullValue)):
|
||||
raise TypeError("Can't handle non-null default value here")
|
||||
return handleDefault(template, codeToSetNull)
|
||||
|
||||
# A helper function for wrapping up the template body for
|
||||
# possibly-nullable objecty stuff
|
||||
def wrapObjectTemplate(templateBody, type, codeToSetNull, failureCode=None):
|
||||
@ -3623,8 +3615,12 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
|
||||
elifBody=elifBody,
|
||||
failureBody=onFailureNotAnObject(failureCode).define())
|
||||
|
||||
if type.nullable():
|
||||
templateBody = handleDefaultNull(templateBody, codeToSetNull)
|
||||
if isinstance(defaultValue, IDLNullValue):
|
||||
assert type.nullable() # Parser should enforce this
|
||||
templateBody = handleDefault(templateBody, codeToSetNull)
|
||||
elif isinstance(defaultValue, IDLEmptySequenceValue):
|
||||
# Our caller will handle it
|
||||
pass
|
||||
else:
|
||||
assert defaultValue is None
|
||||
|
||||
@ -3763,6 +3759,13 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
|
||||
|
||||
templateBody = wrapObjectTemplate(templateBody, type,
|
||||
"${declName}.SetNull();\n", notSequence)
|
||||
if isinstance(defaultValue, IDLEmptySequenceValue):
|
||||
if type.nullable():
|
||||
codeToSetEmpty = "${declName}.SetValue();\n"
|
||||
else:
|
||||
codeToSetEmpty = "/* Array is already empty; nothing to do */\n"
|
||||
templateBody = handleDefault(templateBody, codeToSetEmpty)
|
||||
|
||||
# Sequence arguments that might contain traceable things need
|
||||
# to get traced
|
||||
if not isMember and typeNeedsRooting(elementType):
|
||||
|
@ -379,8 +379,10 @@ public:
|
||||
void PassCastableObjectNullableSequence(const Nullable< Sequence< OwningNonNull<TestInterface> > >&);
|
||||
void PassNullableCastableObjectNullableSequence(const Nullable< Sequence< nsRefPtr<TestInterface> > >&);
|
||||
void PassOptionalSequence(const Optional<Sequence<int32_t> >&);
|
||||
void PassOptionalSequenceWithDefaultValue(const Sequence<int32_t> &);
|
||||
void PassOptionalNullableSequence(const Optional<Nullable<Sequence<int32_t> > >&);
|
||||
void PassOptionalNullableSequenceWithDefaultValue(const Nullable< Sequence<int32_t> >&);
|
||||
void PassOptionalNullableSequenceWithDefaultValue2(const Nullable< Sequence<int32_t> >&);
|
||||
void PassOptionalObjectSequence(const Optional<Sequence<OwningNonNull<TestInterface> > >&);
|
||||
void PassExternalInterfaceSequence(const Sequence<nsRefPtr<TestExternalInterface> >&);
|
||||
void PassNullableExternalInterfaceSequence(const Sequence<nsRefPtr<TestExternalInterface> >&);
|
||||
|
@ -340,8 +340,10 @@ interface TestInterface {
|
||||
void passCastableObjectNullableSequence(sequence<TestInterface>? arg);
|
||||
void passNullableCastableObjectNullableSequence(sequence<TestInterface?>? arg);
|
||||
void passOptionalSequence(optional sequence<long> arg);
|
||||
void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
|
||||
void passOptionalNullableSequence(optional sequence<long>? arg);
|
||||
void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
|
||||
void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
|
||||
void passOptionalObjectSequence(optional sequence<TestInterface> arg);
|
||||
void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
|
||||
void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
|
||||
@ -882,6 +884,12 @@ dictionary Dict : ParentDict {
|
||||
ArrayBuffer? nullableArrayBuffer;
|
||||
Uint8Array uint8Array;
|
||||
Float64Array? float64Array = null;
|
||||
|
||||
sequence<long> seq1;
|
||||
sequence<long> seq2 = [];
|
||||
sequence<long>? seq3;
|
||||
sequence<long>? seq4 = null;
|
||||
sequence<long>? seq5 = [];
|
||||
};
|
||||
|
||||
dictionary ParentDict : GrandparentDict {
|
||||
|
@ -231,8 +231,10 @@ interface TestExampleInterface {
|
||||
void passCastableObjectNullableSequence(sequence<TestInterface>? arg);
|
||||
void passNullableCastableObjectNullableSequence(sequence<TestInterface?>? arg);
|
||||
void passOptionalSequence(optional sequence<long> arg);
|
||||
void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
|
||||
void passOptionalNullableSequence(optional sequence<long>? arg);
|
||||
void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
|
||||
void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
|
||||
void passOptionalObjectSequence(optional sequence<TestInterface> arg);
|
||||
void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
|
||||
void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
|
||||
|
@ -252,8 +252,10 @@ interface TestJSImplInterface {
|
||||
void passCastableObjectNullableSequence(sequence<TestJSImplInterface>? arg);
|
||||
void passNullableCastableObjectNullableSequence(sequence<TestJSImplInterface?>? arg);
|
||||
void passOptionalSequence(optional sequence<long> arg);
|
||||
void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
|
||||
void passOptionalNullableSequence(optional sequence<long>? arg);
|
||||
void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
|
||||
void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
|
||||
void passOptionalObjectSequence(optional sequence<TestJSImplInterface> arg);
|
||||
void passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
|
||||
void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg);
|
||||
|
Loading…
Reference in New Issue
Block a user