Skip to content

Commit 81ec169

Browse files
committed
---
yaml --- r: 163390 b: refs/heads/snap-stage3 c: cb21198 h: refs/heads/master v: v3
1 parent 4a67fde commit 81ec169

File tree

543 files changed

+18055
-13616
lines changed

Some content is hidden

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

543 files changed

+18055
-13616
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 9146a919b616e39e528e4d7100d16eef52f1f852
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: f473aee8930d47f73136e22232f1acef410b59e6
4+
refs/heads/snap-stage3: cb2119823d097439db53933186632cf4ca96711d
55
refs/heads/try: 20cbbffeefc1f35e2ea63afce7b42fbd79611d42
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d

branches/snap-stage3/mk/crates.mk

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ TARGET_CRATES := libc std flate arena term \
5353
serialize getopts collections test time rand \
5454
log regex graphviz core rbml alloc rustrt \
5555
unicode
56-
RUSTC_CRATES := rustc rustc_typeck rustc_driver rustc_trans rustc_back rustc_llvm
56+
RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_driver rustc_trans rustc_back rustc_llvm
5757
HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc regex_macros fmt_macros
5858
CRATES := $(TARGET_CRATES) $(HOST_CRATES)
5959
TOOLS := compiletest rustdoc rustc
@@ -67,11 +67,12 @@ DEPS_std := core libc rand alloc collections rustrt unicode \
6767
native:rust_builtin native:backtrace
6868
DEPS_graphviz := std
6969
DEPS_syntax := std term serialize log fmt_macros arena libc
70-
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back \
70+
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
7171
rustc_typeck log syntax serialize rustc_llvm rustc_trans
7272
DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back \
7373
log syntax serialize rustc_llvm
7474
DEPS_rustc_typeck := rustc syntax
75+
DEPS_rustc_borrowck := rustc log graphviz syntax
7576
DEPS_rustc := syntax flate arena serialize getopts rbml \
7677
time log graphviz rustc_llvm rustc_back
7778
DEPS_rustc_llvm := native:rustllvm libc std
@@ -117,9 +118,10 @@ ONLY_RLIB_unicode := 1
117118
DOC_CRATES := $(filter-out rustc, \
118119
$(filter-out rustc_trans, \
119120
$(filter-out rustc_typeck, \
121+
$(filter-out rustc_borrowck, \
120122
$(filter-out rustc_driver, \
121-
$(filter-out syntax, $(CRATES))))))
122-
COMPILER_DOC_CRATES := rustc rustc_trans rustc_typeck rustc_driver syntax
123+
$(filter-out syntax, $(CRATES)))))))
124+
COMPILER_DOC_CRATES := rustc rustc_trans rustc_borrowck rustc_typeck rustc_driver syntax
123125

124126
# This macro creates some simple definitions for each crate being built, just
125127
# some munging of all of the parameters above.

branches/snap-stage3/mk/rustllvm.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ LLVM_EXTRA_INCDIRS_$(1)= -iquote $(S)src/llvm/include \
2222
-iquote $$(CFG_LLVM_BUILD_DIR_$(1))/include
2323
endif
2424

25-
RUSTLLVM_OBJS_CS_$(1) := $$(addprefix rustllvm/, RustWrapper.cpp PassWrapper.cpp)
25+
RUSTLLVM_OBJS_CS_$(1) := $$(addprefix rustllvm/, \
26+
ExecutionEngineWrapper.cpp RustWrapper.cpp PassWrapper.cpp)
2627

2728
RUSTLLVM_DEF_$(1) := $(1)/rustllvm/rustllvm$(CFG_DEF_SUFFIX_$(1))
2829

branches/snap-stage3/mk/tests.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ $(eval $(call RUST_CRATE,coretest))
2121

2222
TEST_TARGET_CRATES = $(filter-out core unicode,$(TARGET_CRATES)) coretest
2323
TEST_DOC_CRATES = $(DOC_CRATES)
24-
TEST_HOST_CRATES = $(filter-out rustc_typeck rustc_trans,$(HOST_CRATES))
24+
TEST_HOST_CRATES = $(filter-out rustc_typeck rustc_borrowck rustc_trans,$(HOST_CRATES))
2525
TEST_CRATES = $(TEST_TARGET_CRATES) $(TEST_HOST_CRATES)
2626

2727
######################################################################

branches/snap-stage3/src/compiletest/compiletest.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111
#![crate_type = "bin"]
12-
#![feature(phase, slicing_syntax, globs)]
12+
#![feature(phase, slicing_syntax, globs, unboxed_closures)]
1313

1414
#![deny(warnings)]
1515

@@ -23,6 +23,7 @@ use std::os;
2323
use std::io;
2424
use std::io::fs;
2525
use std::str::FromStr;
26+
use std::thunk::{Thunk};
2627
use getopts::{optopt, optflag, reqopt};
2728
use common::Config;
2829
use common::{Pretty, DebugInfoGdb, DebugInfoLldb, Codegen};
@@ -369,16 +370,16 @@ pub fn make_test_closure(config: &Config, testfile: &Path) -> test::TestFn {
369370
let config = (*config).clone();
370371
// FIXME (#9639): This needs to handle non-utf8 paths
371372
let testfile = testfile.as_str().unwrap().to_string();
372-
test::DynTestFn(proc() {
373+
test::DynTestFn(Thunk::new(move || {
373374
runtest::run(config, testfile)
374-
})
375+
}))
375376
}
376377

377378
pub fn make_metrics_test_closure(config: &Config, testfile: &Path) -> test::TestFn {
378379
let config = (*config).clone();
379380
// FIXME (#9639): This needs to handle non-utf8 paths
380381
let testfile = testfile.as_str().unwrap().to_string();
381-
test::DynMetricFn(proc(mm) {
382+
test::DynMetricFn(box move |: mm: &mut test::MetricMap| {
382383
runtest::run_metrics(config, testfile, mm)
383384
})
384385
}

branches/snap-stage3/src/compiletest/runtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ fn run_debuginfo_gdb_test(config: &Config, props: &TestProps, testfile: &Path) {
445445
loop {
446446
//waiting 1 second for gdbserver start
447447
timer::sleep(Duration::milliseconds(1000));
448-
let result = task::try(proc() {
448+
let result = task::try(move || {
449449
tcp::TcpStream::connect("127.0.0.1:5039").unwrap();
450450
});
451451
if result.is_err() {

branches/snap-stage3/src/doc/guide-crates.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ fn main() {
452452
453453
Rust will give us a compile-time error:
454454
455-
```{notrust}
455+
```text
456456
Compiling phrases v0.0.1 (file:///home/you/projects/phrases)
457457
/home/you/projects/phrases/src/main.rs:4:5: 4:40 error: a value named `hello` has already been imported in this module
458458
/home/you/projects/phrases/src/main.rs:4 use phrases::japanese::greetings::hello;

branches/snap-stage3/src/doc/guide-error-handling.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fn main() {
7676

7777
This will give us an error:
7878

79-
```{notrust}
79+
```text
8080
error: non-exhaustive patterns: `_` not covered [E0004]
8181
```
8282

@@ -189,7 +189,7 @@ panic!("boom");
189189

190190
gives
191191

192-
```{notrust}
192+
```text
193193
task '<main>' panicked at 'boom', hello.rs:2
194194
```
195195

branches/snap-stage3/src/doc/guide-ownership.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ fn add_one(mut num: Box<int>) {
130130

131131
This does not compile, and gives us an error:
132132

133-
```{notrust}
133+
```text
134134
error: use of moved value: `x`
135135
println!("{}", x);
136136
^
@@ -406,7 +406,7 @@ fn main() {
406406
We try to make four `Wheel`s, each with a `Car` that it's attached to. But the
407407
compiler knows that on the second iteration of the loop, there's a problem:
408408

409-
```{notrust}
409+
```text
410410
error: use of moved value: `car`
411411
Wheel { size: 360, owner: car };
412412
^~~

branches/snap-stage3/src/doc/guide-pointers.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ println!("{}", x + z);
8484

8585
This gives us an error:
8686

87-
```{notrust}
87+
```text
8888
hello.rs:6:24: 6:25 error: mismatched types: expected `int` but found `&int` (expected int but found &-ptr)
8989
hello.rs:6 println!("{}", x + z);
9090
^
@@ -132,7 +132,7 @@ Pointers are useful in languages that are pass-by-value, rather than
132132
pass-by-reference. Basically, languages can make two choices (this is made
133133
up syntax, it's not Rust):
134134

135-
```{ignore}
135+
```text
136136
func foo(x) {
137137
x = 5
138138
}
@@ -152,7 +152,7 @@ and therefore, can change its value. At the comment, `i` will be `5`.
152152
So what do pointers have to do with this? Well, since pointers point to a
153153
location in memory...
154154

155-
```{ignore}
155+
```text
156156
func foo(&int x) {
157157
*x = 5
158158
}
@@ -191,7 +191,7 @@ knows. This might be harmless, and it might be catastrophic.
191191
When you combine pointers and functions, it's easy to accidentally invalidate
192192
the memory the pointer is pointing to. For example:
193193

194-
```{ignore}
194+
```text
195195
func make_pointer(): &int {
196196
x = 5;
197197
@@ -213,7 +213,7 @@ As one last example of a big problem with pointers, **aliasing** can be an
213213
issue. Two pointers are said to alias when they point at the same location
214214
in memory. Like this:
215215

216-
```{ignore}
216+
```text
217217
func mutate(&int i, int j) {
218218
*i = j;
219219
}
@@ -398,7 +398,7 @@ fn main() {
398398

399399
It gives this error:
400400

401-
```{notrust}
401+
```text
402402
test.rs:5:8: 5:10 error: cannot assign to `*x` because it is borrowed
403403
test.rs:5 *x -= 1;
404404
^~
@@ -522,7 +522,7 @@ boxes, though. As a rough approximation, you can treat this Rust code:
522522

523523
As being similar to this C code:
524524

525-
```{ignore}
525+
```c
526526
{
527527
int *x;
528528
x = (int *)malloc(sizeof(int));
@@ -626,7 +626,7 @@ fn main() {
626626

627627
This prints:
628628

629-
```{ignore}
629+
```text
630630
Cons(1, box Cons(2, box Cons(3, box Nil)))
631631
```
632632

branches/snap-stage3/src/doc/guide-tasks.md

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,37 @@ with a closure argument. `spawn` executes the closure in the new task.
2929
fn print_message() { println!("I am running in a different task!"); }
3030
spawn(print_message);
3131
32-
// Alternatively, use a `proc` expression instead of a named function.
33-
// The `proc` expression evaluates to an (unnamed) proc.
34-
// That proc will call `println!(...)` when the spawned task runs.
35-
spawn(proc() println!("I am also running in a different task!") );
32+
// Alternatively, use a `move ||` expression instead of a named function.
33+
// `||` expressions evaluate to an unnamed closure. The `move` keyword
34+
// indicates that the closure should take ownership of any variables it
35+
// touches.
36+
spawn(move || println!("I am also running in a different task!"));
3637
```
3738

3839
In Rust, a task is not a concept that appears in the language semantics.
3940
Instead, Rust's type system provides all the tools necessary to implement safe
4041
concurrency: particularly, ownership. The language leaves the implementation
4142
details to the standard library.
4243

43-
The `spawn` function has a very simple type signature: `fn spawn(f: proc():
44-
Send)`. Because it accepts only procs, and procs contain only owned data,
45-
`spawn` can safely move the entire proc and all its associated state into an
46-
entirely different task for execution. Like any closure, the function passed to
47-
`spawn` may capture an environment that it carries across tasks.
44+
The `spawn` function has the type signature: `fn
45+
spawn<F:FnOnce()+Send>(f: F)`. This indicates that it takes as
46+
argument a closure (of type `F`) that it will run exactly once. This
47+
closure is limited to capturing `Send`-able data from its environment
48+
(that is, data which is deeply owned). Limiting the closure to `Send`
49+
ensures that `spawn` can safely move the entire closure and all its
50+
associated state into an entirely different task for execution.
4851

4952
```{rust}
5053
# use std::task::spawn;
5154
# fn generate_task_number() -> int { 0 }
5255
// Generate some state locally
5356
let child_task_number = generate_task_number();
5457
55-
spawn(proc() {
56-
// Capture it in the remote task
58+
spawn(move || {
59+
// Capture it in the remote task. The `move` keyword indicates
60+
// that this closure should move `child_task_number` into its
61+
// environment, rather than capturing a reference into the
62+
// enclosing stack frame.
5763
println!("I am child number {}", child_task_number);
5864
});
5965
```
@@ -74,7 +80,7 @@ example of calculating two results concurrently:
7480
7581
let (tx, rx): (Sender<int>, Receiver<int>) = channel();
7682
77-
spawn(proc() {
83+
spawn(move || {
7884
let result = some_expensive_computation();
7985
tx.send(result);
8086
});
@@ -102,7 +108,7 @@ task.
102108
# use std::task::spawn;
103109
# fn some_expensive_computation() -> int { 42 }
104110
# let (tx, rx) = channel();
105-
spawn(proc() {
111+
spawn(move || {
106112
let result = some_expensive_computation();
107113
tx.send(result);
108114
});
@@ -135,13 +141,13 @@ results across a number of tasks? The following program is ill-typed:
135141
# fn some_expensive_computation() -> int { 42 }
136142
let (tx, rx) = channel();
137143
138-
spawn(proc() {
144+
spawn(move || {
139145
tx.send(some_expensive_computation());
140146
});
141147
142148
// ERROR! The previous spawn statement already owns the sender,
143149
// so the compiler will not allow it to be captured again
144-
spawn(proc() {
150+
spawn(move || {
145151
tx.send(some_expensive_computation());
146152
});
147153
```
@@ -154,7 +160,7 @@ let (tx, rx) = channel();
154160
for init_val in range(0u, 3) {
155161
// Create a new channel handle to distribute to the child task
156162
let child_tx = tx.clone();
157-
spawn(proc() {
163+
spawn(move || {
158164
child_tx.send(some_expensive_computation(init_val));
159165
});
160166
}
@@ -179,7 +185,7 @@ reference, written with multiple streams, it might look like the example below.
179185
// Create a vector of ports, one for each child task
180186
let rxs = Vec::from_fn(3, |init_val| {
181187
let (tx, rx) = channel();
182-
spawn(proc() {
188+
spawn(move || {
183189
tx.send(some_expensive_computation(init_val));
184190
});
185191
rx
@@ -207,7 +213,7 @@ fn fib(n: u64) -> u64 {
207213
12586269025
208214
}
209215
210-
let mut delayed_fib = Future::spawn(proc() fib(50));
216+
let mut delayed_fib = Future::spawn(move || fib(50));
211217
make_a_sandwich();
212218
println!("fib(50) = {}", delayed_fib.get())
213219
# }
@@ -236,7 +242,7 @@ fn partial_sum(start: uint) -> f64 {
236242
}
237243
238244
fn main() {
239-
let mut futures = Vec::from_fn(200, |ind| Future::spawn( proc() { partial_sum(ind) }));
245+
let mut futures = Vec::from_fn(200, |ind| Future::spawn(move || partial_sum(ind)));
240246
241247
let mut final_res = 0f64;
242248
for ft in futures.iter_mut() {
@@ -278,7 +284,7 @@ fn main() {
278284
for num in range(1u, 10) {
279285
let task_numbers = numbers_arc.clone();
280286
281-
spawn(proc() {
287+
spawn(move || {
282288
println!("{}-norm = {}", num, pnorm(task_numbers.as_slice(), num));
283289
});
284290
}
@@ -312,7 +318,7 @@ if it were local.
312318
# let numbers_arc = Arc::new(numbers);
313319
# let num = 4;
314320
let task_numbers = numbers_arc.clone();
315-
spawn(proc() {
321+
spawn(move || {
316322
// Capture task_numbers and use it as if it was the underlying vector
317323
println!("{}-norm = {}", num, pnorm(task_numbers.as_slice(), num));
318324
});
@@ -344,7 +350,7 @@ result with an `int` field (representing a successful result) or an `Err` result
344350
# use std::task;
345351
# fn some_condition() -> bool { false }
346352
# fn calculate_result() -> int { 0 }
347-
let result: Result<int, Box<std::any::Any + Send>> = task::try(proc() {
353+
let result: Result<int, Box<std::any::Any + Send>> = task::try(move || {
348354
if some_condition() {
349355
calculate_result()
350356
} else {

0 commit comments

Comments
 (0)