diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-04-26 17:10:59 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-04-26 17:10:59 +0200 |
commit | b264c65f2e1ee692a50ed57d9d1fa7ae71cc6594 (patch) | |
tree | f6bee890096932ea2c2b69032dd7ed9e38bdc9dd /src/components/script/dom/bindings/codegen | |
parent | 35f6a24de79882902eaceadf6e3a8c8d60b8f704 (diff) | |
download | servo-b264c65f2e1ee692a50ed57d9d1fa7ae71cc6594.tar.gz servo-b264c65f2e1ee692a50ed57d9d1fa7ae71cc6594.zip |
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.
Diffstat (limited to 'src/components/script/dom/bindings/codegen')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 21 |
1 files changed, 13 insertions, 8 deletions
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): |