From 6f569dee928e4fb021f24829d34372bf7feba867 Mon Sep 17 00:00:00 2001 From: yodalee Date: Sun, 28 Dec 2014 22:42:13 +0800 Subject: [PATCH 1/2] add str ToJSValConvertible for str type --- components/script/dom/bindings/conversions.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 7cc6ef2cdaf..a08e8dbb7e8 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -44,7 +44,7 @@ pub trait IDLInterface { } /// A trait to convert Rust types to `JSVal`s. -pub trait ToJSValConvertible { +pub trait ToJSValConvertible for Sized? { /// Convert `self` to a `JSVal`. JSAPI failure causes a task failure. fn to_jsval(&self, cx: *mut JSContext) -> JSVal; } @@ -232,6 +232,19 @@ impl FromJSValConvertible<()> for f64 { } } +impl ToJSValConvertible for str { + fn to_jsval(&self, cx: *mut JSContext) -> JSVal { + unsafe { + let string_utf16: Vec = self.utf16_units().collect(); + let jsstr = JS_NewUCStringCopyN(cx, string_utf16.as_ptr(), string_utf16.len() as libc::size_t); + if jsstr.is_null() { + panic!("JS_NewUCStringCopyN failed"); + } + StringValue(&*jsstr) + } + } +} + impl ToJSValConvertible for DOMString { fn to_jsval(&self, cx: *mut JSContext) -> JSVal { unsafe { From bb087c238bce1bc5e50ac02ff45d344061794519 Mon Sep 17 00:00:00 2001 From: yodalee Date: Sun, 28 Dec 2014 22:50:22 +0800 Subject: [PATCH 2/2] use str to_jsval() now xmlhttprequest.rs, CodegenRust.py replace into_string().to_jsval() to to_jsval() conversions.rs DOMString to_jsval() use as_slice().tojsval() now --- components/script/dom/bindings/codegen/CodegenRust.py | 2 +- components/script/dom/bindings/conversions.rs | 9 +-------- components/script/dom/xmlhttprequest.rs | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 814f453c1f7..49abbdfd6fb 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2781,7 +2781,7 @@ pub const strings: &'static [&'static str] = &[ impl ToJSValConvertible for super::%s { fn to_jsval(&self, cx: *mut JSContext) -> JSVal { - strings[*self as uint].into_string().to_jsval(cx) + strings[*self as uint].to_jsval(cx) } } """ % (",\n ".join(['"%s"' % val for val in enum.values()]), enum.identifier.name) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index a08e8dbb7e8..08c2abb9e8b 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -247,14 +247,7 @@ impl ToJSValConvertible for str { impl ToJSValConvertible for DOMString { fn to_jsval(&self, cx: *mut JSContext) -> JSVal { - unsafe { - let string_utf16: Vec = self.as_slice().utf16_units().collect(); - let jsstr = JS_NewUCStringCopyN(cx, string_utf16.as_ptr(), string_utf16.len() as libc::size_t); - if jsstr.is_null() { - panic!("JS_NewUCStringCopyN failed"); - } - StringValue(&*jsstr) - } + self.as_slice().to_jsval(cx) } } diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index b50a5c4330a..c8e2fbdd5a5 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -695,7 +695,7 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> { if ready_state == XMLHttpRequestState::XHRDone || ready_state == XMLHttpRequestState::Loading { self.text_response().to_jsval(cx) } else { - "".into_string().to_jsval(cx) + "".to_jsval(cx) } }, _ if self.ready_state.get() != XMLHttpRequestState::XHRDone => NullValue(),