aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-04-06 19:40:24 +0200
committerMs2ger <ms2ger@gmail.com>2014-04-06 19:42:39 +0200
commitccaa46e4a31a76d9f8faffd57c48c83ddbfd9fe5 (patch)
tree3d3be6a1cb7008a5aad33c4098051b7e49d2112e /src/components/script/dom/bindings/codegen/CodegenRust.py
parent9a909229e3d0ef387d35f5887b0401d096695579 (diff)
downloadservo-ccaa46e4a31a76d9f8faffd57c48c83ddbfd9fe5.tar.gz
servo-ccaa46e4a31a76d9f8faffd57c48c83ddbfd9fe5.zip
Use ToJSValConvertible to convert enums to JSVal.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 8174a37fa81..52e1529f968 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1092,15 +1092,7 @@ def getWrapTemplateForType(type, descriptorProvider, result, successCode,
if type.nullable():
raise TypeError("We don't support nullable enumerated return types "
"yet")
- return ("""assert!((%(result)s as uint) < %(strings)s.len());
-let %(resultStr)s: *JSString = JS_NewStringCopyN(cx, &%(strings)s[%(result)s as u32].value[0] as *i8, %(strings)s[%(result)s as u32].length as libc::size_t);
-if %(resultStr)s.is_null() {
- return 0;
-}
-""" % { "result" : result,
- "resultStr" : result + "_str",
- "strings" : type.inner.identifier.name + "Values::strings" } +
- setValue("StringValue(&*(%s_str))" % result), False)
+ return (setValue("(%s).to_jsval(cx)" % result), True)
if type.isCallback():
assert not type.isInterface()
@@ -2909,6 +2901,10 @@ class CGEnum(CGThing):
def __init__(self, enum):
CGThing.__init__(self)
inner = """
+use dom::bindings::conversions::ToJSValConvertible;
+use js::jsapi::JSContext;
+use js::jsval::JSVal;
+
#[repr(uint)]
pub enum valuelist {
%s
@@ -2917,6 +2913,12 @@ pub enum valuelist {
pub static strings: &'static [&'static str] = &[
%s,
];
+
+impl ToJSValConvertible for valuelist {
+ fn to_jsval(&self, cx: *JSContext) -> JSVal {
+ strings[*self as uint].to_owned().to_jsval(cx)
+ }
+}
""" % (",\n ".join(map(getEnumValueName, enum.values())),
",\n ".join(['&"%s"' % val for val in enum.values()]))