Ensure that optional primitive arguments aren't treated as nullable.

By forgetting the Some(), we caused type inference to convert to Option<T>
for optional non-nullable primitive arguments, and to Option<Option<T>> for
optional nullable primitive arguments (essentially the same thing). This
change brings the primitive codegen in line with the DOMString codegen.

Using distinct types for optionality and nullability would have prevented
this issue.
This commit is contained in:
Ms2ger 2014-04-17 16:23:04 +02:00
parent 28baa1f4d1
commit c9c96d4758

View file

@ -855,20 +855,22 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
if failureCode is None:
failureCode = 'return 0'
#XXXjdm support conversionBehavior here
template = (
"match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
" Ok(v) => ${declName} = v,\n"
" Err(_) => { %s }\n"
"}" % exceptionCode)
value = "v"
declType = CGGeneric(builtinNames[type.tag()])
if type.nullable():
declType = CGWrapper(declType, pre="Option<", post=">")
if isOptional:
value = "Some(%s)" % value
declType = CGWrapper(declType, pre="Option<", post=">")
#XXXjdm support conversionBehavior here
template = (
"match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
" Ok(v) => ${declName} = %s,\n"
" Err(_) => { %s }\n"
"}" % (value, exceptionCode))
if defaultValue is not None:
if isinstance(defaultValue, IDLNullValue):
assert type.nullable()