From c9c96d475877ce38ffcc92cdeff76bc93b361dd3 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Apr 2014 16:23:04 +0200 Subject: [PATCH] Ensure that optional primitive arguments aren't treated as nullable. By forgetting the Some(), we caused type inference to convert to Option for optional non-nullable primitive arguments, and to Option> 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. --- .../script/dom/bindings/codegen/CodegenRust.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 61efa579241..9470b61fab2 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -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()