Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement the MozMap type. #13332

Merged
merged 7 commits into from Sep 21, 2016

Improve handling of ConversionResult::Failure in unions.

  • Loading branch information
Ms2ger committed Sep 21, 2016
commit d1d2074d43a0f8a4979198119242ba91e5ca1594
@@ -649,6 +649,11 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if exceptionCode is None:
exceptionCode = "return false;"

if failureCode is None:
failOrPropagate = "throw_type_error(cx, &error);\n%s" % exceptionCode
else:
failOrPropagate = failureCode

needsRooting = typeNeedsRooting(type, descriptorProvider)

def handleOptional(template, declType, default):
@@ -732,11 +737,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
templateBody = ("match FromJSValConvertible::from_jsval(cx, ${val}, %s) {\n"
" Ok(ConversionResult::Success(value)) => value,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (config, exceptionCode, exceptionCode))
"}" % (config, indent(failOrPropagate, 8), exceptionCode))

return handleOptional(templateBody, declType, handleDefaultNull("None"))

@@ -748,11 +752,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
templateBody = ("match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
" Ok(ConversionResult::Success(value)) => value,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (exceptionCode, exceptionCode))
"}" % (indent(failOrPropagate, 8), exceptionCode))

return handleOptional(templateBody, declType, handleDefaultNull("None"))

@@ -823,11 +826,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
"match FromJSValConvertible::from_jsval(cx, ${val}, %s) {\n"
" Ok(ConversionResult::Success(strval)) => strval,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (nullBehavior, exceptionCode, exceptionCode))
"}" % (nullBehavior, indent(failOrPropagate, 8), exceptionCode))

if defaultValue is None:
default = None
@@ -853,11 +855,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
"match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
" Ok(ConversionResult::Success(strval)) => strval,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (exceptionCode, exceptionCode))
"}" % (indent(failOrPropagate, 8), exceptionCode))

if defaultValue is None:
default = None
@@ -883,11 +884,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
"match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
" Ok(ConversionResult::Success(strval)) => strval,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (exceptionCode, exceptionCode))
"}" % (indent(failOrPropagate, 8), exceptionCode))

if defaultValue is None:
default = None
@@ -1042,11 +1042,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
template = ("match %s::new(cx, ${val}) {\n"
" Ok(ConversionResult::Success(dictionary)) => dictionary,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s },\n"
"}" % (typeName, exceptionCode, exceptionCode))
"}" % (typeName, indent(failOrPropagate, 8), exceptionCode))

return handleOptional(template, declType, handleDefaultNull("%s::empty(cx)" % typeName))

@@ -1071,11 +1070,10 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
"match FromJSValConvertible::from_jsval(cx, ${val}, %s) {\n"
" Ok(ConversionResult::Success(v)) => v,\n"
" Ok(ConversionResult::Failure(error)) => {\n"
" throw_type_error(cx, &error);\n"
" %s\n"
"%s\n"
" }\n"
" _ => { %s }\n"
"}" % (conversionBehavior, exceptionCode, exceptionCode))
"}" % (conversionBehavior, indent(failOrPropagate, 8), exceptionCode))

if defaultValue is not None:
if isinstance(defaultValue, IDLNullValue):
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.