Skip to content

Commit 89b6c28

Browse files
committed
---
yaml --- r: 275429 b: refs/heads/auto c: 70601b8 h: refs/heads/master i: 275427: 1bfd9b8
1 parent 430efbd commit 89b6c28

File tree

67 files changed

+993
-231
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+993
-231
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
88
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
99
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1010
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
11-
refs/heads/auto: e0f997d3477fe28c2c5d99229bd1cd0de81604b4
11+
refs/heads/auto: 70601b8da249c789883725950ddf046070909095
1212
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1313
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336
1414
refs/tags/0.2: 1754d02027f2924bed83b0160ee340c7f41d5ea1

branches/auto/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
/stage3/
7979
/test/
8080
/tmp/
81+
/obj/
8182
TAGS
8283
TAGS.emacs
8384
TAGS.vi

branches/auto/RELEASES.md

Lines changed: 290 additions & 2 deletions
Large diffs are not rendered by default.

branches/auto/mk/main.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
######################################################################
1414

1515
# The version number
16-
CFG_RELEASE_NUM=1.9.0
16+
CFG_RELEASE_NUM=1.10.0
1717

1818
# An optional number to put after the label, e.g. '.2' -> '-beta.2'
1919
# NB Make sure it starts with a dot to conform to semver pre-release

branches/auto/src/bootstrap/Cargo.lock

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

branches/auto/src/bootstrap/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ path = "rustdoc.rs"
2121

2222
[dependencies]
2323
build_helper = { path = "../build_helper" }
24-
cmake = "0.1.10"
24+
cmake = "0.1.17"
2525
filetime = "0.1"
2626
num_cpus = "0.2"
2727
toml = "0.1"
@@ -31,3 +31,4 @@ winapi = "0.2"
3131
kernel32-sys = "0.2"
3232
gcc = "0.3.17"
3333
libc = "0.2"
34+
md5 = "0.1"

branches/auto/src/bootstrap/build/channel.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use std::env;
1112
use std::fs::{self, File};
1213
use std::io::prelude::*;
13-
use std::path::Path;
1414
use std::process::Command;
1515

1616
use build_helper::output;
17+
use md5;
1718

1819
use build::Build;
19-
use build::util::mtime;
2020

2121
pub fn collect(build: &mut Build) {
2222
let mut main_mk = String::new();
@@ -80,7 +80,8 @@ pub fn collect(build: &mut Build) {
8080
build.short_ver_hash = Some(short_ver_hash);
8181
}
8282

83-
build.bootstrap_key = mtime(Path::new("config.toml")).seconds()
84-
.to_string();
83+
let key = md5::compute(build.release.as_bytes());
84+
build.bootstrap_key = format!("{:02x}{:02x}{:02x}{:02x}",
85+
key[0], key[1], key[2], key[3]);
86+
env::set_var("RUSTC_BOOTSTRAP_KEY", &build.bootstrap_key);
8587
}
86-

branches/auto/src/bootstrap/build/check.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use std::fs;
12+
1113
use build::{Build, Compiler};
1214

1315
pub fn linkcheck(build: &Build, stage: u32, host: &str) {
@@ -29,9 +31,16 @@ pub fn cargotest(build: &Build, stage: u32, host: &str) {
2931
let sep = if cfg!(windows) { ";" } else {":" };
3032
let ref newpath = format!("{}{}{}", path.display(), sep, old_path);
3133

34+
// Note that this is a short, cryptic, and not scoped directory name. This
35+
// is currently to minimize the length of path on Windows where we otherwise
36+
// quickly run into path name limit constraints.
37+
let out_dir = build.out.join("ct");
38+
t!(fs::create_dir_all(&out_dir));
39+
3240
build.run(build.tool_cmd(compiler, "cargotest")
33-
.env("PATH", newpath)
34-
.arg(&build.cargo));
41+
.env("PATH", newpath)
42+
.arg(&build.cargo)
43+
.arg(&out_dir));
3544
}
3645

3746
pub fn tidy(build: &Build, stage: u32, host: &str) {

branches/auto/src/bootstrap/build/config.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use toml::{Parser, Decoder, Value};
3131
#[derive(Default)]
3232
pub struct Config {
3333
pub ccache: bool,
34+
pub ninja: bool,
3435
pub verbose: bool,
3536
pub submodules: bool,
3637
pub compiler_docs: bool,
@@ -107,6 +108,7 @@ struct Build {
107108
#[derive(RustcDecodable, Default)]
108109
struct Llvm {
109110
ccache: Option<bool>,
111+
ninja: Option<bool>,
110112
assertions: Option<bool>,
111113
optimize: Option<bool>,
112114
version_check: Option<bool>,
@@ -200,9 +202,9 @@ impl Config {
200202

201203
if let Some(ref llvm) = toml.llvm {
202204
set(&mut config.ccache, llvm.ccache);
205+
set(&mut config.ninja, llvm.ninja);
203206
set(&mut config.llvm_assertions, llvm.assertions);
204207
set(&mut config.llvm_optimize, llvm.optimize);
205-
set(&mut config.llvm_optimize, llvm.optimize);
206208
set(&mut config.llvm_version_check, llvm.version_check);
207209
set(&mut config.llvm_static_stdcpp, llvm.static_libstdcpp);
208210
}

branches/auto/src/bootstrap/build/native.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ pub fn llvm(build: &Build, target: &str) {
4343

4444
// http://llvm.org/docs/CMake.html
4545
let mut cfg = cmake::Config::new(build.src.join("src/llvm"));
46+
if build.config.ninja {
47+
cfg.generator("Ninja");
48+
}
4649
cfg.target(target)
4750
.host(&build.config.build)
4851
.out_dir(&dst)

branches/auto/src/bootstrap/build/sanity.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ pub fn check(build: &mut Build) {
4848
}
4949
}
5050
need_cmd("cmake".as_ref());
51+
if build.config.ninja {
52+
need_cmd("ninja".as_ref())
53+
}
5154
break
5255
}
5356

branches/auto/src/bootstrap/build/step.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ fn top_level(build: &Build) -> Vec<Step> {
150150
src: Source::Llvm { _dummy: () },
151151
target: &build.config.build,
152152
};
153-
targets.push(t.doc(stage));
153+
if build.config.docs {
154+
targets.push(t.doc(stage));
155+
}
154156
for host in build.config.host.iter() {
155157
if !build.flags.host.contains(host) {
156158
continue
@@ -316,7 +318,8 @@ impl<'a> Step<'a> {
316318
vec![self.tool_linkchecker(stage), self.doc(stage)]
317319
}
318320
Source::CheckCargoTest { stage } => {
319-
vec![self.tool_cargotest(stage)]
321+
vec![self.tool_cargotest(stage),
322+
self.librustc(self.compiler(stage))]
320323
}
321324
Source::CheckTidy { stage } => {
322325
vec![self.tool_tidy(stage)]
@@ -331,7 +334,7 @@ impl<'a> Step<'a> {
331334
vec![self.librustc(self.compiler(stage))]
332335
}
333336
Source::ToolCargoTest { stage } => {
334-
vec![self.librustc(self.compiler(stage))]
337+
vec![self.libstd(self.compiler(stage))]
335338
}
336339

337340
Source::DistDocs { stage } => vec![self.doc(stage)],
@@ -356,7 +359,9 @@ impl<'a> Step<'a> {
356359
let compiler = self.compiler(stage);
357360
for target in build.config.target.iter() {
358361
let target = self.target(target);
359-
base.push(target.dist_docs(stage));
362+
if build.config.docs {
363+
base.push(target.dist_docs(stage));
364+
}
360365
base.push(target.dist_std(compiler));
361366
}
362367
}

branches/auto/src/bootstrap/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ extern crate libc;
2020
extern crate num_cpus;
2121
extern crate rustc_serialize;
2222
extern crate toml;
23+
extern crate md5;
2324

2425
use std::env;
2526

branches/auto/src/doc/book/guessing-game.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -988,8 +988,7 @@ fn main() {
988988
989989
# Complete!
990990
991-
At this point, you have successfully built the Guessing Game! Congratulations!
991+
This project showed you a lot: `let`, `match`, methods, associated
992+
functions, using external crates, and more.
992993
993-
This first project showed you a lot: `let`, `match`, methods, associated
994-
functions, using external crates, and more. Our next project will show off
995-
even more.
994+
At this point, you have successfully built the Guessing Game! Congratulations!

branches/auto/src/libcollections/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
test(no_crate_inject, attr(allow(unused_variables), deny(warnings))))]
2828

2929
#![cfg_attr(test, allow(deprecated))] // rand
30+
#![cfg_attr(not(test), feature(slice_binary_search_by_key))] // impl [T]
3031
#![cfg_attr(not(stage0), deny(warnings))]
3132

3233
#![feature(alloc)]
@@ -131,3 +132,10 @@ pub enum Bound<T> {
131132
/// An infinite endpoint. Indicates that there is no bound in this direction.
132133
Unbounded,
133134
}
135+
136+
/// An intermediate trait for specialization of `Extend`.
137+
#[doc(hidden)]
138+
trait SpecExtend<I: IntoIterator> {
139+
/// Extends `self` with the contents of the given iterator.
140+
fn spec_extend(&mut self, iter: I);
141+
}

branches/auto/src/libcollections/linked_list.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ use core::mem;
3030
use core::ops::{BoxPlace, InPlace, Place, Placer};
3131
use core::ptr::{self, Shared};
3232

33+
use super::SpecExtend;
34+
3335
/// A doubly-linked list.
3436
#[stable(feature = "rust1", since = "1.0.0")]
3537
pub struct LinkedList<T> {
@@ -969,12 +971,24 @@ impl<'a, T> IntoIterator for &'a mut LinkedList<T> {
969971
#[stable(feature = "rust1", since = "1.0.0")]
970972
impl<A> Extend<A> for LinkedList<A> {
971973
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T) {
974+
<Self as SpecExtend<T>>::spec_extend(self, iter);
975+
}
976+
}
977+
978+
impl<I: IntoIterator> SpecExtend<I> for LinkedList<I::Item> {
979+
default fn spec_extend(&mut self, iter: I) {
972980
for elt in iter {
973981
self.push_back(elt);
974982
}
975983
}
976984
}
977985

986+
impl<T> SpecExtend<LinkedList<T>> for LinkedList<T> {
987+
fn spec_extend(&mut self, ref mut other: LinkedList<T>) {
988+
self.append(other);
989+
}
990+
}
991+
978992
#[stable(feature = "extend_ref", since = "1.2.0")]
979993
impl<'a, T: 'a + Copy> Extend<&'a T> for LinkedList<T> {
980994
fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {

branches/auto/src/libcollections/slice.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,44 @@ impl<T> [T] {
741741
core_slice::SliceExt::binary_search_by(self, f)
742742
}
743743

744+
/// Binary search a sorted slice with a key extraction function.
745+
///
746+
/// Assumes that the slice is sorted by the key, for instance with
747+
/// `sort_by_key` using the same key extraction function.
748+
///
749+
/// If a matching value is found then returns `Ok`, containing the
750+
/// index for the matched element; if no match is found then `Err`
751+
/// is returned, containing the index where a matching element could
752+
/// be inserted while maintaining sorted order.
753+
///
754+
/// # Examples
755+
///
756+
/// Looks up a series of four elements in a slice of pairs sorted by
757+
/// their second elements. The first is found, with a uniquely
758+
/// determined position; the second and third are not found; the
759+
/// fourth could match any position in `[1,4]`.
760+
///
761+
/// ```rust
762+
/// #![feature(slice_binary_search_by_key)]
763+
/// let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
764+
/// (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
765+
/// (1, 21), (2, 34), (4, 55)];
766+
///
767+
/// assert_eq!(s.binary_search_by_key(&13, |&(a,b)| b), Ok(9));
768+
/// assert_eq!(s.binary_search_by_key(&4, |&(a,b)| b), Err(7));
769+
/// assert_eq!(s.binary_search_by_key(&100, |&(a,b)| b), Err(13));
770+
/// let r = s.binary_search_by_key(&1, |&(a,b)| b);
771+
/// assert!(match r { Ok(1...4) => true, _ => false, });
772+
/// ```
773+
#[unstable(feature = "slice_binary_search_by_key", reason = "recently added", issue = "0")]
774+
#[inline]
775+
pub fn binary_search_by_key<B, F>(&self, b: &B, f: F) -> Result<usize, usize>
776+
where F: FnMut(&T) -> B,
777+
B: Ord
778+
{
779+
core_slice::SliceExt::binary_search_by_key(self, b, f)
780+
}
781+
744782
/// Sorts the slice, in place.
745783
///
746784
/// This is equivalent to `self.sort_by(|a, b| a.cmp(b))`.

branches/auto/src/libcollections/str.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,9 +634,9 @@ impl str {
634634
/// Basic usage:
635635
///
636636
/// ```
637-
/// let s = "Per Martin-Löf";
637+
/// let mut s = "Per Martin-Löf".to_string();
638638
///
639-
/// let (first, last) = s.split_at(3);
639+
/// let (first, last) = s.split_at_mut(3);
640640
///
641641
/// assert_eq!("Per", first);
642642
/// assert_eq!(" Martin-Löf", last);

branches/auto/src/libcollections/vec.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ use core::ops;
7575
use core::ptr;
7676
use core::slice;
7777

78+
use super::SpecExtend;
7879
use super::range::RangeArgument;
7980

8081
/// A contiguous growable array type, written `Vec<T>` but pronounced 'vector.'
@@ -1390,10 +1391,22 @@ impl<'a, T> IntoIterator for &'a mut Vec<T> {
13901391
impl<T> Extend<T> for Vec<T> {
13911392
#[inline]
13921393
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {
1394+
<Self as SpecExtend<I>>::spec_extend(self, iter);
1395+
}
1396+
}
1397+
1398+
impl<I: IntoIterator> SpecExtend<I> for Vec<I::Item> {
1399+
default fn spec_extend(&mut self, iter: I) {
13931400
self.extend_desugared(iter.into_iter())
13941401
}
13951402
}
13961403

1404+
impl<T> SpecExtend<Vec<T>> for Vec<T> {
1405+
fn spec_extend(&mut self, ref mut other: Vec<T>) {
1406+
self.append(other);
1407+
}
1408+
}
1409+
13971410
impl<T> Vec<T> {
13981411
fn extend_desugared<I: Iterator<Item = T>>(&mut self, mut iterator: I) {
13991412
// This function should be the moral equivalent of:

0 commit comments

Comments
 (0)