Skip to content

Commit e5c9d77

Browse files
author
Dave Huseby
committed
---
yaml --- r: 194363 b: refs/heads/tmp c: 3a0c15f h: refs/heads/master i: 194361: f29fd9b 194359: e4ddf5f v: v3
1 parent a131efe commit e5c9d77

File tree

1,987 files changed

+1919
-8055
lines changed

Some content is hidden

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

1,987 files changed

+1919
-8055
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ refs/heads/building: 126db549b038c84269a1e4fe46f051b2c15d6970
3434
refs/heads/beta: a3b13610c5b93d9ada072471a001a5613df6a960
3535
refs/heads/windistfix: 7608dbad651f02e837ed05eef3d74a6662a6e928
3636
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
37-
refs/heads/tmp: 1588caca61a6476734b191dfab3fe16468abbfef
37+
refs/heads/tmp: 3a0c15f3cf6361c57e1f3aa544031affb4a70aca
3838
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3939
refs/tags/homu-tmp: 28a0b25f424090255966273994748a9f9901059f
4040
refs/heads/gate: 97c84447b65164731087ea82685580cc81424412

branches/tmp/configure

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -479,19 +479,10 @@ esac
479479
# Detect 64 bit linux systems with 32 bit userland and force 32 bit compilation
480480
if [ $CFG_OSTYPE = unknown-linux-gnu -a $CFG_CPUTYPE = x86_64 ]
481481
then
482-
# $SHELL does not exist in standard 'sh', so probably only exists
483-
# if configure is running in an interactive bash shell. /usr/bin/env
484-
# exists *everywhere*.
485-
BIN_TO_PROBE="$SHELL"
486-
if [ -z "$BIN_TO_PROBE" -a -e "/usr/bin/env" ]; then
487-
BIN_TO_PROBE="/usr/bin/env"
482+
file -L "$SHELL" | grep -q "x86[_-]64"
483+
if [ $? != 0 ]; then
484+
CFG_CPUTYPE=i686
488485
fi
489-
if [ -n "$BIN_TO_PROBE" ]; then
490-
file -L "$BIN_TO_PROBE" | grep -q "x86[_-]64"
491-
if [ $? != 0 ]; then
492-
CFG_CPUTYPE=i686
493-
fi
494-
fi
495486
fi
496487

497488

branches/tmp/src/compiletest/compiletest.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
#![feature(std_misc)]
2121
#![feature(test)]
2222
#![feature(path_ext)]
23-
#![feature(convert)]
24-
#![feature(str_char)]
2523

2624
#![deny(warnings)]
2725

@@ -117,7 +115,7 @@ pub fn parse_config(args: Vec<String> ) -> Config {
117115

118116
fn opt_path(m: &getopts::Matches, nm: &str) -> PathBuf {
119117
match m.opt_str(nm) {
120-
Some(s) => PathBuf::from(&s),
118+
Some(s) => PathBuf::new(&s),
121119
None => panic!("no option (=path) found for {}", nm),
122120
}
123121
}
@@ -132,18 +130,18 @@ pub fn parse_config(args: Vec<String> ) -> Config {
132130
compile_lib_path: matches.opt_str("compile-lib-path").unwrap(),
133131
run_lib_path: matches.opt_str("run-lib-path").unwrap(),
134132
rustc_path: opt_path(matches, "rustc-path"),
135-
clang_path: matches.opt_str("clang-path").map(|s| PathBuf::from(&s)),
133+
clang_path: matches.opt_str("clang-path").map(|s| PathBuf::new(&s)),
136134
valgrind_path: matches.opt_str("valgrind-path"),
137135
force_valgrind: matches.opt_present("force-valgrind"),
138-
llvm_bin_path: matches.opt_str("llvm-bin-path").map(|s| PathBuf::from(&s)),
136+
llvm_bin_path: matches.opt_str("llvm-bin-path").map(|s| PathBuf::new(&s)),
139137
src_base: opt_path(matches, "src-base"),
140138
build_base: opt_path(matches, "build-base"),
141139
aux_base: opt_path(matches, "aux-base"),
142140
stage_id: matches.opt_str("stage-id").unwrap(),
143141
mode: matches.opt_str("mode").unwrap().parse().ok().expect("invalid mode"),
144142
run_ignored: matches.opt_present("ignored"),
145143
filter: filter,
146-
logfile: matches.opt_str("logfile").map(|s| PathBuf::from(&s)),
144+
logfile: matches.opt_str("logfile").map(|s| PathBuf::new(&s)),
147145
runtool: matches.opt_str("runtool"),
148146
host_rustcflags: matches.opt_str("host-rustcflags"),
149147
target_rustcflags: matches.opt_str("target-rustcflags"),

branches/tmp/src/compiletest/header.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ pub struct TestProps {
4040
pub check_stdout: bool,
4141
// Don't force a --crate-type=dylib flag on the command line
4242
pub no_prefer_dynamic: bool,
43-
// Run --pretty expanded when running pretty printing tests
44-
pub pretty_expanded: bool,
43+
// Don't run --pretty expanded when running pretty printing tests
44+
pub no_pretty_expanded: bool,
4545
// Which pretty mode are we testing with, default to 'normal'
4646
pub pretty_mode: String,
4747
// Only compare pretty output and don't try compiling
@@ -62,7 +62,7 @@ pub fn load_props(testfile: &Path) -> TestProps {
6262
let mut force_host = false;
6363
let mut check_stdout = false;
6464
let mut no_prefer_dynamic = false;
65-
let mut pretty_expanded = false;
65+
let mut no_pretty_expanded = false;
6666
let mut pretty_mode = None;
6767
let mut pretty_compare_only = false;
6868
let mut forbid_output = Vec::new();
@@ -96,8 +96,8 @@ pub fn load_props(testfile: &Path) -> TestProps {
9696
no_prefer_dynamic = parse_no_prefer_dynamic(ln);
9797
}
9898

99-
if !pretty_expanded {
100-
pretty_expanded = parse_pretty_expanded(ln);
99+
if !no_pretty_expanded {
100+
no_pretty_expanded = parse_no_pretty_expanded(ln);
101101
}
102102

103103
if pretty_mode.is_none() {
@@ -152,7 +152,7 @@ pub fn load_props(testfile: &Path) -> TestProps {
152152
force_host: force_host,
153153
check_stdout: check_stdout,
154154
no_prefer_dynamic: no_prefer_dynamic,
155-
pretty_expanded: pretty_expanded,
155+
no_pretty_expanded: no_pretty_expanded,
156156
pretty_mode: pretty_mode.unwrap_or("normal".to_string()),
157157
pretty_compare_only: pretty_compare_only,
158158
forbid_output: forbid_output,
@@ -295,8 +295,8 @@ fn parse_no_prefer_dynamic(line: &str) -> bool {
295295
parse_name_directive(line, "no-prefer-dynamic")
296296
}
297297

298-
fn parse_pretty_expanded(line: &str) -> bool {
299-
parse_name_directive(line, "pretty-expanded")
298+
fn parse_no_pretty_expanded(line: &str) -> bool {
299+
parse_name_directive(line, "no-pretty-expanded")
300300
}
301301

302302
fn parse_pretty_mode(line: &str) -> Option<String> {
@@ -328,10 +328,10 @@ fn parse_exec_env(line: &str) -> Option<(String, String)> {
328328

329329
fn parse_pp_exact(line: &str, testfile: &Path) -> Option<PathBuf> {
330330
match parse_name_value_directive(line, "pp-exact") {
331-
Some(s) => Some(PathBuf::from(&s)),
331+
Some(s) => Some(PathBuf::new(&s)),
332332
None => {
333333
if parse_name_directive(line, "pp-exact") {
334-
testfile.file_name().map(|s| PathBuf::from(s))
334+
testfile.file_name().map(|s| PathBuf::new(s))
335335
} else {
336336
None
337337
}
@@ -340,8 +340,7 @@ fn parse_pp_exact(line: &str, testfile: &Path) -> Option<PathBuf> {
340340
}
341341

342342
fn parse_name_directive(line: &str, directive: &str) -> bool {
343-
// This 'no-' rule is a quick hack to allow pretty-expanded and no-pretty-expanded to coexist
344-
line.contains(directive) && !line.contains(&("no-".to_string() + directive))
343+
line.contains(directive)
345344
}
346345

347346
pub fn parse_name_value_directive(line: &str, directive: &str)

branches/tmp/src/compiletest/runtest.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ fn run_pretty_test(config: &Config, props: &TestProps, testfile: &Path) {
245245
if !proc_res.status.success() {
246246
fatal_proc_rec("pretty-printed source does not typecheck", &proc_res);
247247
}
248-
if !props.pretty_expanded { return }
248+
if props.no_pretty_expanded { return }
249249

250250
// additionally, run `--pretty expanded` and try to build it.
251251
let proc_res = print_source(config, props, testfile, srcs[round].clone(), "expanded");
@@ -1440,7 +1440,7 @@ fn aux_output_dir_name(config: &Config, testfile: &Path) -> PathBuf {
14401440
}
14411441

14421442
fn output_testname(testfile: &Path) -> PathBuf {
1443-
PathBuf::from(testfile.file_stem().unwrap())
1443+
PathBuf::new(testfile.file_stem().unwrap())
14441444
}
14451445

14461446
fn output_base_name(config: &Config, testfile: &Path) -> PathBuf {

branches/tmp/src/doc/intro.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -446,16 +446,16 @@ It gives us this error:
446446
error: aborting due to previous error
447447
```
448448
449-
This is a little confusing because there are two closures here: the one passed
450-
to `map`, and the one passed to `thread::scoped`. In this case, the closure for
451-
`thread::scoped` is attempting to reference `numbers`, a `Vec<i32>`. This
452-
closure is a `FnOnce` closure, as that’s what `thread::scoped` takes as an
453-
argument. `FnOnce` closures take ownership of their environment. That’s fine,
454-
but there’s one detail: because of `map`, we’re going to make three of these
455-
closures. And since all three try to take ownership of `numbers`, that would be
456-
a problem. That’s what it means by ‘cannot move out of captured outer
457-
variable’: our `thread::scoped` closure wants to take ownership, and it can’t,
458-
because the closure for `map` won’t let it.
449+
It mentions that "captured outer variable in an `FnMut` closure".
450+
Because we declared the closure as a moving closure, and it referred
451+
to `numbers`, the closure will try to take ownership of the
452+
vector. But the closure itself is created in a loop, and hence we will
453+
actually create three closures, one for every iteration of the
454+
loop. This means that all three of those closures would try to own
455+
`numbers`, which is impossible -- `numbers` must have just one
456+
owner. Rust detects this and gives us the error: we claim that
457+
`numbers` has ownership, but our code tries to make three owners. This
458+
may cause a safety problem, so Rust disallows it.
459459
460460
What to do here? Rust has two types that helps us: `Arc<T>` and `Mutex<T>`.
461461
*Arc* stands for "atomically reference counted". In other words, an Arc will

branches/tmp/src/doc/reference.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,8 @@ may optionally begin with any number of `attributes` that apply to the
816816
containing module. Attributes on the anonymous crate module define important
817817
metadata that influences the behavior of the compiler.
818818

819-
```no_run
819+
```{.rust}
820+
# #![allow(unused_attribute)]
820821
// Crate name
821822
#![crate_name = "projx"]
822823
@@ -1019,7 +1020,6 @@ Use declarations support a number of convenient shortcuts:
10191020
An example of `use` declarations:
10201021

10211022
```
1022-
# #![feature(core)]
10231023
use std::iter::range_step;
10241024
use std::option::Option::{Some, None};
10251025
use std::collections::hash_map::{self, HashMap};
@@ -1080,7 +1080,6 @@ declarations.
10801080
An example of what will and will not work for `use` items:
10811081

10821082
```
1083-
# #![feature(core)]
10841083
# #![allow(unused_imports)]
10851084
use foo::core::iter; // good: foo is at the root of the crate
10861085
use foo::baz::foobaz; // good: foo is at the root of the crate
@@ -1782,7 +1781,6 @@ functions, with the exception that they may not have a body and are instead
17821781
terminated by a semicolon.
17831782

17841783
```
1785-
# #![feature(libc)]
17861784
extern crate libc;
17871785
use libc::{c_char, FILE};
17881786

branches/tmp/src/doc/trpl/compound-data-types.md

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ This pattern is very powerful, and we'll see it repeated more later.
4747

4848
There are also a few things you can do with a tuple as a whole, without
4949
destructuring. You can assign one tuple into another, if they have the same
50-
contained types and [arity]. Tuples have the same arity when they have the same
50+
contained types and arity. Tuples have the same arity when they have the same
5151
length.
5252

5353
```rust
@@ -196,9 +196,8 @@ Now, we have actual names, rather than positions. Good names are important,
196196
and with a struct, we have actual names.
197197

198198
There _is_ one case when a tuple struct is very useful, though, and that's a
199-
tuple struct with only one element. We call this the *newtype* pattern, because
200-
it allows you to create a new type, distinct from that of its contained value
201-
and expressing its own semantic meaning:
199+
tuple struct with only one element. We call this a *newtype*, because it lets
200+
you create a new type that's similar to another one:
202201

203202
```{rust}
204203
struct Inches(i32);
@@ -217,7 +216,7 @@ destructuring `let`, as we discussed previously in 'tuples.' In this case, the
217216

218217
Finally, Rust has a "sum type", an *enum*. Enums are an incredibly useful
219218
feature of Rust, and are used throughout the standard library. An `enum` is
220-
a type which relates a set of alternates to a specific name. For example, below
219+
a type which ties a set of alternates to a specific name. For example, below
221220
we define `Character` to be either a `Digit` or something else. These
222221
can be used via their fully scoped names: `Character::Other` (more about `::`
223222
below).
@@ -229,8 +228,8 @@ enum Character {
229228
}
230229
```
231230

232-
Most normal types are allowed as the variant components of an `enum`. Here are
233-
some examples:
231+
An `enum` variant can be defined as most normal types. Below are some example
232+
types which also would be allowed in an `enum`.
234233

235234
```rust
236235
struct Empty;
@@ -240,15 +239,15 @@ struct Status { Health: i32, Mana: i32, Attack: i32, Defense: i32 }
240239
struct HeightDatabase(Vec<i32>);
241240
```
242241

243-
You see that, depending on its type, an `enum` variant may or may not hold data.
244-
In `Character`, for instance, `Digit` gives a meaningful name for an `i32`
245-
value, where `Other` is only a name. However, the fact that they represent
246-
distinct categories of `Character` is a very useful property.
242+
So you see that depending on the sub-datastructure, the `enum` variant, same as
243+
a struct, may or may not hold data. That is, in `Character`, `Digit` is a name
244+
tied to an `i32` where `Other` is just a name. However, the fact that they are
245+
distinct makes this very useful.
247246

248-
As with structures, the variants of an enum by default are not comparable with
249-
equality operators (`==`, `!=`), have no ordering (`<`, `>=`, etc.), and do not
250-
support other binary operations such as `*` and `+`. As such, the following code
251-
is invalid for the example `Character` type:
247+
As with structures, enums don't by default have access to operators such as
248+
compare ( `==` and `!=`), binary operations (`*` and `+`), and order
249+
(`<` and `>=`). As such, using the previous `Character` type, the
250+
following code is invalid:
252251

253252
```{rust,ignore}
254253
// These assignments both succeed
@@ -266,10 +265,9 @@ let four_equals_ten = four == ten;
266265
```
267266

268267
This may seem rather limiting, but it's a limitation which we can overcome.
269-
There are two ways: by implementing equality ourselves, or by pattern matching
270-
variants with [`match`][match] expressions, which you'll learn in the next
271-
chapter. We don't know enough about Rust to implement equality yet, but we can
272-
use the `Ordering` enum from the standard library, which does:
268+
There are two ways: by implementing equality ourselves, or by using the
269+
[`match`][match] keyword. We don't know enough about Rust to implement equality
270+
yet, but we can use the `Ordering` enum from the standard library, which does:
273271

274272
```
275273
enum Ordering {
@@ -279,8 +277,9 @@ enum Ordering {
279277
}
280278
```
281279

282-
Because `Ordering` has already been defined for us, we will import it with the
283-
`use` keyword. Here's an example of how it is used:
280+
Because we did not define `Ordering`, we must import it (from the std
281+
library) with the `use` keyword. Here's an example of how `Ordering` is
282+
used:
284283

285284
```{rust}
286285
use std::cmp::Ordering;
@@ -314,17 +313,17 @@ the standard library if you need them.
314313

315314
Okay, let's talk about the actual code in the example. `cmp` is a function that
316315
compares two things, and returns an `Ordering`. We return either
317-
`Ordering::Less`, `Ordering::Greater`, or `Ordering::Equal`, depending on
318-
whether the first value is less than, greater than, or equal to the second. Note
319-
that each variant of the `enum` is namespaced under the `enum` itself: it's
320-
`Ordering::Greater`, not `Greater`.
316+
`Ordering::Less`, `Ordering::Greater`, or `Ordering::Equal`, depending on if
317+
the two values are less, greater, or equal. Note that each variant of the
318+
`enum` is namespaced under the `enum` itself: it's `Ordering::Greater` not
319+
`Greater`.
321320

322321
The `ordering` variable has the type `Ordering`, and so contains one of the
323322
three values. We then do a bunch of `if`/`else` comparisons to check which
324323
one it is.
325324

326-
This `Ordering::Greater` notation is too long. Let's use another form of `use`
327-
to import the `enum` variants instead. This will avoid full scoping:
325+
This `Ordering::Greater` notation is too long. Let's use `use` to import the
326+
`enum` variants instead. This will avoid full scoping:
328327

329328
```{rust}
330329
use std::cmp::Ordering::{self, Equal, Less, Greater};
@@ -348,18 +347,16 @@ fn main() {
348347
```
349348

350349
Importing variants is convenient and compact, but can also cause name conflicts,
351-
so do this with caution. For this reason, it's normally considered better style
352-
to `use` an enum rather than its variants directly.
350+
so do this with caution. It's considered good style to rarely import variants
351+
for this reason.
353352

354-
As you can see, `enum`s are quite a powerful tool for data representation, and
355-
are even more useful when they're [generic][generics] across types. Before we
356-
get to generics, though, let's talk about how to use enums with pattern
357-
matching, a tool that will let us deconstruct sum types (the type theory term
358-
for enums) like `Ordering` in a very elegant way that avoids all these messy
359-
and brittle `if`/`else`s.
353+
As you can see, `enum`s are quite a powerful tool for data representation, and are
354+
even more useful when they're [generic][generics] across types. Before we
355+
get to generics, though, let's talk about how to use them with pattern matching, a
356+
tool that will let us deconstruct this sum type (the type theory term for enums)
357+
in a very elegant way and avoid all these messy `if`/`else`s.
360358

361359

362-
[arity]: ./glossary.html#arity
363360
[match]: ./match.html
364361
[game]: ./guessing-game.html#comparing-guesses
365362
[generics]: ./generics.html

0 commit comments

Comments
 (0)