Rewrite the interface unwrapping to return an expression.

This commit is contained in:
Ms2ger 2014-04-16 21:37:58 +02:00
parent 0745d656a3
commit a9ffff9215

View file

@ -553,13 +553,13 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
if type.nullable(): if type.nullable():
templateBody += ( templateBody += (
"} else if (${val}).is_null_or_undefined() {\n" "} else if (${val}).is_null_or_undefined() {\n"
" ${declName} = None;\n") " None\n")
templateBody += ( templateBody += (
"} else {\n" + "} else {\n" +
CGIndenter(onFailureNotAnObject(failureCode)).define() + CGIndenter(onFailureNotAnObject(failureCode)).define() +
"}") "}")
if type.nullable(): if type.nullable():
templateBody = handleDefaultNull(templateBody, "${declName} = None;") templateBody = handleDefaultNull(templateBody, "None")
else: else:
assert(defaultValue is None) assert(defaultValue is None)
@ -609,11 +609,11 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
if descriptor.interface.isCallback(): if descriptor.interface.isCallback():
name = descriptor.nativeType name = descriptor.nativeType
declType = CGGeneric("Option<%s>" % name); declType = CGGeneric("Option<%s>" % name);
conversion = ("${declName} = Some(%s::new((${val}).to_object()));" % name) conversion = ("Some(%s::new((${val}).to_object()))" % name)
template = wrapObjectTemplate(conversion, isDefinitelyObject, type, template = wrapObjectTemplate(conversion, isDefinitelyObject, type,
failureCode) failureCode)
return (template, declType, None, isOptional, None) return ("${declName} = " + template + ";", declType, None, isOptional, None)
templateBody = "" templateBody = ""
if descriptor.interface.isConsequential(): if descriptor.interface.isConsequential():
@ -621,19 +621,17 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
"argument" % descriptor.interface.identifier.name) "argument" % descriptor.interface.identifier.name)
templateBody = "${declName} = "
if failureCode is not None: if failureCode is not None:
templateBody += str(CastableObjectUnwrapper( templateBody = str(CastableObjectUnwrapper(
descriptor, descriptor,
"(${val}).to_object()", "(${val}).to_object()",
failureCode, failureCode,
isOptional or type.nullable())) isOptional or type.nullable()))
else: else:
templateBody += str(FailureFatalCastableObjectUnwrapper( templateBody = str(FailureFatalCastableObjectUnwrapper(
descriptor, descriptor,
"(${val}).to_object()", "(${val}).to_object()",
isOptional or type.nullable())) isOptional or type.nullable()))
templateBody += ";\n"
templateBody = wrapObjectTemplate(templateBody, isDefinitelyObject, templateBody = wrapObjectTemplate(templateBody, isDefinitelyObject,
type, failureCode) type, failureCode)
@ -642,7 +640,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
if type.nullable() or isOptional: if type.nullable() or isOptional:
declType = CGWrapper(declType, pre="Option<", post=">") declType = CGWrapper(declType, pre="Option<", post=">")
return (templateBody, declType, None, isOptional, "None" if isOptional else None) return ("${declName} = " + templateBody + ";", declType, None, isOptional, "None" if isOptional else None)
if type.isSpiderMonkeyInterface(): if type.isSpiderMonkeyInterface():
raise TypeError("Can't handle SpiderMonkey interface arguments yet") raise TypeError("Can't handle SpiderMonkey interface arguments yet")