Bug 1007878 part 5. Implement callback codegen for MozMap. r=khuey

This commit is contained in:
Boris Zbarsky
2014-05-23 17:32:39 -04:00
parent 3abb6acbbc
commit 70420bfdf4
4 changed files with 125 additions and 6 deletions

View File

@@ -3874,19 +3874,25 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
"${declName}.SetNull();\n", "${declName}.SetNull();\n",
notMozMap) notMozMap)
declType = typeName
declArgs = None
holderType = None
holderArgs = None
# MozMap arguments that might contain traceable things need # MozMap arguments that might contain traceable things need
# to get traced # to get traced
if not isMember and typeNeedsRooting(valueType): if not isMember and isCallbackReturnValue:
# Go ahead and just convert directly into our actual return value
declType = CGWrapper(declType, post="&")
declArgs = "aRetVal"
elif not isMember and typeNeedsRooting(valueType):
holderType = CGTemplatedType("MozMapRooter", valueInfo.declType) holderType = CGTemplatedType("MozMapRooter", valueInfo.declType)
# If our MozMap is nullable, this will set the Nullable to be # If our MozMap is nullable, this will set the Nullable to be
# not-null, but that's ok because we make an explicit SetNull() call # not-null, but that's ok because we make an explicit SetNull() call
# on it as needed if our JS value is actually null. # on it as needed if our JS value is actually null.
holderArgs = "cx, &%s" % mozMapRef holderArgs = "cx, &%s" % mozMapRef
else:
holderType = None
holderArgs = None
return JSToNativeConversionInfo(templateBody, declType=typeName, return JSToNativeConversionInfo(templateBody, declType=declType,
declArgs=declArgs,
holderType=holderType, holderType=holderType,
dealWithOptional=isOptional, dealWithOptional=isOptional,
holderArgs=holderArgs) holderArgs=holderArgs)
@@ -11534,6 +11540,13 @@ class CGNativeMember(ClassMethod):
else: else:
returnCode = "aRetVal.SwapElements(${declName});\n" returnCode = "aRetVal.SwapElements(${declName});\n"
return "void", "", returnCode return "void", "", returnCode
if type.isMozMap():
# If we want to handle MozMap-of-MozMap return values, we're
# going to need to fix example codegen to not produce MozMap<void>
# for the relevant argument...
assert not isMember
# In this case we convert directly into our outparam to start with
return "void", "", ""
if type.isDate(): if type.isDate():
result = CGGeneric("Date") result = CGGeneric("Date")
if type.nullable(): if type.nullable():
@@ -11628,7 +11641,8 @@ class CGNativeMember(ClassMethod):
is a const ref, as well as whether the type should be wrapped in is a const ref, as well as whether the type should be wrapped in
Nullable as needed. Nullable as needed.
isMember can be false or one of the strings "Sequence" or "Variadic" isMember can be false or one of the strings "Sequence", "Variadic",
"MozMap"
""" """
if type.isArray(): if type.isArray():
raise TypeError("Can't handle array arguments yet") raise TypeError("Can't handle array arguments yet")
@@ -11642,6 +11656,15 @@ class CGNativeMember(ClassMethod):
decl = CGTemplatedType("Sequence", argType) decl = CGTemplatedType("Sequence", argType)
return decl.define(), True, True return decl.define(), True, True
if type.isMozMap():
nullable = type.nullable()
if nullable:
type = type.inner
elementType = type.inner
argType = self.getArgType(elementType, False, "MozMap")[0]
decl = CGTemplatedType("MozMap", argType)
return decl.define(), True, True
if type.isUnion(): if type.isUnion():
# unionTypeDecl will handle nullable types, so return False for # unionTypeDecl will handle nullable types, so return False for
# auto-wrapping in Nullable # auto-wrapping in Nullable

View File

@@ -21,6 +21,7 @@ callback interface TestCallbackInterface {
long doSomethingElse(DOMString arg, TestInterface otherArg); long doSomethingElse(DOMString arg, TestInterface otherArg);
void doSequenceLongArg(sequence<long> arg); void doSequenceLongArg(sequence<long> arg);
void doSequenceStringArg(sequence<DOMString> arg); void doSequenceStringArg(sequence<DOMString> arg);
void doMozMapLongArg(MozMap<long> arg);
sequence<long> getSequenceOfLong(); sequence<long> getSequenceOfLong();
sequence<TestInterface> getSequenceOfInterfaces(); sequence<TestInterface> getSequenceOfInterfaces();
sequence<TestInterface>? getNullableSequenceOfInterfaces(); sequence<TestInterface>? getNullableSequenceOfInterfaces();
@@ -30,6 +31,7 @@ callback interface TestCallbackInterface {
sequence<TestCallbackInterface>? getNullableSequenceOfCallbackInterfaces(); sequence<TestCallbackInterface>? getNullableSequenceOfCallbackInterfaces();
sequence<TestCallbackInterface?> getSequenceOfNullableCallbackInterfaces(); sequence<TestCallbackInterface?> getSequenceOfNullableCallbackInterfaces();
sequence<TestCallbackInterface?>? getNullableSequenceOfNullableCallbackInterfaces(); sequence<TestCallbackInterface?>? getNullableSequenceOfNullableCallbackInterfaces();
MozMap<long> getMozMapOfLong();
Dict? getDictionary(); Dict? getDictionary();
}; };

View File

@@ -255,6 +255,33 @@ interface TestExampleInterface {
//XXXbz No support for sequence of sequence return values yet. //XXXbz No support for sequence of sequence return values yet.
//sequence<sequence<long>> receiveSequenceOfSequences(); //sequence<sequence<long>> receiveSequenceOfSequences();
// MozMap types
void passMozMap(MozMap<long> arg);
void passNullableMozMap(MozMap<long>? arg);
void passMozMapOfNullableInts(MozMap<long?> arg);
void passOptionalMozMapOfNullableInts(optional MozMap<long?> arg);
void passOptionalNullableMozMapOfNullableInts(optional MozMap<long?>? arg);
void passCastableObjectMozMap(MozMap<TestInterface> arg);
void passNullableCastableObjectMozMap(MozMap<TestInterface?> arg);
void passCastableObjectNullableMozMap(MozMap<TestInterface>? arg);
void passNullableCastableObjectNullableMozMap(MozMap<TestInterface?>? arg);
void passOptionalMozMap(optional MozMap<long> arg);
void passOptionalNullableMozMap(optional MozMap<long>? arg);
void passOptionalNullableMozMapWithDefaultValue(optional MozMap<long>? arg = null);
void passOptionalObjectMozMap(optional MozMap<TestInterface> arg);
void passExternalInterfaceMozMap(MozMap<TestExternalInterface> arg);
void passNullableExternalInterfaceMozMap(MozMap<TestExternalInterface?> arg);
void passStringMozMap(MozMap<DOMString> arg);
void passByteStringMozMap(MozMap<ByteString> arg);
void passMozMapOfMozMaps(MozMap<MozMap<long>> arg);
MozMap<long> receiveMozMap();
MozMap<long>? receiveNullableMozMap();
MozMap<long?> receiveMozMapOfNullableInts();
MozMap<long?>? receiveNullableMozMapOfNullableInts();
//XXXbz No support for MozMap of MozMaps return values yet.
//MozMap<MozMap<long>> receiveMozMapOfMozMaps();
MozMap<any> receiveAnyMozMap();
// Typed array types // Typed array types
void passArrayBuffer(ArrayBuffer arg); void passArrayBuffer(ArrayBuffer arg);
void passNullableArrayBuffer(ArrayBuffer? arg); void passNullableArrayBuffer(ArrayBuffer? arg);
@@ -273,6 +300,8 @@ interface TestExampleInterface {
void passFloat64Array(Float64Array arg); void passFloat64Array(Float64Array arg);
void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg); void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg); void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
void passMozMapOfArrayBuffers(MozMap<ArrayBuffer> arg);
void passMozMapOfNullableArrayBuffers(MozMap<ArrayBuffer?> arg);
void passVariadicTypedArray(Float32Array... arg); void passVariadicTypedArray(Float32Array... arg);
void passVariadicNullableTypedArray(Float32Array?... arg); void passVariadicNullableTypedArray(Float32Array?... arg);
Uint8Array receiveUint8Array(); Uint8Array receiveUint8Array();
@@ -332,6 +361,17 @@ interface TestExampleInterface {
void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg); void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg); void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
void passMozMapOfAny(MozMap<any> arg);
void passNullableMozMapOfAny(MozMap<any>? arg);
void passOptionalMozMapOfAny(optional MozMap<any> arg);
void passOptionalNullableMozMapOfAny(optional MozMap<any>? arg);
void passOptionalMozMapOfAnyWithDefaultValue(optional MozMap<any>? arg = null);
void passMozMapOfMozMapOfAny(MozMap<MozMap<any>> arg);
void passMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?> arg);
void passNullableMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?>? arg);
void passOptionalNullableMozMapOfNullableMozMapOfAny(optional MozMap<MozMap<any>?>? arg);
void passOptionalNullableMozMapOfNullableSequenceOfAny(optional MozMap<sequence<any>?>? arg);
void passOptionalNullableSequenceOfNullableMozMapOfAny(optional sequence<MozMap<any>?>? arg);
any receiveAny(); any receiveAny();
// object types // object types
@@ -347,6 +387,7 @@ interface TestExampleInterface {
void passNullableSequenceOfObject(sequence<object>? arg); void passNullableSequenceOfObject(sequence<object>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
void passMozMapOfObject(MozMap<object> arg);
object receiveObject(); object receiveObject();
object? receiveNullableObject(); object? receiveNullableObject();
@@ -420,6 +461,9 @@ interface TestExampleInterface {
void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg); void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg); void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
void passMozMapOfUnions(MozMap<(CanvasPattern or CanvasGradient)> arg);
// XXXbz no move constructor on some unions
// void passMozMapOfUnions2(MozMap<(object or long)> arg);
//(CanvasPattern or CanvasGradient) receiveUnion(); //(CanvasPattern or CanvasGradient) receiveUnion();
//(object or long) receiveUnion2(); //(object or long) receiveUnion2();
@@ -439,6 +483,7 @@ interface TestExampleInterface {
void passOptionalNullableDateWithDefaultValue(optional Date? arg = null); void passOptionalNullableDateWithDefaultValue(optional Date? arg = null);
void passDateSequence(sequence<Date> arg); void passDateSequence(sequence<Date> arg);
void passNullableDateSequence(sequence<Date?> arg); void passNullableDateSequence(sequence<Date?> arg);
void passDateMozMap(MozMap<Date> arg);
Date receiveDate(); Date receiveDate();
Date? receiveNullableDate(); Date? receiveNullableDate();
@@ -465,6 +510,7 @@ interface TestExampleInterface {
Dict? receiveNullableDictionary(); Dict? receiveNullableDictionary();
void passOtherDictionary(optional GrandparentDict x); void passOtherDictionary(optional GrandparentDict x);
void passSequenceOfDictionaries(sequence<Dict> x); void passSequenceOfDictionaries(sequence<Dict> x);
void passMozMapOfDictionaries(MozMap<GrandparentDict> x);
// No support for nullable dictionaries inside a sequence (nor should there be) // No support for nullable dictionaries inside a sequence (nor should there be)
// void passSequenceOfNullableDictionaries(sequence<Dict?> x); // void passSequenceOfNullableDictionaries(sequence<Dict?> x);
void passDictionaryOrLong(optional Dict x); void passDictionaryOrLong(optional Dict x);

View File

@@ -271,8 +271,36 @@ interface TestJSImplInterface {
sequence<object?> receiveNullableObjectSequence(); sequence<object?> receiveNullableObjectSequence();
void passSequenceOfSequences(sequence<sequence<long>> arg); void passSequenceOfSequences(sequence<sequence<long>> arg);
//XXXbz No support for sequence of sequence return values yet.
//sequence<sequence<long>> receiveSequenceOfSequences(); //sequence<sequence<long>> receiveSequenceOfSequences();
// MozMap types
void passMozMap(MozMap<long> arg);
void passNullableMozMap(MozMap<long>? arg);
void passMozMapOfNullableInts(MozMap<long?> arg);
void passOptionalMozMapOfNullableInts(optional MozMap<long?> arg);
void passOptionalNullableMozMapOfNullableInts(optional MozMap<long?>? arg);
void passCastableObjectMozMap(MozMap<TestJSImplInterface> arg);
void passNullableCastableObjectMozMap(MozMap<TestJSImplInterface?> arg);
void passCastableObjectNullableMozMap(MozMap<TestJSImplInterface>? arg);
void passNullableCastableObjectNullableMozMap(MozMap<TestJSImplInterface?>? arg);
void passOptionalMozMap(optional MozMap<long> arg);
void passOptionalNullableMozMap(optional MozMap<long>? arg);
void passOptionalNullableMozMapWithDefaultValue(optional MozMap<long>? arg = null);
void passOptionalObjectMozMap(optional MozMap<TestJSImplInterface> arg);
void passExternalInterfaceMozMap(MozMap<TestExternalInterface> arg);
void passNullableExternalInterfaceMozMap(MozMap<TestExternalInterface?> arg);
void passStringMozMap(MozMap<DOMString> arg);
void passByteStringMozMap(MozMap<ByteString> arg);
void passMozMapOfMozMaps(MozMap<MozMap<long>> arg);
MozMap<long> receiveMozMap();
MozMap<long>? receiveNullableMozMap();
MozMap<long?> receiveMozMapOfNullableInts();
MozMap<long?>? receiveNullableMozMapOfNullableInts();
//XXXbz No support for MozMap of MozMaps return values yet.
//MozMap<MozMap<long>> receiveMozMapOfMozMaps();
MozMap<any> receiveAnyMozMap();
// ArrayBuffer is handled differently in callback interfaces and the example generator. // ArrayBuffer is handled differently in callback interfaces and the example generator.
// Need to figure out what should be done there. Seems like other typed array stuff is // Need to figure out what should be done there. Seems like other typed array stuff is
// similarly not working in the JS implemented generator. Probably some other issues // similarly not working in the JS implemented generator. Probably some other issues
@@ -295,6 +323,8 @@ interface TestJSImplInterface {
//void passFloat64Array(Float64Array arg); //void passFloat64Array(Float64Array arg);
//void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg); //void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
//void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg); //void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
//void passMozMapOfArrayBuffers(MozMap<ArrayBuffer> arg);
//void passMozMapOfNullableArrayBuffers(MozMap<ArrayBuffer?> arg);
//void passVariadicTypedArray(Float32Array... arg); //void passVariadicTypedArray(Float32Array... arg);
//void passVariadicNullableTypedArray(Float32Array?... arg); //void passVariadicNullableTypedArray(Float32Array?... arg);
//Uint8Array receiveUint8Array(); //Uint8Array receiveUint8Array();
@@ -355,8 +385,20 @@ interface TestJSImplInterface {
void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg); void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg); void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
void passMozMapOfAny(MozMap<any> arg);
void passNullableMozMapOfAny(MozMap<any>? arg);
void passOptionalMozMapOfAny(optional MozMap<any> arg);
void passOptionalNullableMozMapOfAny(optional MozMap<any>? arg);
void passOptionalMozMapOfAnyWithDefaultValue(optional MozMap<any>? arg = null);
void passMozMapOfMozMapOfAny(MozMap<MozMap<any>> arg);
void passMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?> arg);
void passNullableMozMapOfNullableMozMapOfAny(MozMap<MozMap<any>?>? arg);
void passOptionalNullableMozMapOfNullableMozMapOfAny(optional MozMap<MozMap<any>?>? arg);
void passOptionalNullableMozMapOfNullableSequenceOfAny(optional MozMap<sequence<any>?>? arg);
void passOptionalNullableSequenceOfNullableMozMapOfAny(optional sequence<MozMap<any>?>? arg);
any receiveAny(); any receiveAny();
// object types
void passObject(object arg); void passObject(object arg);
void passVariadicObject(object... arg); void passVariadicObject(object... arg);
void passNullableObject(object? arg); void passNullableObject(object? arg);
@@ -369,6 +411,7 @@ interface TestJSImplInterface {
void passNullableSequenceOfObject(sequence<object>? arg); void passNullableSequenceOfObject(sequence<object>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg); void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
void passMozMapOfObject(MozMap<object> arg);
object receiveObject(); object receiveObject();
object? receiveNullableObject(); object? receiveNullableObject();
@@ -442,6 +485,9 @@ interface TestJSImplInterface {
void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg); void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg); void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
void passMozMapOfUnions(MozMap<(CanvasPattern or CanvasGradient)> arg);
// XXXbz no move constructor on some unions
// void passMozMapOfUnions2(MozMap<(object or long)> arg);
//(CanvasPattern or CanvasGradient) receiveUnion(); //(CanvasPattern or CanvasGradient) receiveUnion();
//(object or long) receiveUnion2(); //(object or long) receiveUnion2();
@@ -461,6 +507,7 @@ interface TestJSImplInterface {
void passOptionalNullableDateWithDefaultValue(optional Date? arg = null); void passOptionalNullableDateWithDefaultValue(optional Date? arg = null);
void passDateSequence(sequence<Date> arg); void passDateSequence(sequence<Date> arg);
void passNullableDateSequence(sequence<Date?> arg); void passNullableDateSequence(sequence<Date?> arg);
void passDateMozMap(MozMap<Date> arg);
Date receiveDate(); Date receiveDate();
Date? receiveNullableDate(); Date? receiveNullableDate();
@@ -487,6 +534,7 @@ interface TestJSImplInterface {
Dict? receiveNullableDictionary(); Dict? receiveNullableDictionary();
void passOtherDictionary(optional GrandparentDict x); void passOtherDictionary(optional GrandparentDict x);
void passSequenceOfDictionaries(sequence<Dict> x); void passSequenceOfDictionaries(sequence<Dict> x);
void passMozMapOfDictionaries(MozMap<GrandparentDict> x);
// No support for nullable dictionaries inside a sequence (nor should there be) // No support for nullable dictionaries inside a sequence (nor should there be)
// void passSequenceOfNullableDictionaries(sequence<Dict?> x); // void passSequenceOfNullableDictionaries(sequence<Dict?> x);
void passDictionaryOrLong(optional Dict x); void passDictionaryOrLong(optional Dict x);