diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2015-08-02 17:34:17 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2015-09-27 15:40:48 -0700 |
commit | f2f91886ee2a1082e47b44a9ffd372170ffc30cc (patch) | |
tree | 2b1583a3e05ae849efdea1e3a42b316a160f11ce /components/script/dom/bindings | |
parent | 9523283c14f417014ca6d4fa8179c873bbb8f21f (diff) | |
download | servo-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.rs | 3 |
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() { |