Skip to content

Commit 9fb8741

Browse files
committed
Handle breakage after libcore split
API Changes: - &[T] and ~[T] no longer support the addition operator (+)
1 parent 300d865 commit 9fb8741

File tree

23 files changed

+75
-70
lines changed

23 files changed

+75
-70
lines changed

src/compiletest/runtest.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,7 @@ fn make_lib_name(config: &config, auxfile: &Path, testfile: &Path) -> Path {
997997
fn make_exe_name(config: &config, testfile: &Path) -> Path {
998998
let mut f = output_base_name(config, testfile);
999999
if !os::consts::EXE_SUFFIX.is_empty() {
1000-
match f.filename().map(|s| s + os::consts::EXE_SUFFIX.as_bytes()) {
1000+
match f.filename().map(|s| Vec::from_slice(s).append(os::consts::EXE_SUFFIX.as_bytes())) {
10011001
Some(v) => f.set_filename(v),
10021002
None => ()
10031003
}
@@ -1091,7 +1091,7 @@ fn make_out_name(config: &config, testfile: &Path, extension: &str) -> Path {
10911091

10921092
fn aux_output_dir_name(config: &config, testfile: &Path) -> Path {
10931093
let mut f = output_base_name(config, testfile);
1094-
match f.filename().map(|s| s + bytes!(".libaux")) {
1094+
match f.filename().map(|s| Vec::from_slice(s).append(bytes!(".libaux"))) {
10951095
Some(v) => f.set_filename(v),
10961096
None => ()
10971097
}
@@ -1273,7 +1273,7 @@ fn append_suffix_to_stem(p: &Path, suffix: &str) -> Path {
12731273
(*p).clone()
12741274
} else {
12751275
let stem = p.filestem().unwrap();
1276-
p.with_filename(stem + bytes!("-") + suffix.as_bytes())
1276+
p.with_filename(Vec::from_slice(stem).append(bytes!("-")).append(suffix.as_bytes()))
12771277
}
12781278
}
12791279

src/doc/rust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3604,7 +3604,7 @@ fn map<A: Clone, B: Clone>(f: |A| -> B, xs: &[A]) -> Vec<B> {
36043604
}
36053605
let first: B = f(xs[0].clone());
36063606
let rest: Vec<B> = map(f, xs.slice(1, xs.len()));
3607-
return [first] + rest;
3607+
return vec![first].append(rest.as_slice());
36083608
}
36093609
~~~~
36103610

src/libcore/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,6 @@ mod std {
111111
#[cfg(test)] pub use realstd::rt; // needed for fail!()
112112
#[cfg(test)] pub use realstd::option; // needed for assert!()
113113
#[cfg(test)] pub use realstd::os; // needed for tests
114+
#[cfg(test)] pub use realstd::slice; // needed for tests
115+
#[cfg(test)] pub use realstd::vec; // needed for vec![]
114116
}

src/libcore/should_not_exist.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ use char::Char;
1313
use clone::Clone;
1414
use container::Container;
1515
use default::Default;
16+
use finally::try_finally;
1617
use intrinsics;
17-
use iter::{Iterator, FromIterator};
18+
use iter::{range, Iterator, FromIterator};
1819
use mem;
1920
use num::{CheckedMul, CheckedAdd};
2021
use option::{Some, None};
@@ -25,7 +26,6 @@ use slice::ImmutableVector;
2526
use str::StrSlice;
2627

2728
#[cfg(not(test))] use ops::Add;
28-
#[cfg(not(test))] use slice::Vector;
2929

3030
#[allow(ctypes)]
3131
extern {
@@ -147,6 +147,34 @@ impl<'a> Add<&'a str,~str> for &'a str {
147147
impl<A: Clone> Clone for ~[A] {
148148
#[inline]
149149
fn clone(&self) -> ~[A] {
150-
self.iter().map(|a| a.clone()).collect()
150+
let len = self.len();
151+
let data_size = len.checked_mul(&mem::size_of::<A>()).unwrap();
152+
let size = mem::size_of::<Vec<()>>().checked_add(&data_size).unwrap();
153+
154+
unsafe {
155+
let ret = alloc(size) as *mut Vec<A>;
156+
157+
(*ret).fill = len * mem::nonzero_size_of::<A>();
158+
(*ret).alloc = len * mem::nonzero_size_of::<A>();
159+
160+
let mut i = 0;
161+
let p = &mut (*ret).data as *mut _ as *mut A;
162+
try_finally(
163+
&mut i, (),
164+
|i, ()| while *i < len {
165+
mem::move_val_init(
166+
&mut(*p.offset(*i as int)),
167+
self.unsafe_ref(*i).clone());
168+
*i += 1;
169+
},
170+
|i| if *i < len {
171+
// we must be failing, clean up after ourselves
172+
for j in range(0, *i as int) {
173+
ptr::read(&*p.offset(j));
174+
}
175+
free(ret as *u8);
176+
});
177+
cast::transmute(ret)
178+
}
151179
}
152180
}

src/librustc/middle/trans/base.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2110,11 +2110,11 @@ pub fn write_metadata(cx: &CrateContext, krate: &ast::Crate) -> Vec<u8> {
21102110

21112111
let encode_parms = crate_ctxt_to_encode_parms(cx, encode_inlined_item);
21122112
let metadata = encoder::encode_metadata(encode_parms, krate);
2113-
let compressed = encoder::metadata_encoding_version +
2114-
match flate::deflate_bytes(metadata.as_slice()) {
2115-
Some(compressed) => compressed,
2116-
None => cx.sess().fatal(format!("failed to compress metadata", ))
2117-
}.as_slice();
2113+
let compressed = Vec::from_slice(encoder::metadata_encoding_version)
2114+
.append(match flate::deflate_bytes(metadata.as_slice()) {
2115+
Some(compressed) => compressed,
2116+
None => cx.sess().fatal(format!("failed to compress metadata"))
2117+
}.as_slice());
21182118
let llmeta = C_bytes(cx, compressed.as_slice());
21192119
let llconst = C_struct(cx, [llmeta], false);
21202120
let name = format!("rust_metadata_{}_{}_{}", cx.link_meta.crateid.name,

src/librustc/middle/trans/monomorphize.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,9 @@ pub fn monomorphic_fn(ccx: &CrateContext,
157157
// This is a bit unfortunate.
158158

159159
let idx = real_substs.tps.len() - num_method_ty_params;
160-
let substs = real_substs.tps.slice(0, idx) +
161-
&[real_substs.self_ty.unwrap()] + real_substs.tps.tailn(idx);
160+
let substs = Vec::from_slice(real_substs.tps.slice(0, idx))
161+
.append([real_substs.self_ty.unwrap()])
162+
.append(real_substs.tps.tailn(idx));
162163
debug!("static default: changed substitution to {}",
163164
substs.repr(ccx.tcx()));
164165

src/librustdoc/html/render.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,8 @@ impl<'a> SourceCollector<'a> {
549549
root_path.push_str("../");
550550
});
551551

552-
cur.push(p.filename().expect("source has no filename") + bytes!(".html"));
552+
cur.push(Vec::from_slice(p.filename().expect("source has no filename"))
553+
.append(bytes!(".html")));
553554
let mut w = BufferedWriter::new(try!(File::create(&cur)));
554555

555556
let title = format!("{} -- source", cur.filename_display());

src/libstd/ascii.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use to_str::{IntoStr};
1414
use str;
1515
use str::Str;
16-
use str::StrSlice;
16+
use str::{StrAllocating, StrSlice};
1717
use str::OwnedStr;
1818
use container::Container;
1919
use cast;

src/libstd/num/i16.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
//! Operations and constants for signed 16-bits integers (`i16` type)
1212
1313
use from_str::FromStr;
14-
use iter::Iterator;
1514
use num::{ToStrRadix, FromStrRadix};
1615
use num::strconv;
1716
use option::Option;
18-
use slice::{ImmutableVector, OwnedVector};
17+
use slice::ImmutableVector;
1918
use str;
2019

2120
pub use core::i16::{BITS, BYTES, MIN, MAX};

src/libstd/num/i32.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
//! Operations and constants for signed 32-bits integers (`i32` type)
1212
1313
use from_str::FromStr;
14-
use iter::Iterator;
1514
use num::{ToStrRadix, FromStrRadix};
1615
use num::strconv;
1716
use option::Option;
18-
use slice::{ImmutableVector, OwnedVector};
17+
use slice::ImmutableVector;
1918
use str;
2019

2120
pub use core::i32::{BITS, BYTES, MIN, MAX};

0 commit comments

Comments
 (0)