Skip to content

Commit 5bdbaf3

Browse files
committed
---
yaml --- r: 156607 b: refs/heads/try c: ee985a5 h: refs/heads/master i: 156605: 8bf954a 156603: 099f4ec 156599: ce92bd9 156591: 88e986b 156575: c4673a8 156543: 7247d12 v: v3
1 parent 0942353 commit 5bdbaf3

Some content is hidden

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

81 files changed

+333
-1300
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: a34b8dec697014f15e725215e17ea8d956c0ab1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: d44ea720fa9dfe062ef06d0eb49a58d4e7e92344
5-
refs/heads/try: c46812f6593eb8d9b294d082a487270d7c7be6ef
5+
refs/heads/try: ee985a5a517a3cbdcfbbeff43c6bd57170f47c5d
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 6601b0501e31d08d3892a2d5a7d8a57ab120bf75

branches/try/mk/install.mk

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,16 @@ else
1414
MAYBE_DISABLE_VERIFY=
1515
endif
1616

17-
install:
18-
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
19-
# Build the dist as the original user
20-
$(Q)sudo -u "$$SUDO_USER" $(MAKE) prepare_install
21-
else
22-
$(Q)$(MAKE) prepare_install
23-
endif
17+
install: dist-install-dir-$(CFG_BUILD) | tmp/empty_dir
2418
$(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" "$(MAYBE_DISABLE_VERIFY)"
25-
# Remove tmp files because it's a decent amount of disk space
19+
# Remove tmp files while we can because they may have been created under sudo
2620
$(Q)rm -R tmp/dist
2721

28-
prepare_install: dist-install-dir-$(CFG_BUILD) | tmp/empty_dir
29-
30-
uninstall:
31-
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
32-
# Build the dist as the original user
33-
$(Q)sudo -u "$$SUDO_USER" $(MAKE) prepare_uninstall
34-
else
35-
$(Q)$(MAKE) prepare_uninstall
36-
endif
22+
uninstall: dist-install-dir-$(CFG_BUILD) | tmp/empty_dir
3723
$(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --uninstall --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)"
38-
# Remove tmp files because it's a decent amount of disk space
24+
# Remove tmp files while we can because they may have been created under sudo
3925
$(Q)rm -R tmp/dist
4026

41-
prepare_uninstall: dist-install-dir-$(CFG_BUILD) | tmp/empty_dir
42-
43-
.PHONY: install prepare_install uninstall prepare_uninstall
44-
4527
tmp/empty_dir:
4628
mkdir -p $@
4729

branches/try/src/doc/guide-tasks.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ concurrency: particularly, ownership. The language leaves the implementation
4141
details to the standard library.
4242

4343
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,
44+
Send)`. Because it accepts only procs, and procs contain only owned data,
4545
`spawn` can safely move the entire proc and all its associated state into an
4646
entirely different task for execution. Like any closure, the function passed to
4747
`spawn` may capture an environment that it carries across tasks.
@@ -213,7 +213,7 @@ println!("fib(50) = {}", delayed_fib.get())
213213
# }
214214
```
215215

216-
The call to `future::spawn` immediately returns a `future` object regardless of
216+
The call to `future::spawn` returns immediately a `future` object regardless of
217217
how long it takes to run `fib(50)`. You can then make yourself a sandwich while
218218
the computation of `fib` is running. The result of the execution of the method
219219
is obtained by calling `get` on the future. This call will block until the
@@ -297,7 +297,7 @@ let numbers_arc = Arc::new(numbers);
297297
```
298298

299299
and a clone is captured for each task via a procedure. This only copies
300-
the wrapper and not its contents. Within the task's procedure, the captured
300+
the wrapper and not it's contents. Within the task's procedure, the captured
301301
Arc reference can be used as a shared reference to the underlying vector as
302302
if it were local.
303303

@@ -323,20 +323,20 @@ Rust has a built-in mechanism for raising exceptions. The `fail!()` macro
323323
(which can also be written with an error string as an argument: `fail!(
324324
~reason)`) and the `assert!` construct (which effectively calls `fail!()` if a
325325
boolean expression is false) are both ways to raise exceptions. When a task
326-
raises an exception, the task unwinds its stackrunning destructors and
327-
freeing memory along the wayand then exits. Unlike exceptions in C++,
326+
raises an exception the task unwinds its stack---running destructors and
327+
freeing memory along the way---and then exits. Unlike exceptions in C++,
328328
exceptions in Rust are unrecoverable within a single task: once a task fails,
329329
there is no way to "catch" the exception.
330330

331331
While it isn't possible for a task to recover from failure, tasks may notify
332332
each other of failure. The simplest way of handling task failure is with the
333-
`try` function, which is similar to `spawn`, but immediately blocks and waits
334-
for the child task to finish. `try` returns a value of type
335-
`Result<T, Box<Any + Send>>`. `Result` is an `enum` type with two variants:
336-
`Ok` and `Err`. In this case, because the type arguments to `Result` are `int`
337-
and `()`, callers can pattern-match on a result to check whether it's an `Ok`
338-
result with an `int` field (representing a successful result) or an `Err` result
339-
(representing termination with an error).
333+
`try` function, which is similar to `spawn`, but immediately blocks waiting for
334+
the child task to finish. `try` returns a value of type `Result<T, Box<Any +
335+
Send>>`. `Result` is an `enum` type with two variants: `Ok` and `Err`. In this
336+
case, because the type arguments to `Result` are `int` and `()`, callers can
337+
pattern-match on a result to check whether it's an `Ok` result with an `int`
338+
field (representing a successful result) or an `Err` result (representing
339+
termination with an error).
340340

341341
```{rust}
342342
# use std::task;
@@ -369,4 +369,4 @@ the entire program (perhaps you're writing an assert which, if it trips,
369369
indicates an unrecoverable logic error); in other cases you might want to
370370
contain the failure at a certain boundary (perhaps a small piece of input from
371371
the outside world, which you happen to be processing in parallel, is malformed
372-
such that the processing task cannot proceed).
372+
and its processing task can't proceed).

branches/try/src/doc/guide.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,9 +1255,8 @@ version, if we had forgotten the `Greater` case, for example, our program would
12551255
have happily compiled. If we forget in the `match`, it will not. Rust helps us
12561256
make sure to cover all of our bases.
12571257

1258-
`match` is also an expression, which means we can use it on the right
1259-
hand side of a `let` binding or directly where an expression is
1260-
used. We could also implement the previous line like this:
1258+
`match` is also an expression, which means we can use it on the right hand side
1259+
of a `let` binding. We could also implement the previous line like this:
12611260

12621261
```{rust}
12631262
fn cmp(a: int, b: int) -> Ordering {
@@ -1270,15 +1269,18 @@ fn main() {
12701269
let x = 5i;
12711270
let y = 10i;
12721271
1273-
println!("{}", match cmp(x, y) {
1272+
let result = match cmp(x, y) {
12741273
Less => "less",
12751274
Greater => "greater",
12761275
Equal => "equal",
1277-
});
1276+
};
1277+
1278+
println!("{}", result);
12781279
}
12791280
```
12801281

1281-
Sometimes, it's a nice pattern.
1282+
In this case, it doesn't make a lot of sense, as we are just making a temporary
1283+
string where we don't need to, but sometimes, it's a nice pattern.
12821284

12831285
# Looping
12841286

branches/try/src/libcollections/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
//! Collection types.
1212
//!
13-
//! See [std::collections](../std/collections) for a detailed discussion of collections in Rust.
13+
//! See [../std/collections](std::collections) for a detailed discussion of collections in Rust.
1414
1515

1616
#![crate_name = "collections"]

branches/try/src/libcore/ops.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ shr_impl!(uint u8 u16 u32 u64 int i8 i16 i32 i64)
626626
* struct Foo;
627627
*
628628
* impl Index<Foo, Foo> for Foo {
629-
* fn index<'a>(&'a self, _index: &Foo) -> &'a Foo {
629+
* fn index<'a>(&'a self, _rhs: &Foo) -> &'a Foo {
630630
* println!("Indexing!");
631631
* self
632632
* }
@@ -657,7 +657,7 @@ pub trait Index<Index, Result> {
657657
* struct Foo;
658658
*
659659
* impl IndexMut<Foo, Foo> for Foo {
660-
* fn index_mut<'a>(&'a mut self, _index: &Foo) -> &'a mut Foo {
660+
* fn index_mut<'a>(&'a mut self, _rhs: &Foo) -> &'a mut Foo {
661661
* println!("Indexing!");
662662
* self
663663
* }
@@ -687,20 +687,20 @@ pub trait IndexMut<Index, Result> {
687687
* ```ignore
688688
* struct Foo;
689689
*
690-
* impl Slice<Foo, Foo> for Foo {
690+
* impl ::core::ops::Slice<Foo, Foo> for Foo {
691691
* fn as_slice_<'a>(&'a self) -> &'a Foo {
692692
* println!("Slicing!");
693693
* self
694694
* }
695-
* fn slice_from_or_fail<'a>(&'a self, _from: &Foo) -> &'a Foo {
695+
* fn slice_from_or_fail<'a>(&'a self, from: &Foo) -> &'a Foo {
696696
* println!("Slicing!");
697697
* self
698698
* }
699-
* fn slice_to_or_fail<'a>(&'a self, _to: &Foo) -> &'a Foo {
699+
* fn slice_to_or_fail<'a>(&'a self, to: &Foo) -> &'a Foo {
700700
* println!("Slicing!");
701701
* self
702702
* }
703-
* fn slice_or_fail<'a>(&'a self, _from: &Foo, _to: &Foo) -> &'a Foo {
703+
* fn slice_or_fail<'a>(&'a self, from: &Foo, to: &Foo) -> &'a Foo {
704704
* println!("Slicing!");
705705
* self
706706
* }
@@ -736,20 +736,20 @@ pub trait Slice<Idx, Sized? Result> for Sized? {
736736
* ```ignore
737737
* struct Foo;
738738
*
739-
* impl SliceMut<Foo, Foo> for Foo {
739+
* impl ::core::ops::SliceMut<Foo, Foo> for Foo {
740740
* fn as_mut_slice_<'a>(&'a mut self) -> &'a mut Foo {
741741
* println!("Slicing!");
742742
* self
743743
* }
744-
* fn slice_from_or_fail_mut<'a>(&'a mut self, _from: &Foo) -> &'a mut Foo {
744+
* fn slice_from_or_fail_mut<'a>(&'a mut self, from: &Foo) -> &'a mut Foo {
745745
* println!("Slicing!");
746746
* self
747747
* }
748-
* fn slice_to_or_fail_mut<'a>(&'a mut self, _to: &Foo) -> &'a mut Foo {
748+
* fn slice_to_or_fail_mut<'a>(&'a mut self, to: &Foo) -> &'a mut Foo {
749749
* println!("Slicing!");
750750
* self
751751
* }
752-
* fn slice_or_fail_mut<'a>(&'a mut self, _from: &Foo, _to: &Foo) -> &'a mut Foo {
752+
* fn slice_or_fail_mut<'a>(&'a mut self, from: &Foo, to: &Foo) -> &'a mut Foo {
753753
* println!("Slicing!");
754754
* self
755755
* }
@@ -901,3 +901,4 @@ def_fn_mut!(A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12)
901901
def_fn_mut!(A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13)
902902
def_fn_mut!(A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14)
903903
def_fn_mut!(A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15)
904+

branches/try/src/librustc/driver/session.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,18 +96,12 @@ impl Session {
9696
pub fn span_end_note(&self, sp: Span, msg: &str) {
9797
self.diagnostic().span_end_note(sp, msg)
9898
}
99-
pub fn span_help(&self, sp: Span, msg: &str) {
100-
self.diagnostic().span_help(sp, msg)
101-
}
10299
pub fn fileline_note(&self, sp: Span, msg: &str) {
103100
self.diagnostic().fileline_note(sp, msg)
104101
}
105102
pub fn note(&self, msg: &str) {
106103
self.diagnostic().handler().note(msg)
107104
}
108-
pub fn help(&self, msg: &str) {
109-
self.diagnostic().handler().note(msg)
110-
}
111105
pub fn span_bug(&self, sp: Span, msg: &str) -> ! {
112106
self.diagnostic().span_bug(sp, msg)
113107
}

branches/try/src/librustc/middle/borrowck/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,10 +618,6 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
618618
self.tcx.sess.span_end_note(s, m);
619619
}
620620

621-
pub fn span_help(&self, s: Span, m: &str) {
622-
self.tcx.sess.span_help(s, m);
623-
}
624-
625621
pub fn bckerr_to_string(&self, err: &BckError) -> String {
626622
match err.code {
627623
err_mutbl => {

branches/try/src/librustc/middle/traits/select.rs

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -608,17 +608,6 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
608608
* unified during the confirmation step.
609609
*/
610610

611-
let tcx = self.tcx();
612-
let kind = if Some(obligation.trait_ref.def_id) == tcx.lang_items.fn_trait() {
613-
ty::FnUnboxedClosureKind
614-
} else if Some(obligation.trait_ref.def_id) == tcx.lang_items.fn_mut_trait() {
615-
ty::FnMutUnboxedClosureKind
616-
} else if Some(obligation.trait_ref.def_id) == tcx.lang_items.fn_once_trait() {
617-
ty::FnOnceUnboxedClosureKind
618-
} else {
619-
return Ok(()); // not a fn trait, ignore
620-
};
621-
622611
let self_ty = self.infcx.shallow_resolve(obligation.self_ty());
623612
let closure_def_id = match ty::get(self_ty).sty {
624613
ty::ty_unboxed_closure(id, _) => id,
@@ -633,17 +622,37 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
633622
self_ty.repr(self.tcx()),
634623
obligation.repr(self.tcx()));
635624

636-
let closure_kind = match self.typer.unboxed_closures().borrow().find(&closure_def_id) {
637-
Some(closure) => closure.kind,
638-
None => {
639-
self.tcx().sess.span_bug(
640-
obligation.cause.span,
641-
format!("No entry for unboxed closure: {}",
642-
closure_def_id.repr(self.tcx())).as_slice());
625+
let tcx = self.tcx();
626+
let fn_traits = [
627+
(ty::FnUnboxedClosureKind, tcx.lang_items.fn_trait()),
628+
(ty::FnMutUnboxedClosureKind, tcx.lang_items.fn_mut_trait()),
629+
(ty::FnOnceUnboxedClosureKind, tcx.lang_items.fn_once_trait()),
630+
];
631+
for tuple in fn_traits.iter() {
632+
let kind = match tuple {
633+
&(kind, Some(ref fn_trait))
634+
if *fn_trait == obligation.trait_ref.def_id =>
635+
{
636+
kind
637+
}
638+
_ => continue,
639+
};
640+
641+
// Check to see whether the argument and return types match.
642+
let closure_kind = match self.typer.unboxed_closures().borrow().find(&closure_def_id) {
643+
Some(closure) => closure.kind,
644+
None => {
645+
self.tcx().sess.span_bug(
646+
obligation.cause.span,
647+
format!("No entry for unboxed closure: {}",
648+
closure_def_id.repr(self.tcx())).as_slice());
649+
}
650+
};
651+
652+
if closure_kind != kind {
653+
continue;
643654
}
644-
};
645655

646-
if closure_kind == kind {
647656
candidates.vec.push(UnboxedClosureCandidate(closure_def_id));
648657
}
649658

branches/try/src/librustc/middle/trans/_match.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
10901090
let sw = if kind == Switch {
10911091
build::Switch(bcx, test_val, else_cx.llbb, opts.len())
10921092
} else {
1093-
C_int(ccx, 0i) // Placeholder for when not using a switch
1093+
C_int(ccx, 0) // Placeholder for when not using a switch
10941094
};
10951095

10961096
let defaults = enter_default(else_cx, dm, m, col, val);

0 commit comments

Comments
 (0)