From c87e9a5815ba4084ca2419eb39786b9bf6d45319 Mon Sep 17 00:00:00 2001 From: Michael Sullivan Date: Fri, 24 Aug 2012 14:41:23 -0700 Subject: [PATCH] Get rid of the unseemly reinterpret_casts in build_sized implementations. Closes #3272. --- src/libcore/at_vec.rs | 10 ++-------- src/libcore/vec.rs | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 7ae91aebed5..a32f74e737f 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -52,14 +52,8 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc, #[inline(always)] pure fn build_sized(size: uint, builder: fn(push: pure fn(+A))) -> @[A] { let mut vec = @[]; - unsafe { - unsafe::reserve(vec, size); - // This is an awful hack to be able to make the push function - // pure. Is there a better way? - ::unsafe::reinterpret_cast:: - - (builder)(|+x| unsafe::push(vec, x)); - } + unsafe { unsafe::reserve(vec, size); } + builder(|+x| unsafe { unsafe::push(vec, x) }); return vec; } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index c6be27c4b77..b02abdffcec 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -234,14 +234,8 @@ fn reserve_at_least(&v: ~[const T], n: uint) { #[inline(always)] pure fn build_sized(size: uint, builder: fn(push: pure fn(+A))) -> ~[A] { let mut vec = ~[]; - unsafe { - reserve(vec, size); - // This is an awful hack to be able to make the push function - // pure. Is there a better way? - ::unsafe::reinterpret_cast:: - - (builder)(|+x| push(vec, x)); - } + unchecked { reserve(vec, size); } + builder(|+x| unchecked { push(vec, x) }); return vec; } -- GitLab