aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-04-26 17:10:59 +0200
committerMs2ger <ms2ger@gmail.com>2014-04-26 17:10:59 +0200
commitb264c65f2e1ee692a50ed57d9d1fa7ae71cc6594 (patch)
treef6bee890096932ea2c2b69032dd7ed9e38bdc9dd /src/components/script/dom/bindings/codegen
parent35f6a24de79882902eaceadf6e3a8c8d60b8f704 (diff)
downloadservo-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.py21
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):