diff options
author | bors-servo <release+servo@mozilla.com> | 2014-04-28 04:01:36 -0400 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-04-28 04:01:36 -0400 |
commit | 9f742a946226edf6cd93db0c864449471b5b1325 (patch) | |
tree | 5f37e1beac445b4a35121f378ff3e0deae83ff9d /src/components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 493aa2cdf30fb2ff5886c714030a20d714764b67 (diff) | |
parent | 35f6a24de79882902eaceadf6e3a8c8d60b8f704 (diff) | |
download | servo-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.py | 37 |
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: |