aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-04-28 04:01:36 -0400
committerbors-servo <release+servo@mozilla.com>2014-04-28 04:01:36 -0400
commit9f742a946226edf6cd93db0c864449471b5b1325 (patch)
tree5f37e1beac445b4a35121f378ff3e0deae83ff9d /src/components/script/dom/bindings/codegen/CodegenRust.py
parent493aa2cdf30fb2ff5886c714030a20d714764b67 (diff)
parent35f6a24de79882902eaceadf6e3a8c8d60b8f704 (diff)
downloadservo-9f742a946226edf6cd93db0c864449471b5b1325.tar.gz
servo-9f742a946226edf6cd93db0c864449471b5b1325.zip
auto merge of #2237 : Ms2ger/servo/union-fromjsvalconvertible, r=jdm
With bonus codegen tests.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index cc56c606e0b..0912c6fdf96 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -576,21 +576,13 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
"holderType")
declType = CGGeneric(type.name)
- value = CGGeneric("value")
if type.nullable():
declType = CGWrapper(declType, pre="Option<", post=" >")
- value = CGWrapper(value, pre="Some(", post=")")
- templateBody = CGGeneric("match %s::from_value(cx, ${val}) {\n"
+ templateBody = CGGeneric("match FromJSValConvertible::from_jsval(cx, ${val}, ()) {\n"
+ " Ok(value) => value,\n"
" Err(()) => { %s },\n"
- " Ok(value) => %s,\n"
- "}" % (type.name, exceptionCode, value.define()))
-
- if type.nullable():
- templateBody = CGIfElseWrapper(
- "(${val}).is_null_or_undefined()",
- CGGeneric("None"),
- templateBody)
+ "}" % exceptionCode)
templateBody = handleDefaultNull(templateBody.define(),
"None")
@@ -2847,7 +2839,7 @@ class CGUnionConversionStruct(CGThing):
self.type = type
self.descriptorProvider = descriptorProvider
- def from_value_method(self):
+ def from_jsval(self):
memberTypes = self.type.flatMemberTypes
names = []
conversions = []
@@ -2941,9 +2933,13 @@ class CGUnionConversionStruct(CGThing):
conversions.append(CGGeneric(
"throw_not_in_union(cx, \"%s\");\n"
"Err(())" % ", ".join(names)))
- return CGWrapper(
+ method = CGWrapper(
CGIndenter(CGList(conversions, "\n\n")),
- pre="pub fn from_value(cx: *JSContext, value: JSVal) -> Result<%s, ()> {\n" % self.type,
+ pre="fn from_jsval(cx: *JSContext, value: JSVal, _option: ()) -> Result<%s, ()> {\n" % self.type,
+ post="\n}")
+ return CGWrapper(
+ CGIndenter(method),
+ pre="impl FromJSValConvertible<()> for %s {\n" % self.type,
post="\n}")
def try_method(self, t):
@@ -2953,16 +2949,21 @@ class CGUnionConversionStruct(CGThing):
return CGWrapper(
CGIndenter(jsConversion, 4),
- pre="pub fn TryConvertTo%s(cx: *JSContext, value: JSVal) -> %s {\n" % (t.name, returnType),
+ pre="fn TryConvertTo%s(cx: *JSContext, value: JSVal) -> %s {\n" % (t.name, returnType),
post="\n}")
def define(self):
- methods = [self.from_value_method()]
- methods.extend(self.try_method(t) for t in self.type.flatMemberTypes)
+ from_jsval = self.from_jsval()
+ methods = CGIndenter(CGList([
+ self.try_method(t) for t in self.type.flatMemberTypes
+ ], "\n\n"))
return """
+%s
+
impl %s {
%s
-}""" % (self.type, CGIndenter(CGList(methods, "\n\n")).define())
+}
+""" % (from_jsval.define(), self.type, methods.define())
class ClassItem: