Skip to content

Commit

Permalink
Improve handling of ConversionResult::Failure in unions.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ms2ger committed Sep 21, 2016
1 parent 6023560 commit d1d2074
Showing 1 changed file with 19 additions and 21 deletions.
40 changes: 19 additions & 21 deletions components/script/dom/bindings/codegen/CodegenRust.py
Expand Up @@ -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):
Expand Down Expand Up @@ -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"))

Expand All @@ -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"))

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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))

Expand All @@ -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):
Expand Down

0 comments on commit d1d2074

Please sign in to comment.