Skip to content

Commit 45818f2

Browse files
committed
---
yaml --- r: 172513 b: refs/heads/auto c: 79602e2 h: refs/heads/master i: 172511: 69984e9 v: v3
1 parent 3e07f5a commit 45818f2

Some content is hidden

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

61 files changed

+693
-270
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1010
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1111
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1212
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
13-
refs/heads/auto: 6c9bdf2a11268325485478fbe3b1565c61098b05
13+
refs/heads/auto: 79602e24c85a16a0eae42e1ec5dd59446b79ddab
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/src/compiletest/header.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ pub struct TestProps {
4242
pub pretty_compare_only: bool,
4343
// Patterns which must not appear in the output of a cfail test.
4444
pub forbid_output: Vec<String>,
45-
// Ignore errors which originate from a command line span
46-
pub ignore_command_line: bool,
4745
}
4846

4947
// Load any test directives embedded in the file
@@ -62,8 +60,6 @@ pub fn load_props(testfile: &Path) -> TestProps {
6260
let mut pretty_mode = None;
6361
let mut pretty_compare_only = false;
6462
let mut forbid_output = Vec::new();
65-
let mut ignore_command_line = false;
66-
6763
iter_header(testfile, |ln| {
6864
match parse_error_pattern(ln) {
6965
Some(ep) => error_patterns.push(ep),
@@ -106,10 +102,6 @@ pub fn load_props(testfile: &Path) -> TestProps {
106102
pretty_compare_only = parse_pretty_compare_only(ln);
107103
}
108104

109-
if !ignore_command_line {
110-
ignore_command_line = parse_ignore_command_line(ln);
111-
}
112-
113105
match parse_aux_build(ln) {
114106
Some(ab) => { aux_builds.push(ab); }
115107
None => {}
@@ -148,7 +140,6 @@ pub fn load_props(testfile: &Path) -> TestProps {
148140
pretty_mode: pretty_mode.unwrap_or("normal".to_string()),
149141
pretty_compare_only: pretty_compare_only,
150142
forbid_output: forbid_output,
151-
ignore_command_line: ignore_command_line,
152143
}
153144
}
154145

@@ -300,10 +291,6 @@ fn parse_pretty_compare_only(line: &str) -> bool {
300291
parse_name_directive(line, "pretty-compare-only")
301292
}
302293

303-
fn parse_ignore_command_line(line: &str) -> bool {
304-
parse_name_directive(line, "ignore-command-line")
305-
}
306-
307294
fn parse_exec_env(line: &str) -> Option<(String, String)> {
308295
parse_name_value_directive(line, "exec-env").map(|nv| {
309296
// nv is either FOO or FOO=BAR

branches/auto/src/compiletest/runtest.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ fn run_cfail_test(config: &Config, props: &TestProps, testfile: &Path) {
104104
if !props.error_patterns.is_empty() {
105105
fatal("both error pattern and expected errors specified");
106106
}
107-
check_expected_errors(props, expected_errors, testfile, &proc_res);
107+
check_expected_errors(expected_errors, testfile, &proc_res);
108108
} else {
109109
check_error_patterns(props, testfile, output_to_check.as_slice(), &proc_res);
110110
}
@@ -941,8 +941,7 @@ fn check_forbid_output(props: &TestProps,
941941
}
942942
}
943943

944-
fn check_expected_errors(props: &TestProps,
945-
expected_errors: Vec<errors::ExpectedError> ,
944+
fn check_expected_errors(expected_errors: Vec<errors::ExpectedError> ,
946945
testfile: &Path,
947946
proc_res: &ProcRes) {
948947

@@ -997,11 +996,6 @@ fn check_expected_errors(props: &TestProps,
997996
was_expected = true;
998997
}
999998

1000-
if line.starts_with("<command line option>") &&
1001-
props.ignore_command_line {
1002-
was_expected = true;
1003-
}
1004-
1005999
if !was_expected && is_compiler_error_or_warning(line) {
10061000
fatal_proc_rec(format!("unexpected compiler error or warning: '{}'",
10071001
line).as_slice(),

branches/auto/src/doc/intro.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ use semver::Version;
106106
107107
fn main() {
108108
assert!(Version::parse("1.2.3") == Ok(Version {
109-
major: 1u,
110-
minor: 2u,
111-
patch: 3u,
109+
major: 1u64,
110+
minor: 2u64,
111+
patch: 3u64,
112112
pre: vec!(),
113113
build: vec!(),
114114
}));

branches/auto/src/doc/reference.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ mod b {
603603
```
604604

605605
* Paths starting with the keyword `super` begin resolution relative to the
606-
parent module. Each further identifier must resolve to an item
606+
parent module. Each further identifier must resolve to an item.
607607

608608
```rust
609609
mod a {
@@ -985,7 +985,7 @@ top of [modules](#modules) and [blocks](#blocks).
985985
986986
Use declarations support a number of convenient shortcuts:
987987

988-
* Rebinding the target name as a new local name, using the syntax `use p::q::r as x;`.
988+
* Rebinding the target name as a new local name, using the syntax `use p::q::r as x;`
989989
* Simultaneously binding a list of paths differing only in their final element,
990990
using the glob-like brace syntax `use a::b::{c,d,e,f};`
991991
* Binding all paths matching a given prefix, using the asterisk wildcard syntax
@@ -1091,7 +1091,7 @@ set of *input* [*slots*](#memory-slots) as parameters, through which the caller
10911091
passes arguments into the function, and an *output* [*slot*](#memory-slots)
10921092
through which the function passes results back to the caller.
10931093

1094-
A function may also be copied into a first class *value*, in which case the
1094+
A function may also be copied into a first-class *value*, in which case the
10951095
value has the corresponding [*function type*](#function-types), and can be used
10961096
otherwise exactly as a function item (with a minor additional cost of calling
10971097
the function indirectly).
@@ -1224,7 +1224,7 @@ the guarantee that these issues are never caused by safe code.
12241224
* A value other than `false` (0) or `true` (1) in a `bool`
12251225
* A discriminant in an `enum` not included in the type definition
12261226
* A value in a `char` which is a surrogate or above `char::MAX`
1227-
* non-UTF-8 byte sequences in a `str`
1227+
* Non-UTF-8 byte sequences in a `str`
12281228
* Unwinding into Rust from foreign code or unwinding from Rust into foreign
12291229
code. Rust's failure system is not compatible with exception handling in
12301230
other languages. Unwinding must be caught and handled at FFI boundaries.
@@ -1827,7 +1827,7 @@ accesses in two cases:
18271827

18281828
These two cases are surprisingly powerful for creating module hierarchies
18291829
exposing public APIs while hiding internal implementation details. To help
1830-
explain, here's a few use cases and what they would entail.
1830+
explain, here's a few use cases and what they would entail:
18311831

18321832
* A library developer needs to expose functionality to crates which link
18331833
against their library. As a consequence of the first case, this means that
@@ -1858,7 +1858,7 @@ import/expression is only valid if the destination is in the current visibility
18581858
scope.
18591859

18601860
Here's an example of a program which exemplifies the three cases outlined
1861-
above.
1861+
above:
18621862

18631863
```
18641864
// This module is private, meaning that no external crate can access this
@@ -2213,7 +2213,7 @@ mod m1 {
22132213
```
22142214

22152215
This example shows how one can use `allow` and `warn` to toggle a particular
2216-
check on and off.
2216+
check on and off:
22172217

22182218
```{.ignore}
22192219
#[warn(missing_docs)]
@@ -2235,7 +2235,7 @@ mod m2{
22352235
```
22362236

22372237
This example shows how one can use `forbid` to disallow uses of `allow` for
2238-
that lint check.
2238+
that lint check:
22392239

22402240
```{.ignore}
22412241
#[forbid(missing_docs)]
@@ -2318,9 +2318,9 @@ These language items are traits:
23182318
* `ord`
23192319
: Elements have a partial ordering.
23202320
* `deref`
2321-
: `*` can be applied, yielding a reference to another type
2321+
: `*` can be applied, yielding a reference to another type.
23222322
* `deref_mut`
2323-
: `*` can be applied, yielding a mutable reference to another type
2323+
: `*` can be applied, yielding a mutable reference to another type.
23242324

23252325
These are functions:
23262326

@@ -2341,7 +2341,7 @@ These are functions:
23412341
* `type_id`
23422342
: The type returned by the `type_id` intrinsic.
23432343
* `unsafe`
2344-
: A type whose contents can be mutated through an immutable reference
2344+
: A type whose contents can be mutated through an immutable reference.
23452345

23462346
#### Marker types
23472347

@@ -2350,11 +2350,11 @@ These types help drive the compiler's analysis
23502350
* `begin_unwind`
23512351
: ___Needs filling in___
23522352
* `no_copy_bound`
2353-
: This type does not implement "copy", even if eligible
2353+
: This type does not implement "copy", even if eligible.
23542354
* `no_send_bound`
2355-
: This type does not implement "send", even if eligible
2355+
: This type does not implement "send", even if eligible.
23562356
* `no_sync_bound`
2357-
: This type does not implement "sync", even if eligible
2357+
: This type does not implement "sync", even if eligible.
23582358
* `eh_personality`
23592359
: ___Needs filling in___
23602360
* `exchange_free`
@@ -2376,11 +2376,11 @@ These types help drive the compiler's analysis
23762376
* `iterator`
23772377
: ___Needs filling in___
23782378
* `contravariant_lifetime`
2379-
: The lifetime parameter should be considered contravariant
2379+
: The lifetime parameter should be considered contravariant.
23802380
* `covariant_lifetime`
2381-
: The lifetime parameter should be considered covariant
2381+
: The lifetime parameter should be considered covariant.
23822382
* `invariant_lifetime`
2383-
: The lifetime parameter should be considered invariant
2383+
: The lifetime parameter should be considered invariant.
23842384
* `malloc`
23852385
: Allocate memory on the managed heap.
23862386
* `owned_box`
@@ -2390,11 +2390,11 @@ These types help drive the compiler's analysis
23902390
* `start`
23912391
: ___Needs filling in___
23922392
* `contravariant_type`
2393-
: The type parameter should be considered contravariant
2393+
: The type parameter should be considered contravariant.
23942394
* `covariant_type`
2395-
: The type parameter should be considered covariant
2395+
: The type parameter should be considered covariant.
23962396
* `invariant_type`
2397-
: The type parameter should be considered invariant
2397+
: The type parameter should be considered invariant.
23982398
* `ty_desc`
23992399
: ___Needs filling in___
24002400

@@ -2921,13 +2921,13 @@ automatically dereferenced to make the field access possible.
29212921
```{.ebnf .gram}
29222922
array_expr : '[' "mut" ? vec_elems? ']' ;
29232923
2924-
array_elems : [expr [',' expr]*] | [expr ',' ".." expr] ;
2924+
array_elems : [expr [',' expr]*] | [expr ';' expr] ;
29252925
```
29262926

29272927
An [array](#array,-and-slice-types) _expression_ is written by enclosing zero
29282928
or more comma-separated expressions of uniform type in square brackets.
29292929

2930-
In the `[expr ',' ".." expr]` form, the expression after the `".."` must be a
2930+
In the `[expr ';' expr]` form, the expression after the `';'` must be a
29312931
constant expression that can be evaluated at compile time, such as a
29322932
[literal](#literals) or a [static item](#static-items).
29332933

@@ -3219,11 +3219,11 @@ the simplest and least-expensive form (analogous to a ```|| { }``` expression),
32193219
the lambda expression captures its environment by reference, effectively
32203220
borrowing pointers to all outer variables mentioned inside the function.
32213221
Alternately, the compiler may infer that a lambda expression should copy or
3222-
move values (depending on their type.) from the environment into the lambda
3222+
move values (depending on their type) from the environment into the lambda
32233223
expression's captured environment.
32243224

32253225
In this example, we define a function `ten_times` that takes a higher-order
3226-
function argument, and call it with a lambda expression as an argument.
3226+
function argument, and call it with a lambda expression as an argument:
32273227

32283228
```
32293229
fn ten_times<F>(f: F) where F: Fn(int) {
@@ -3661,14 +3661,14 @@ within an object along with one byte past the end.
36613661
The types `char` and `str` hold textual data.
36623662

36633663
A value of type `char` is a [Unicode scalar value](
3664-
http://www.unicode.org/glossary/#unicode_scalar_value) (ie. a code point that
3664+
http://www.unicode.org/glossary/#unicode_scalar_value) (i.e. a code point that
36653665
is not a surrogate), represented as a 32-bit unsigned word in the 0x0000 to
36663666
0xD7FF or 0xE000 to 0x10FFFF range. A `[char]` array is effectively an UCS-4 /
36673667
UTF-32 string.
36683668

36693669
A value of type `str` is a Unicode string, represented as an array of 8-bit
36703670
unsigned bytes holding a sequence of UTF-8 codepoints. Since `str` is of
3671-
unknown size, it is not a _first class_ type, but can only be instantiated
3671+
unknown size, it is not a _first-class_ type, but can only be instantiated
36723672
through a pointer type, such as `&str` or `String`.
36733673

36743674
### Tuple types
@@ -3698,7 +3698,7 @@ assert!(b != "world");
36983698

36993699
Rust has two different types for a list of items:
37003700

3701-
* `[T ..N]`, an 'array'
3701+
* `[T; N]`, an 'array'.
37023702
* `&[T]`, a 'slice'.
37033703

37043704
An array has a fixed size, and can be allocated on either the stack or the
@@ -3710,9 +3710,9 @@ to, it borrows it.
37103710
An example of each kind:
37113711

37123712
```{rust}
3713-
let vec: Vec<int> = vec![1, 2, 3];
3714-
let arr: [int; 3] = [1, 2, 3];
3715-
let s: &[int] = vec.as_slice();
3713+
let vec: Vec<i32> = vec![1, 2, 3];
3714+
let arr: [i32; 3] = [1, 2, 3];
3715+
let s: &[i32] = vec.as_slice();
37163716
```
37173717

37183718
As you can see, the `vec!` macro allows you to create a `Vec<T>` easily. The
@@ -3798,7 +3798,7 @@ enum List<T> {
37983798
Cons(T, Box<List<T>>)
37993799
}
38003800
3801-
let a: List<int> = List::Cons(7, Box::new(List::Cons(13, Box::new(List::Nil))));
3801+
let a: List<i32> = List::Cons(7, Box::new(List::Cons(13, Box::new(List::Nil))));
38023802
```
38033803

38043804
### Pointer types

branches/auto/src/doc/trpl/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ navigate through the menu on the left.
1111
## Basics
1212

1313
This section is a linear introduction to the basic syntax and semantics of
14-
Rust. It has individual sections on each part of Rust's syntax, and cumulates
14+
Rust. It has individual sections on each part of Rust's syntax, and culminates
1515
in a small project: a guessing game.
1616

1717
After reading "Basics," you will have a good foundation to learn more about
@@ -27,7 +27,7 @@ and will be able to understand most Rust code and write more complex programs.
2727

2828
## Advanced
2929

30-
In a similar fashion to "Intermediate," this setion is full of individual,
30+
In a similar fashion to "Intermediate," this section is full of individual,
3131
deep-dive chapters, which stand alone and can be read in any order. These
3232
chapters focus on the most complex features, as well as some things that
3333
are only available in upcoming versions of Rust.

branches/auto/src/doc/trpl/advanced.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
% Advanced
22

3-
In a similar fashion to "Intermediate," this setion is full of individual,
3+
In a similar fashion to "Intermediate," this section is full of individual,
44
deep-dive chapters, which stand alone and can be read in any order. These
55
chapters focus on the most complex features, as well as some things that
66
are only available in upcoming versions of Rust.

branches/auto/src/doc/trpl/arrays-vectors-and-slices.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,6 @@ backed by arrays. Slices have type `&[T]`, which we'll talk about when we cover
9494
generics.
9595

9696
We have now learned all of the most basic Rust concepts. We're ready to start
97-
building our guessing game, we just need to know one last thing: how to get
98-
input from the keyboard. You can't have a guessing game without the ability to
99-
guess!
97+
building ourselves a guessing game, we just need to know one last thing: how to
98+
get input from the keyboard. You can't have a guessing game without the ability
99+
to guess!

branches/auto/src/doc/trpl/closures.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,25 +110,27 @@ passing two variables: one is an i32, and one is a function."
110110
Next, let's look at how `twice` is defined:
111111

112112
```{rust,ignore}
113-
fn twice(x: i32, f: |i32| -> i32) -> i32 {
113+
fn twice<F: Fn(i32) -> i32>(x: i32, f: F) -> i32 {
114114
```
115115

116116
`twice` takes two arguments, `x` and `f`. That's why we called it with two
117117
arguments. `x` is an `i32`, we've done that a ton of times. `f` is a function,
118-
though, and that function takes an `i32` and returns an `i32`. Notice
119-
how the `|i32| -> i32` syntax looks a lot like our definition of `square`
120-
above, if we added the return type in:
121-
122-
```{rust}
123-
let square = |&: x: i32| -> i32 { x * x };
124-
// |i32| -> i32
125-
```
126-
127-
This function takes an `i32` and returns an `i32`.
118+
though, and that function takes an `i32` and returns an `i32`. This is
119+
what the requirement `Fn(i32) -> i32` for the type parameter `F` says.
120+
You might ask yourself: why do we need to introduce a type parameter here?
121+
That is because in Rust each closure has its own unique type.
122+
So, not only do closures with different signatures have different types,
123+
but different closures with the *same* signature have *different* types!
124+
You can think of it this way: the behaviour of a closure is part of its type.
125+
And since we want to support many different closures that all take
126+
an `i32` and return an `i32` we introduced a type parameter that is able
127+
to represent all these closures.
128128

129129
This is the most complicated function signature we've seen yet! Give it a read
130130
a few times until you can see how it works. It takes a teeny bit of practice, and
131-
then it's easy.
131+
then it's easy. The good news is that this kind of passing a closure around
132+
can be very efficient. With all the type information available at compile-time
133+
the compiler can do wonders.
132134

133135
Finally, `twice` returns an `i32` as well.
134136

0 commit comments

Comments
 (0)