toddaaro
af2e03998d
Enabled workstealing in the scheduler. Previously we had one global work queue shared by each scheduler. Now there is a separate work queue for each scheduler, and work is "stolen" from other queues when it is exhausted locally.
2013-08-08 14:13:41 -07:00
blake2-ppc
06783ce831
std::vec: Fix typo in fn ne
2013-08-08 23:07:24 +02:00
blake2-ppc
8ed8a41c62
std::iterator::order test cases
2013-08-08 22:07:22 +02:00
blake2-ppc
5dde29c947
std: Fix tuple lexicographical order
...
Use the definition, where R is <, <=, >=, or >
[x, ..xs] R [y, ..ys] = if x != y { x R y } else { xs R ys }
Previously, tuples would only implement < and derive the other
comparisons from it; this is incorrect. Included are several testcases
involving NaN comparisons that are now correct.
Previously, tuples would consider an element equal if both a < b and
b < a were false, this was also incorrect.
2013-08-08 22:07:22 +02:00
blake2-ppc
86da55e85b
std: Fix Ord for Option, using iterator::order
2013-08-08 22:07:22 +02:00
blake2-ppc
9cac4ccc90
std::vec: Use iterator::order functions for Eq, Ord, TotalOrd, TotalEq
2013-08-08 22:07:21 +02:00
blake2-ppc
e0b08533b4
std: Implement traits for the one-tuple
...
(A,) did not have the trait implementations of 2- to 12- tuples.
2013-08-08 22:07:21 +02:00
blake2-ppc
5d9fd882b7
Add std::iterator::order with lexical ordering functions for sequences
...
Use Eq + Ord for lexicographical ordering of sequences.
For each of <, <=, >= or > as R, use::
[x, ..xs] R [y, ..ys] = if x != y { x R y } else { xs R ys }
Previous code using `a < b` and then `!(b < a)` for short-circuiting
fails on cases such as [1.0, 2.0] < [0.0/0.0, 3.0], where the first
element was effectively considered equal.
2013-08-08 22:07:21 +02:00
Erick Tryzelaar
03cc757fe9
std: more fixes for os.rs for windows
2013-08-08 06:37:55 -07:00
bors
a0080f4e07
auto merge of #8245 : alexcrichton/rust/fmt2, r=graydon
...
This is a reopening of #8182 , although this removes any abuse of the compiler internals. Now it's just a pure syntax extension (hard coded what the attribute names are).
2013-08-08 00:22:52 -07:00
Erick Tryzelaar
7a5ee374e2
std: import HANDLE for os::list_dir for windows
2013-08-07 21:07:06 -07:00
Ben Blum
fb1575bcc4
(cleanup) Improve rtabort message for atomic-sleep.
2013-08-07 22:41:15 -04:00
Ben Blum
8ebdb37fd2
fix recv_ready for Port to take &self and not need to return a tuple. Close #8192 .
2013-08-07 22:41:15 -04:00
Huon Wilson
8460dac909
std: add missing #[inline] annotation to the f64 arithmetic trait impls.
2013-08-07 22:41:14 -04:00
Jordi Boggiano
403c52d2ae
Add weak_rng to get a random algo that puts more emphasis on speed than security
2013-08-07 22:41:14 -04:00
Jordi Boggiano
3db9dc1dfd
Document rand module with more emphasis on cryptographic security
2013-08-07 22:41:13 -04:00
Alex Crichton
e99eff172a
Forbid priv
where it has no effect
...
This is everywhere except struct fields and enum variants.
2013-08-07 22:41:12 -04:00
Kevin Ballard
8964fcc5ac
Implement DoubleEndedIterator on Range
...
Range is now invertable as long as its element type conforms to Integer.
Remove int::range_rev() et al in favor of range().invert().
2013-08-07 22:41:09 -04:00
blake2-ppc
40bdbf0f5d
std: Fix for-range loops that can use iterators
...
Fix inappropriate for-range loops to use for-iterator constructs (or
other appropriate solution) instead.
2013-08-07 22:39:57 -04:00
Alex Crichton
ffb670ffcd
Add initial support for a new formatting syntax
...
The new macro is available under the name ifmt! (only an intermediate name)
2013-08-07 19:21:43 -07:00
Brian Anderson
85aaa44bec
Turn on the new runtime
2013-08-07 16:32:20 -07:00
Brian Anderson
ce95b01014
Disable linked failure tests
...
The implementation currently contains a race that leads to segfaults.
2013-08-07 16:32:20 -07:00
Brian Anderson
ae1ed4fd78
std: Allow spawners to specify stack size
2013-08-07 15:40:27 -07:00
Brian Anderson
f82da818a7
std::rt: Pull RUST_MIN_STACK from the environment
2013-08-07 15:40:27 -07:00
Brian Anderson
eb6143257d
std::rt: 2MB stacks again
2013-08-07 15:40:26 -07:00
Erick Tryzelaar
a54476b0aa
Merge remote-tracking branch 'remotes/origin/master' into remove-str-trailing-nulls
2013-08-07 14:10:39 -07:00
Erick Tryzelaar
aababbba8e
std: fix a bad type cast for in str.to_c_str()
2013-08-07 14:06:50 -07:00
Erick Tryzelaar
72688eaa13
std: Make CString::new unsafe b/c it can mutate a *T ptr
2013-08-07 14:06:50 -07:00
Erick Tryzelaar
d6257b315b
std: remove unnecessary test from c_str.drop and use safer transmute
2013-08-07 14:06:50 -07:00
Erick Tryzelaar
e053bff5d0
std: Fix c_str.iter() and add test
2013-08-07 14:06:45 -07:00
bors
98ec79c957
auto merge of #8294 : erickt/rust/map-move, r=bblum
...
According to #7887 , we've decided to use the syntax of `fn map<U>(f: &fn(&T) -> U) -> U`, which passes a reference to the closure, and to `fn map_move<U>(f: &fn(T) -> U) -> U` which moves the value into the closure. This PR adds these `.map_move()` functions to `Option` and `Result`.
In addition, it has these other minor features:
* Replaces a couple uses of `option.get()`, `result.get()`, and `result.get_err()` with `option.unwrap()`, `result.unwrap()`, and `result.unwrap_err()`. (See #8268 and #8288 for a more thorough adaptation of this functionality.
* Removes `option.take_map()` and `option.take_map_default()`. These two functions can be easily written as `.take().map_move(...)`.
* Adds a better error message to `result.unwrap()` and `result.unwrap_err()`.
2013-08-07 13:23:07 -07:00
bors
cdba212e72
auto merge of #8326 : thestinger/rust/iterator, r=alexcrichton
...
The `extra::iter` module wasn't actually included in `extra.rs` when it was moved from `std`... I assume no one is going to miss it.
2013-08-07 10:32:20 -07:00
Erick Tryzelaar
19e17f54a0
std: removed option.take_map{,_default}
2013-08-07 08:52:09 -07:00
Erick Tryzelaar
1e490813b0
core: option.map_consume -> option.map_move
2013-08-07 08:52:09 -07:00
Erick Tryzelaar
9218aaa00e
std: add result.map_move, result.map_err_move
2013-08-07 08:23:55 -07:00
bors
597b3fd03f
auto merge of #8305 : huonw/rust/triage-fixes, r=cmr
...
The two deletions are because the test cases are very old (still using `class` and modes!), and, as far as I can tell (since they are so old), the areas they test are well tested by other rpass tests.
2013-08-07 06:56:19 -07:00
Huon Wilson
c57fde2b5f
std: adjust str::test_add so that the macro expands to all 3 items ( #8012 ).
...
Closes #3682 .
2013-08-07 23:17:52 +10:00
bors
54c8c23d05
auto merge of #8323 : kballard/rust/saturating, r=thestinger
...
Implement saturating math in `std::num::Saturating` and use it for `Iterator` impls
2013-08-07 04:02:16 -07:00
Young-il Choi
b32617666a
std: run test fix for ARM android
2013-08-07 19:01:43 +09:00
bors
4da1cfe923
auto merge of #8285 : huonw/rust/deriving+++, r=alexcrichton
...
Some general clean-up relating to deriving:
- `TotalOrd` was too eager, and evaluated the `.cmp` call for every field, even if it could short-circuit earlier.
- the pointer types didn't have impls for `TotalOrd` or `TotalEq`.
- the Makefiles didn't reach deep enough into libsyntax for dependencies.
(Split out from https://github.com/mozilla/rust/pull/8258 .)
2013-08-07 00:56:18 -07:00
Daniel Micay
55f3d04101
vec: use offset_inbounds
for iterators
...
This allows LLVM to optimize vector iterators to an `getelementptr` and
`icmp` pair, instead of `getelementptr` and *two* comparisons.
Code snippet:
~~~
fn foo(xs: &mut [f64]) {
for x in xs.mut_iter() {
*x += 10.0;
}
}
~~~
LLVM IR at stage0:
~~~
; Function Attrs: noinline uwtable
define void @"_ZN3foo17_68e1b25bca131dba7_0$x2e0E"({ i64, %tydesc*, i8*, i8*, i8 }* nocapture, { double*, i64 }* nocapture) #1 {
"function top level":
%2 = getelementptr inbounds { double*, i64 }* %1, i64 0, i32 0
%3 = load double** %2, align 8
%4 = getelementptr inbounds { double*, i64 }* %1, i64 0, i32 1
%5 = load i64* %4, align 8
%6 = ptrtoint double* %3 to i64
%7 = and i64 %5, -8
%8 = add i64 %7, %6
%9 = inttoptr i64 %8 to double*
%10 = icmp eq double* %3, %9
%11 = icmp eq double* %3, null
%or.cond6 = or i1 %10, %11
br i1 %or.cond6, label %match_case, label %match_else
match_else: ; preds = %"function top level", %match_else
%12 = phi double* [ %13, %match_else ], [ %3, %"function top level" ]
%13 = getelementptr double* %12, i64 1
%14 = load double* %12, align 8
%15 = fadd double %14, 1.000000e+01
store double %15, double* %12, align 8
%16 = icmp eq double* %13, %9
%17 = icmp eq double* %13, null
%or.cond = or i1 %16, %17
br i1 %or.cond, label %match_case, label %match_else
match_case: ; preds = %match_else, %"function top level"
ret void
}
~~~
Optimized LLVM IR at stage1/stage2:
~~~
; Function Attrs: noinline uwtable
define void @"_ZN3foo17_68e1b25bca131dba7_0$x2e0E"({ i64, %tydesc*, i8*, i8*, i8 }* nocapture, { double*, i64 }* nocapture) #1 {
"function top level":
%2 = getelementptr inbounds { double*, i64 }* %1, i64 0, i32 0
%3 = load double** %2, align 8
%4 = getelementptr inbounds { double*, i64 }* %1, i64 0, i32 1
%5 = load i64* %4, align 8
%6 = lshr i64 %5, 3
%7 = getelementptr inbounds double* %3, i64 %6
%8 = icmp eq i64 %6, 0
%9 = icmp eq double* %3, null
%or.cond6 = or i1 %8, %9
br i1 %or.cond6, label %match_case, label %match_else
match_else: ; preds = %"function top level", %match_else
%.sroa.0.0.in7 = phi double* [ %10, %match_else ], [ %3, %"function top level" ]
%10 = getelementptr inbounds double* %.sroa.0.0.in7, i64 1
%11 = load double* %.sroa.0.0.in7, align 8
%12 = fadd double %11, 1.000000e+01
store double %12, double* %.sroa.0.0.in7, align 8
%13 = icmp eq double* %10, %7
br i1 %13, label %match_case, label %match_else
match_case: ; preds = %match_else, %"function top level"
ret void
}
~~~
2013-08-06 23:54:24 -04:00
Daniel Micay
7d115c9420
add an intrinsic for inbounds GEP
2013-08-06 23:41:20 -04:00
Daniel Micay
f23fb19ee5
vec: avoid ptrtoint
/inttoptr
in the iterators
...
This results in throwing away alias analysis information, because LLVM
does *not* implement reasoning about these conversions yet.
We specialize zero-size types since a `getelementptr` offset will
return us the same pointer, making it broken as a simple counter.
2013-08-06 23:41:20 -04:00
Erick Tryzelaar
5eaa4d1d2f
Merge remote-tracking branch 'remotes/origin/master' into remove-str-trailing-nulls
2013-08-06 16:21:02 -07:00
Erick Tryzelaar
5e7b666250
std: update str.push_byte to work without str trailing nulls
2013-08-06 16:19:31 -07:00
Erick Tryzelaar
8567611adf
Merge commit 'd89ff7eef969aee6b493bc846b64d68358fafbcd' into remove-str-trailing-nulls
2013-08-06 16:18:58 -07:00
bors
5b4244d917
auto merge of #8231 : SimonSapin/rust/ascii-upper-lower-case, r=cmr
...
Original pull request: Add str.to_ascii_lower() and str.to_ascii_upper() methods in std::str.
2013-08-06 15:32:05 -07:00
Daniel Micay
40d11a5461
iterator: rename Counter::new
to count
...
to match the convention used by `range`, since `iterator::count` is
already namespaced enough and won't be ambiguous
2013-08-06 18:09:20 -04:00
Daniel Micay
c13f4f398a
add Extendable to the prelude
2013-08-06 18:09:20 -04:00
Daniel Micay
b3a317c368
iterator: simplify the take
implementation
2013-08-06 18:09:20 -04:00