aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-04-17 10:40:15 -0400
committerbors-servo <release+servo@mozilla.com>2014-04-17 10:40:15 -0400
commit3478105da9ed1503a60b2fadf71be95647aa7e9d (patch)
tree0f095947302f199f52f638bbbe31dc65558abf0b /src/components/script/dom/bindings/codegen
parent28baa1f4d1402584399abf07869b6bbfdb7c36eb (diff)
parentc9c96d475877ce38ffcc92cdeff76bc93b361dd3 (diff)
downloadservo-3478105da9ed1503a60b2fadf71be95647aa7e9d.tar.gz
servo-3478105da9ed1503a60b2fadf71be95647aa7e9d.zip
auto merge of #2143 : Ms2ger/servo/optional-primitives, r=jdm
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.
Diffstat (limited to 'src/components/script/dom/bindings/codegen')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py16
1 files 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()