4403 Commits

Author SHA1 Message Date
bors
766a4e1acc Auto merge of #23333 - oli-obk:slice_from_raw_parts, r=alexcrichton
at least that's what the docs say: http://doc.rust-lang.org/std/slice/fn.from_raw_parts.html

A few situations got prettier. In some situations the mutability of the resulting and source pointers differed (and was cast away by transmute), the mutability matches now.
2015-03-14 08:55:31 +00:00
bors
f7453f940b Auto merge of #22948 - rprichard:simple-panic-opt, r=alexcrichton
Reduce code size overhead from core::panicking::panic

core::panicking::panic currently creates an Arguments structure using
format_args!("{}", expr), which formats the expr str using the Display::fmt.
Display::fmt pulls in Formatter::pad, which then also pulls in string-related
code for truncation and padding.

If core::panicking::panic instead creates an Arguments structure with a string
piece, it is possible that the Display::fmt function for str can be optimized
out of the program.

In my testing with a 32-bit x86 bare metal program, the change tended to save
between ~100 bytes and ~5500 bytes, depending on what other panic* functions
the program invokes and whether the panic_fmt lang item uses the Arguments
value.
2015-03-14 01:04:37 +00:00
Manish Goregaokar
63cd9f9d89 Rollup merge of #23321 - apasel422:hash, r=alexcrichton
It is no longer possible to specialize on the `Hasher` because it moved to a method-level type parameter.
2015-03-13 18:11:46 +05:30
Oliver Schneider
6584ae5491 slice::from_raw_parts is preferred over transmuting a fresh raw::Slice 2015-03-13 09:56:18 +01:00
Andrew Paseltiner
ae21b4f581 remove mention of specialization from Hash trait
It is no longer possible to specialize on the `Hasher` because it moved
to a method-level type parameter.
2015-03-12 18:09:52 -04:00
Gleb Kozyrev
5d9ed0bc0e Update the ways to get a pointer from a box
Show how to get a pointer without destroying the box.
Use `boxed::into_raw` instead of `mem::transmute`.
2015-03-12 20:48:04 +02:00
bors
49f7550a25 Auto merge of #23162 - sfackler:debug-builders, r=alexcrichton
I've made some minor changes from the implementation attached to the RFC to try to minimize codegen. The methods now take `&Debug` trait objects rather than being parameterized and there are inlined stub methods that call to non-inlined methods to do the work.

r? @alexcrichton 

cc @huonw for the `derive(Debug)` changes.
2015-03-12 07:30:44 +00:00
Manish Goregaokar
6290a344a6 Rollup merge of #23263 - alexcrichton:stabilize-from-raw-parts, r=brson
These new APIs have had some time to bake now, and no pressing issues have come
up so they should be ok for stabilizing. Specifically, these two APIs were
stabilized:

* `slice::from_raw_parts`
* `slice::from_raw_parts_mut`
2015-03-12 09:14:26 +05:30
Manish Goregaokar
7a9ef60e60 Rollup merge of #23247 - tbu-:pr_core_iter_rm_isize, r=huonw 2015-03-12 09:14:08 +05:30
Steve Klabnik
64ab111b53 Example -> Examples
This brings comments in line with https://github.com/rust-lang/rfcs/blob/master/text/0505-api-comment-conventions.md#using-markdown
2015-03-11 21:11:40 -04:00
Steven Fackler
905a611b94 Switch to a specific feature 2015-03-11 12:58:01 -07:00
Ryan Prichard
9c0057df58 Remove core::panicking::panic's dependence on str's Display::fmt impl
Display::fmt for str calls into Formatter::pad, which is modest in size
and also pulls in string-related functions for its truncation and padding
abilities.  For size-critical programs (e.g. embedded), this call site
may be the only reason Formatter::pad is linked into the output.
2015-03-10 22:21:30 -07:00
Steven Fackler
4181d43c4b Remove inline silliness from debug builders
Turns out it's basically a wash, codegen wise.
2015-03-10 21:33:04 -07:00
bors
f899513a30 Auto merge of #23251 - tbu-:pr_rm_core_str_checked_add, r=alexcrichton 2015-03-11 01:39:49 +00:00
bors
cfea8ec416 Auto merge of #23126 - alexcrichton:char-third-pass, r=aturon
This commit performs another pass over the `std::char` module for stabilization.
Some minor cleanup is performed such as migrating documentation from libcore to
libunicode (where the `std`-facing trait resides) as well as a slight
reorganiation in libunicode itself. Otherwise, the stability modifications made
are:

* `char::from_digit` is now stable
* `CharExt::is_digit` is now stable
* `CharExt::to_digit` is now stable
* `CharExt::to_{lower,upper}case` are now stable after being modified to return
  an iterator over characters. While the implementation today has not changed
  this should allow us to implement the full set of case conversions in unicode
  where some characters can map to multiple when doing an upper or lower case
  mapping.
* `StrExt::to_{lower,upper}case` was added as unstable for a convenience of not
  having to worry about characters expanding to more characters when you just
  want the whole string to get into upper or lower case.

This is a breaking change due to the change in the signatures of the
`CharExt::to_{upper,lower}case` methods. Code can be updated to use functions
like `flat_map` or `collect` to handle the difference.

[breaking-change]

Closes #20333
2015-03-10 22:45:10 +00:00
Alex Crichton
0f6a0b58f9 std: Stabilize more of the char module
This commit performs another pass over the `std::char` module for stabilization.
Some minor cleanup is performed such as migrating documentation from libcore to
libunicode (where the `std`-facing trait resides) as well as a slight
reorganiation in libunicode itself. Otherwise, the stability modifications made
are:

* `char::from_digit` is now stable
* `CharExt::is_digit` is now stable
* `CharExt::to_digit` is now stable
* `CharExt::to_{lower,upper}case` are now stable after being modified to return
  an iterator over characters. While the implementation today has not changed
  this should allow us to implement the full set of case conversions in unicode
  where some characters can map to multiple when doing an upper or lower case
  mapping.
* `StrExt::to_{lower,upper}case` was added as unstable for a convenience of not
  having to worry about characters expanding to more characters when you just
  want the whole string to get into upper or lower case.

This is a breaking change due to the change in the signatures of the
`CharExt::to_{upper,lower}case` methods. Code can be updated to use functions
like `flat_map` or `collect` to handle the difference.

[breaking-change]
2015-03-10 15:08:31 -07:00
Alex Crichton
0ad874111e std: Stabilize slice::from_raw_parts
These new APIs have had some time to bake now, and no pressing issues have come
up so they should be ok for stabilizing. Specifically, these two APIs were
stabilized:

* `slice::from_raw_parts`
* `slice::from_raw_parts_mut`
2015-03-10 13:45:08 -07:00
bors
6048ba8a55 Auto merge of #23249 - tbu-:pr_rm_core_str_macros, r=alexcrichton 2015-03-10 20:20:15 +00:00
Tobias Bucher
5199a7060b Remove unneeded saturating_add 2015-03-10 14:18:24 +01:00
Tobias Bucher
fb297d1027 Remove unneeded macro witchery 2015-03-10 12:57:05 +01:00
Tobias Bucher
fcae449b39 Purge isize from core::iter 2015-03-10 11:36:11 +01:00
Steven Fackler
bd6ed22fdf Switch derive(Debug) to use the debug builders 2015-03-09 23:24:34 -07:00
Steven Fackler
8121cf077c Restructure debug builders to minimize codegen
Switching from generic bounds to trait objects and having un-inlined
inner methods should cut down on the size of Debug impls, since we care
about the speed of a Debug implementation way less than binary bloat.
2015-03-09 23:24:34 -07:00
Steven Fackler
e3656bd81b Implement RFC 640 2015-03-09 23:24:34 -07:00
bors
b83b26bacb Auto merge of #22561 - richo:as_slice-as_str, r=Manishearth
This may not be quite ready to go out, I fixed some docs but suspect I missed a bunch.

I also wound up fixing a bunch of redundant `[]` suffixes, but on closer inspection I don't believe that can land until after a snapshot.
2015-03-09 21:02:50 +00:00
bors
777f5d9599 Auto merge of #23219 - Manishearth:rollup, r=Manishearth 2015-03-09 16:02:29 +00:00
Richo Healey
7981aa6ac9 doc: Fix extraneous as_slice()'s in docstrings 2015-03-09 07:54:19 -07:00
Manish Goregaokar
4733190c35 Rollup merge of #23183 - steveklabnik:gh22572, r=Manishearth
They're opt-in now.

Fixes #22572
2015-03-09 17:59:20 +05:30
bors
91bdf23f50 Auto merge of #23153 - Manishearth:snap, r=alexcrichton
Needed so that #21824 can land
2015-03-09 00:17:49 +00:00
Steve Klabnik
9653a521b5 Clean up references to opt-out traits
They're opt-in now.

Fixes #22572
2015-03-08 09:32:18 -04:00
Łukasz Niemier
3ad1c83540 Add description of fold function arguments. 2015-03-08 08:38:27 -04:00
Pyry Kontio
6dcc0e5631 Adds an example for PhantomData<T>. 2015-03-08 08:38:10 -04:00
Manish Goregaokar
f81f8d81d3 Register new snapshots (270a677) 2015-03-08 00:36:56 +05:30
FuGangqiang
ae7dce674e indicate from_str_radix is code 2015-03-07 18:03:38 +08:00
Manish Goregaokar
aaaa4310cc Rollup merge of #23100 - wesleywiser:fix_23059, r=brson
Fixes #23059
2015-03-06 22:22:38 +05:30
Manish Goregaokar
2fcdd824ef Rollup merge of #23056 - awlnx:master, r=nrc 2015-03-06 22:22:33 +05:30
Manish Goregaokar
417639885c Rollup merge of #23025 - huonw:better-iter-infer, r=Gankro
This concretely improves type inference of some cases (see included
test). I assume the compiler struggles to reason about multiple layers
of generic type parameters (even with associated-type equalities) but
*can* understand pure associated types, since they are always directly
computable from the input types.

Thanks to @shepmaster for noticing the issue with `Cloned` (I took that example as a test case).
2015-03-06 22:22:31 +05:30
Manish Goregaokar
efb487b503 Rollup merge of #22980 - alexcrichton:debug-assertions, r=pnkfelix
This commit is an implementation of [RFC 563][rfc] which adds a new
`cfg(debug_assertions)` directive which is specially recognized and calculated
by the compiler. The flag is turned off at any optimization level greater than 1
and may also be explicitly controlled through the `-C debug-assertions`
flag.

[rfc]: https://github.com/rust-lang/rfcs/pull/563

The `debug_assert!` and `debug_assert_eq!` macros now respect this instead of
the `ndebug` variable and `ndebug` no longer holds any meaning to the standard
library.

Code which was previously relying on `not(ndebug)` to gate expensive code should
be updated to rely on `debug_assertions` instead.

Closes #22492
[breaking-change]
2015-03-06 08:58:30 +05:30
Manish Goregaokar
9eb596ce8f Rollup merge of #22899 - huonw:macro-stability, r=alexcrichton
Unstable items used in a macro expansion will now always trigger
stability warnings, *unless* the unstable items are directly inside a
macro marked with `#[allow_internal_unstable]`. IOW, the compiler warns
unless the span of the unstable item is a subspan of the definition of a
macro marked with that attribute.

E.g.

    #[allow_internal_unstable]
    macro_rules! foo {
        ($e: expr) => {{
            $e;
            unstable(); // no warning
            only_called_by_foo!();
        }}
    }

    macro_rules! only_called_by_foo {
        () => { unstable() } // warning
    }

    foo!(unstable()) // warning

The unstable inside `foo` is fine, due to the attribute. But the
`unstable` inside `only_called_by_foo` is not, since that macro doesn't
have the attribute, and the `unstable` passed into `foo` is also not
fine since it isn't contained in the macro itself (that is, even though
it is only used directly in the macro).

In the process this makes the stability tracking much more precise,
e.g. previously `println!(\"{}\", unstable())` got no warning, but now it
does. As such, this is a bug fix that may cause [breaking-change]s.

The attribute is definitely feature gated, since it explicitly allows
side-stepping the feature gating system.

---

This updates `thread_local!` macro to use the attribute, since it uses
unstable features internally (initialising a struct with unstable
fields).
2015-03-06 08:58:16 +05:30
Wesley Wiser
96b1f0c0be Fix reference to 'librlibc' in libcore docs
Fixes #23059
2015-03-05 20:45:54 -05:00
Alex Crichton
d5d834551c rustc: Add a debug_assertions #[cfg] directive
This commit is an implementation of [RFC 563][rfc] which adds a new
`cfg(debug_assertions)` directive which is specially recognized and calculated
by the compiler. The flag is turned off at any optimization level greater than 1
and may also be explicitly controlled through the `-C debug-assertions`
flag.

[rfc]: https://github.com/rust-lang/rfcs/pull/563

The `debug_assert!` and `debug_assert_eq!` macros now respect this instead of
the `ndebug` variable and `ndebug` no longer holds any meaning to the standard
library.

Code which was previously relying on `not(ndebug)` to gate expensive code should
be updated to rely on `debug_assertions` instead.

Closes #22492
[breaking-change]
2015-03-05 14:51:38 -08:00
awlnx
951ef9d1f1 fix for new attributes failing. issue #22964 2015-03-05 11:53:51 -05:00
Huon Wilson
84b060ce29 Add #[allow_internal_unstable] to track stability for macros better.
Unstable items used in a macro expansion will now always trigger
stability warnings, *unless* the unstable items are directly inside a
macro marked with `#[allow_internal_unstable]`. IOW, the compiler warns
unless the span of the unstable item is a subspan of the definition of a
macro marked with that attribute.

E.g.

    #[allow_internal_unstable]
    macro_rules! foo {
        ($e: expr) => {{
            $e;
            unstable(); // no warning
            only_called_by_foo!();
        }}
    }

    macro_rules! only_called_by_foo {
        () => { unstable() } // warning
    }

    foo!(unstable()) // warning

The unstable inside `foo` is fine, due to the attribute. But the
`unstable` inside `only_called_by_foo` is not, since that macro doesn't
have the attribute, and the `unstable` passed into `foo` is also not
fine since it isn't contained in the macro itself (that is, even though
it is only used directly in the macro).

In the process this makes the stability tracking much more precise,
e.g. previously `println!("{}", unstable())` got no warning, but now it
does. As such, this is a bug fix that may cause [breaking-change]s.

The attribute is definitely feature gated, since it explicitly allows
side-stepping the feature gating system.
2015-03-06 00:18:28 +11:00
Huon Wilson
7bcf7fb500 Use more associated types in core::iter.
This concretely improves type inference of some cases (see included
test). I assume the compiler struggles to reason about multiple layers
of generic type parameters (even with associated-type equalities) but
*can* understand pure associated types, since they are always directly
computable from the input types.
2015-03-05 22:50:09 +11:00
Manish Goregaokar
145b83e633 Rollup merge of #22994 - eddyb:unsuffix-ints-good, r=alexcrichton
Automatic has-same-types testing methodology can be found in #22501.
Because most of them don't work with `--pretty=typed`, compile-fail tests were manually audited.

r? @aturon
2015-03-05 12:38:33 +05:30
Eduard Burtescu
e64670888a Remove integer suffixes where the types in compiled code are identical. 2015-03-05 12:38:33 +05:30
Manish Goregaokar
24f00eb2ae Rollup merge of #23001 - alexcrichton:index-output-stable, r=nikomatsakis
This stability attribute was left out by accident and the stability pass has
since picked up the ability to check for this. As a result, crates are currently
getting warnings for implementations of `Index`.
2015-03-05 12:37:49 +05:30
bors
6e055c3f00 Auto merge of #22958 - laijs:option_map_for_iter_map, r=alexcrichton
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
2015-03-04 09:46:29 +00:00
Alex Crichton
da03392e1f std: Mark Index::Output as a stable associated type
This stability attribute was left out by accident and the stability pass has
since picked up the ability to check for this. As a result, crates are currently
getting warnings for implementations of `Index`.
2015-03-03 11:28:57 -08:00
bors
14f0942a49 Auto merge of #22532 - pnkfelix:arith-overflow, r=pnkfelix,eddyb
Rebase and follow-through on work done by @cmr and @aatch.

Implements most of rust-lang/rfcs#560. Errors encountered from the checks during building were fixed.

The checks for division, remainder and bit-shifting have not been implemented yet.

See also PR #20795

cc @Aatch ; cc @nikomatsakis
2015-03-03 14:18:03 +00:00