aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2015-08-02 17:34:17 -0700
committerPatrick Walton <pcwalton@mimiga.net>2015-09-27 15:40:48 -0700
commitf2f91886ee2a1082e47b44a9ffd372170ffc30cc (patch)
tree2b1583a3e05ae849efdea1e3a42b316a160f11ce /components/script/dom/bindings
parent9523283c14f417014ca6d4fa8179c873bbb8f21f (diff)
downloadservo-f2f91886ee2a1082e47b44a9ffd372170ffc30cc.tar.gz
servo-f2f91886ee2a1082e47b44a9ffd372170ffc30cc.zip
script: Stop reallocating so much when converting DOM strings to JS
values. `size_hint()` in `utf16_units()` seems busted, so we do it ourselves.
Diffstat (limited to 'components/script/dom/bindings')
-rw-r--r--components/script/dom/bindings/conversions.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs
index eed41d6f926..23105fa7810 100644
--- a/components/script/dom/bindings/conversions.rs
+++ b/components/script/dom/bindings/conversions.rs
@@ -394,8 +394,9 @@ impl<T: Float + FromJSValConvertible<Config=()>> FromJSValConvertible for Finite
impl ToJSValConvertible for str {
fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) {
+ let mut string_utf16: Vec<u16> = Vec::with_capacity(self.len());
unsafe {
- let string_utf16: Vec<u16> = self.utf16_units().collect();
+ string_utf16.extend(self.utf16_units());
let jsstr = JS_NewUCStringCopyN(cx, string_utf16.as_ptr() as *const i16,
string_utf16.len() as libc::size_t);
if jsstr.is_null() {