From b264c65f2e1ee692a50ed57d9d1fa7ae71cc6594 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 26 Apr 2014 17:10:59 +0200 Subject: Implement a cleaner way of dealing with optional arguments in codegen and use it for primitive types. This puts the Some constructor outside the match, making the actual generating code independent of the optionality of the argument. --- .../script/dom/bindings/codegen/CodegenRust.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py') diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index eb219f0fe30..21c432a2e72 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -494,6 +494,16 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, if exceptionCode is None: exceptionCode = "return 0;" + def handleOptional(template, declType, isOptional): + if isOptional: + template = "Some(%s)" % template + declType = CGWrapper(declType, pre="Option<", post=">") + initialValue = "None" + else: + initialValue = None + + return (template, declType, isOptional, initialValue) + # Unfortunately, .capitalize() on a string will lowercase things inside the # string, which we do not want. def firstCap(string): @@ -800,21 +810,16 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, if failureCode is None: failureCode = 'return 0' - 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) => %s,\n" + " Ok(v) => v,\n" " Err(_) => { %s }\n" - "}" % (value, exceptionCode)) + "}" % exceptionCode) if defaultValue is not None: if isinstance(defaultValue, IDLNullValue): @@ -835,7 +840,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, CGGeneric(template), CGGeneric(defaultStr)).define() - return (template, declType, isOptional, "None" if isOptional else None) + return handleOptional(template, declType, isOptional) def instantiateJSToNativeConversionTemplate(templateTuple, replacements, argcAndIndex=None): -- cgit v1.2.3