Commit graph

5178 commits

Author SHA1 Message Date
bors
bfb26033af Auto merge of #28662 - semmaz:fmt-debug, r=alexcrichton
fixes #26920
2015-10-02 22:49:37 +00:00
Simon Mazur
0294098d8f Implement size_hint for EscapeUnicode 2015-10-01 20:33:43 +03:00
Björn Steinbrink
8a959ad447 Remove one level of indirection for slice-based PartialEq impls
Using the comparison operators already refs the operands, so doing it
ourselves as well just adds an unnecessary level of indirection.
2015-10-01 18:17:49 +02:00
bors
8719f504ee Auto merge of #28780 - steveklabnik:doc_from_str, r=alexcrichton
@marchelzo pointed out on IRC that this doesn't have docs, so, let's
change that.
2015-10-01 11:18:48 +00:00
Steve Klabnik
8382bc915c Rollup merge of #28760 - steveklabnik:gh28166, r=alexcrichton
Fixes #28166
2015-09-30 18:20:03 -04:00
Steve Klabnik
80130005da Add some docs for FromString::from_str
@marchelzo pointed out on IRC that this doesn't have docs, so, let's
change that.
2015-09-30 17:42:41 -04:00
Steve Klabnik
27254bc4aa Rollup merge of #28754 - luser:fix-rustdoc-module-links, r=Manishearth
The links in the rustdoc for several places in fmt were trying to link to
the std::fmt module but actually linking to std, which was confusing.
While trying to figure out why I noticed that the documentation chapter of
the Rust book has examples that show this same bug (although it doesn't seem
widespread in practice).

r? @steveklabnik
2015-09-30 14:51:54 -04:00
Ted Mielczarek
49fa11c5a5 Fix module links from core::fmt::* to go to std::fmt 2015-09-30 13:24:39 -04:00
Steve Klabnik
3e9b993925 Clarify logic instead of using 'vice versa'
Fixes #28166
2015-09-30 13:24:28 -04:00
Ted Mielczarek
73bd0ba91e Fix module links in std::fmt and the Rust book's documentation chapter.
The links in the rustdoc for several places in fmt were trying to link to
the std::fmt module but actually linking to std, which was confusing.
While trying to figure out why I noticed that the documentation chapter of
the Rust book has examples that show this same bug (although it doesn't seem
widespread in practice).
2015-09-30 12:33:38 -04:00
bors
437d70a54b Auto merge of #28738 - apasel422:peekable, r=alexcrichton 2015-09-30 15:22:17 +00:00
Simon Mazur
d2d08721be Implement size_hint for EscapeDefault 2015-09-30 18:05:09 +03:00
bors
3e6d7243ae Auto merge of #28731 - bluss:by-ref, r=alexcrichton
Remove redundant uses of Iterator::by_ref()
2015-09-30 11:03:13 +00:00
Andrew Paseltiner
532ee3c6d6 Derive Clone for Peekable 2015-09-29 18:35:33 -04:00
Ulrik Sverdrup
e2aa82c413 Remove redundant uses of Iterator::by_ref() 2015-09-29 19:20:18 +02:00
Simon Mazur
24b5d3afd7 Improve speed of fmt::Debug for str and char
fixes #26920
2015-09-29 15:24:04 +03:00
Steve Klabnik
66339884df Rollup merge of #28678 - fhartwig:deref-elide, r=steveklabnik
The lifetime can be elided here, and I think eliding it makes the example slightly simpler.
2015-09-26 18:00:38 -06:00
bors
54f7b1d455 Auto merge of #28632 - alexcrichton:update-match-indices, r=Kimundi
This commit updates the `MatchIndices` and `RMatchIndices` iterators to follow
the same pattern as the `chars` and `char_indices` iterators. The `matches`
iterator currently yield `&str` elements, so the `MatchIndices` iterator now
yields the index of the match as well as the `&str` that matched (instead of
start/end indexes).

cc #27743
2015-09-26 20:06:51 +00:00
Florian Hartwig
c3a74fa4c6 Elide lifetime in Deref doc example 2015-09-26 20:40:22 +02:00
bors
7ebfd853c2 Auto merge of #28615 - sfackler:formatter-methods, r=alexcrichton
cc #27726 

r? @alexcrichton
2015-09-26 02:02:03 +00:00
Steve Klabnik
eae4821d1d Rollup merge of #28652 - SimonSapin:patch-11, r=sanxiyn
Caught by Brian Smith: https://github.com/rust-lang/rust/issues/27774#issuecomment-143154735
2015-09-25 13:33:32 -06:00
Steve Klabnik
d2e2ec1661 Rollup merge of #28637 - SimonSapin:patch-6, r=alexcrichton 2015-09-25 13:33:32 -06:00
Manish Goregaokar
012f36947a Add note about Copy for drop() 2015-09-26 01:00:05 +05:30
Alex Crichton
d5f2d3b177 std: Update MatchIndices to return a subslice
This commit updates the `MatchIndices` and `RMatchIndices` iterators to follow
the same pattern as the `chars` and `char_indices` iterators. The `matches`
iterator currently yield `&str` elements, so the `MatchIndices` iterator now
yields the index of the match as well as the `&str` that matched (instead of
start/end indexes).

cc #27743
2015-09-25 09:29:23 -07:00
Simon Sapin
761d16327a Docs: &A and &mut A are references, not pointers
Caught by Brian Smith: https://github.com/rust-lang/rust/issues/27774#issuecomment-143154735
2015-09-25 13:01:31 +02:00
bors
6a2187414a Auto merge of #28538 - alevy:make_fixedsizearray_unsafe, r=alexcrichton
[breaking-change]

`FixedSizeArray` is meant to be implemented for arrays of fixed size only, but can be implemented for anything at the moment. Marking the trait unsafe would make it more reasonable to write unsafe code which operates on fixed size arrays of any size.

For example, using `uninitialized` to create a fixed size array and immediately filling it with a fixed value is externally safe:

```
pub fn init_with_nones<T, A: FixedSizeArray<Option<T>>>() -> A {
    let mut res = unsafe { mem::uninitialized() };
    for elm in res.as_mut_slice().iter_mut() {
        *elm = None;
    }
    res
}
```

But the same code is not safe if `FixedSizeArray` is implemented for other types:

```
struct Foo { foo: usize }
impl FixedSizeArray<Option<usize>> for Foo {
    fn as_slice(&self) -> &[usize] { &[] }
    fn as_mut_slice(&self) -> &mut [usize] { &mut [] }
}
```

now `init_with_nones() : Foo` returns a `Foo` with an undefined value for the field `foo`.
2015-09-24 18:55:00 +00:00
Simon Sapin
081278eb7a Utf8Error::valid_up_to: make documented semantics more precise/useful 2015-09-24 18:54:12 +02:00
Steven Fackler
e5ee13f139 Add accessors for Formatter flags
cc #27726
2015-09-23 23:35:12 -07:00
Amit Aryeh Levy
b30d8969e8 Explain in comment why FixedSizeArray is unsafe 2015-09-23 11:38:01 -04:00
Manish Goregaokar
5f66c701b1 Make function pointers implement traits for up to 12 parameters
(12 was chosen to be consistent with what we do for tuples)

Fixes #28559
2015-09-21 14:21:30 +05:30
bors
b7f49ca0fa Auto merge of #28539 - rkruppe:shuffle-num-internals, r=alexcrichton
Move private bignum module to core::num, because it is not only used in flt2dec.
Extract private 80-bit soft-float into new core::num module for the same reason.
2015-09-20 23:14:58 +00:00
Robin Kruppe
cd67ec306f Reorganize core::num internals
Move private bignum module to core::num, because it is not only used in flt2dec.
Extract private 80-bit soft-float into new core::num module for the same reason.
2015-09-20 18:39:08 +02:00
Amit Aryeh Levy
85f48d300a Make FixedSizeArray an unsafe trait 2015-09-19 15:33:34 -04:00
Jorge Aparicio
3ae3a5fc3c Overloaded augmented assignments 2015-09-18 21:20:15 -05:00
Steve Klabnik
5faff5dbde Rollup merge of #28474 - tshepang:repetition, r=steveklabnik
It's clear it's the one being documented
2015-09-17 17:06:56 -04:00
Steve Klabnik
eeca6a430b Rollup merge of #28314 - tbu-:pr_atomics_are_send, r=brson 2015-09-17 17:06:54 -04:00
Tshepang Lekhonkhobe
25cc001c19 doc: no need to mention the method by name
It's clear it's the one being documented
2015-09-17 21:46:47 +02:00
bors
47d125d0f8 Auto merge of #28436 - ranma42:faster-partialord, r=bluss
This branch improves the performance of Ord and PartialOrd methods for slices compared to the iter-based implementation.
Based on the approach used in #26884.
2015-09-16 21:45:46 +00:00
Andrea Canciani
74dc146f42 Explain explicit slicing in slice cmp and partial_cmp methods
The explicit slicing is needed in order to enable additional range
check optimizations in the compiler.
2015-09-16 16:09:23 +02:00
Andrea Canciani
08b9edfe94 Remove inline attribute
Be more conservative with inlining.
2015-09-16 16:09:01 +02:00
Andrea Canciani
369a9dc302 Remove boundary checks in slice comparison operators
In order to get rid of all range checks, the compiler needs to
explicitly see that the slices it iterates over are as long as the
loop variable upper bound.

This further improves the performance of slice comparison:

```
test u8_cmp          ... bench:       4,761 ns/iter (+/- 1,203)
test u8_lt           ... bench:       4,579 ns/iter (+/- 649)
test u8_partial_cmp  ... bench:       4,768 ns/iter (+/- 761)
test u16_cmp         ... bench:       4,607 ns/iter (+/- 580)
test u16_lt          ... bench:       4,681 ns/iter (+/- 567)
test u16_partial_cmp ... bench:       4,607 ns/iter (+/- 967)
test u32_cmp         ... bench:       4,448 ns/iter (+/- 891)
test u32_lt          ... bench:       4,546 ns/iter (+/- 992)
test u32_partial_cmp ... bench:       4,415 ns/iter (+/- 646)
test u64_cmp         ... bench:       4,380 ns/iter (+/- 1,184)
test u64_lt          ... bench:       5,684 ns/iter (+/- 602)
test u64_partial_cmp ... bench:       4,663 ns/iter (+/- 1,158)
```
2015-09-16 15:27:14 +02:00
Andrea Canciani
bf9254a75e Reuse cmp in totally ordered types
Instead of manually defining it, `partial_cmp` can simply wrap the
result of `cmp` for totally ordered types.
2015-09-16 15:25:51 +02:00
Andrea Canciani
d04b8b5818 Improve PartialOrd for slices
Reusing the same idea as in #26884, we can exploit the fact that the
length of slices is known, hence we can use a counted loop instead of
iterators, which means that we only need a single counter, instead of
having to increment and check one pointer for each iterator.

Using the generic implementation of the boolean comparison operators
(`lt`, `le`, `gt`, `ge`) provides further speedup for simple
types. This happens because the loop scans elements checking for
equality and dispatches to element comparison or length comparison
depending on the result of the prefix comparison.

```
test u8_cmp          ... bench:      14,043 ns/iter (+/- 1,732)
test u8_lt           ... bench:      16,156 ns/iter (+/- 1,864)
test u8_partial_cmp  ... bench:      16,250 ns/iter (+/- 2,608)
test u16_cmp         ... bench:      15,764 ns/iter (+/- 1,420)
test u16_lt          ... bench:      19,833 ns/iter (+/- 2,826)
test u16_partial_cmp ... bench:      19,811 ns/iter (+/- 2,240)
test u32_cmp         ... bench:      15,792 ns/iter (+/- 3,409)
test u32_lt          ... bench:      18,577 ns/iter (+/- 2,075)
test u32_partial_cmp ... bench:      18,603 ns/iter (+/- 5,666)
test u64_cmp         ... bench:      16,337 ns/iter (+/- 2,511)
test u64_lt          ... bench:      18,074 ns/iter (+/- 7,914)
test u64_partial_cmp ... bench:      17,909 ns/iter (+/- 1,105)
```

```
test u8_cmp          ... bench:       6,511 ns/iter (+/- 982)
test u8_lt           ... bench:       6,671 ns/iter (+/- 919)
test u8_partial_cmp  ... bench:       7,118 ns/iter (+/- 1,623)
test u16_cmp         ... bench:       6,689 ns/iter (+/- 921)
test u16_lt          ... bench:       6,712 ns/iter (+/- 947)
test u16_partial_cmp ... bench:       6,725 ns/iter (+/- 780)
test u32_cmp         ... bench:       7,704 ns/iter (+/- 1,294)
test u32_lt          ... bench:       7,611 ns/iter (+/- 3,062)
test u32_partial_cmp ... bench:       7,640 ns/iter (+/- 1,149)
test u64_cmp         ... bench:       7,517 ns/iter (+/- 2,164)
test u64_lt          ... bench:       7,579 ns/iter (+/- 1,048)
test u64_partial_cmp ... bench:       7,629 ns/iter (+/- 1,195)
```
2015-09-16 12:00:56 +02:00
Andrea Canciani
1614173b58 Specialize PartialOrd for totally ordered primitive types
Knowing the result of equality comparison can enable additional
optimizations in LLVM.

Additionally, this makes it obvious that `partial_cmp` on totally
ordered types cannot return `None`.
2015-09-16 11:26:56 +02:00
Adolfo Ochagavía
804f024eda Simplify sample code for {Option, Result}::iter_mut
Fixes #28431
2015-09-16 10:17:38 +02:00
Tobias Bucher
1b3745fe14 Add a comment that the Atomic* are all implicitly Send 2015-09-15 23:35:02 +01:00
bors
8320345221 Auto merge of #28268 - petrochenkov:fnptr, r=alexcrichton
Closes https://github.com/rust-lang/rust/issues/26082
2015-09-15 08:09:20 +00:00
bors
9da7706dd6 Auto merge of #28248 - PeterReid:master, r=alexcrichton
Overflows in integer pow() computations would be missed if they
preceded a 0 bit of the exponent being processed. This made
calls such as 2i32.pow(1024) not trigger an overflow.

Fixes #28012
2015-09-14 17:10:09 +00:00
bors
2d4ae52cbd Auto merge of #28358 - dotdash:nounwind, r=alexcrichton
This allows to skip the codegen for all the unneeded landing pads, reducing code size across the board by about 2-5%, depending on the crate. Compile times seem to be pretty unaffected though :-/
2015-09-14 11:05:34 +00:00
Björn Steinbrink
3ef75d5774 Mark all extern functions as nounwind
Unwinding across an FFI boundary is undefined behaviour, so we can mark
all external function as nounwind. The obvious exception are those
functions that actually perform the unwinding.
2015-09-14 11:36:09 +02:00