Commit Graph

32777 Commits

Author SHA1 Message Date
Jakub Wieczorek fd52224e78 Remove dead code from librustc 2014-09-24 21:03:55 +02:00
Jakub Wieczorek 5bcc154dff Remove unused enum variants 2014-09-24 21:03:55 +02:00
Jakub Wieczorek 3530e4a647 Use more descriptive names in dead code messages 2014-09-24 21:03:55 +02:00
Jakub Wieczorek 2ec795b4f0 Add detection of unused enum variants 2014-09-24 21:03:55 +02:00
Piotr Czarnecki 0a10b9dc9c Fix free lifetime vars in HashMap's iterators 2014-09-24 19:38:15 +01:00
bors e0bd16c5ec auto merge of #17477 : vhbit/rust/ios-deprecation-fix, r=alexcrichton 2014-09-24 17:30:51 +00:00
Matt Brubeck 88a8def0a3 Fix typo in unsafe guide (s/xlibrary/library) 2014-09-24 09:58:06 -07:00
bors 9e3bf02c38 auto merge of #17472 : kaseyc/rust/ICE_fix, r=aturon
Add checks for null bytes in the value strings for the export_name and link_section attributes, reporting an error if any are found, before calling with_c_str on them.

Fixes #16478
2014-09-24 15:45:48 +00:00
bors 5366cfecf3 auto merge of #17438 : alexcrichton/rust/string-stable, r=aturon
# Rationale

When dealing with strings, many functions deal with either a `char` (unicode
codepoint) or a byte (utf-8 encoding related). There is often an inconsistent
way in which methods are referred to as to whether they contain "byte", "char",
or nothing in their name.  There are also issues open to rename *all* methods to
reflect that they operate on utf8 encodings or bytes (e.g. utf8_len() or
byte_len()).

The current state of String seems to largely be what is desired, so this PR
proposes the following rationale for methods dealing with bytes or characters:

> When constructing a string, the input encoding *must* be mentioned (e.g.
> from_utf8). This makes it clear what exactly the input type is expected to be
> in terms of encoding.
>
> When a method operates on anything related to an *index* within the string
> such as length, capacity, position, etc, the method *implicitly* operates on
> bytes. It is an understood fact that String is a utf-8 encoded string, and
> burdening all methods with "bytes" would be redundant.
>
> When a method operates on the *contents* of a string, such as push() or pop(),
> then "char" is the default type. A String can loosely be thought of as being a
> collection of unicode codepoints, but not all collection-related operations
> make sense because some can be woefully inefficient.

# Method stabilization

The following methods have been marked #[stable]

* The String type itself
* String::new
* String::with_capacity
* String::from_utf16_lossy
* String::into_bytes
* String::as_bytes
* String::len
* String::clear
* String::as_slice

The following methods have been marked #[unstable]

* String::from_utf8 - The error type in the returned `Result` may change to
                      provide a nicer message when it's `unwrap()`'d
* String::from_utf8_lossy - The returned `MaybeOwned` type still needs
                            stabilization
* String::from_utf16 - The return type may change to become a `Result` which
                       includes more contextual information like where the error
                       occurred.
* String::from_chars - This is equivalent to iter().collect(), but currently not
                       as ergonomic.
* String::from_char - This method is the equivalent of Vec::from_elem, and has
                      been marked #[unstable] becuase it can be seen as a
                      duplicate of iterator-based functionality as well as
                      possibly being renamed.
* String::push_str - This *can* be emulated with .extend(foo.chars()), but is
                     less efficient because of decoding/encoding. Due to the
                     desire to minimize API surface this may be able to be
                     removed in the future for something possibly generic with
                     no loss in performance.
* String::grow - This is a duplicate of iterator-based functionality, which may
                 become more ergonomic in the future.
* String::capacity - This function was just added.
* String::push - This function was just added.
* String::pop - This function was just added.
* String::truncate - The failure conventions around String methods and byte
                     indices isn't totally clear at this time, so the failure
                     semantics and return value of this method are subject to
                     change.
* String::as_mut_vec - the naming of this method may change.
* string::raw::* - these functions are all waiting on [an RFC][2]

[2]: rust-lang/rfcs#240

The following method have been marked #[experimental]

* String::from_str - This function only exists as it's more efficient than
                     to_string(), but having a less ergonomic function for
                     performance reasons isn't the greatest reason to keep it
                     around. Like Vec::push_all, this has been marked
                     experimental for now.

The following methods have been #[deprecated]

* String::append - This method has been deprecated to remain consistent with the
                   deprecation of Vec::append. While convenient, it is one of
                   the only functional-style apis on String, and requires more
                   though as to whether it belongs as a first-class method or
                   now (and how it relates to other collections).
* String::from_byte - This is fairly rare functionality and can be emulated with
                      str::from_utf8 plus an assert plus a call to to_string().
                      Additionally, String::from_char could possibly be used.
* String::byte_capacity - Renamed to String::capacity due to the rationale
                          above.
* String::push_char - Renamed to String::push due to the rationale above.
* String::pop_char - Renamed to String::pop due to the rationale above.
* String::push_bytes - There are a number of `unsafe` functions on the `String`
                       type which allow bypassing utf-8 checks. These have all
                       been deprecated in favor of calling `.as_mut_vec()` and
                       then operating directly on the vector returned. These
                       methods were deprecated because naming them with relation
                       to other methods was difficult to rationalize and it's
                       arguably more composable to call .as_mut_vec().
* String::as_mut_bytes - See push_bytes
* String::push_byte - See push_bytes
* String::pop_byte - See push_bytes
* String::shift_byte - See push_bytes

# Reservation methods

This commit does not yet touch the methods for reserving bytes. The methods on
Vec have also not yet been modified. These methods are discussed in the upcoming
[Collections reform RFC][1]

[1]: https://github.com/aturon/rfcs/blob/collections-conventions/active/0000-collections-conventions.md#implicit-growth
2014-09-24 14:00:57 +00:00
NODA, Kai de027a8b1f guide-pointers.md: C sample code should match the Rust version.
Fix rust-lang/rust#17255
2014-09-24 21:53:11 +08:00
Matej Lach 5a25537faf Correct typo in the Iterator adapters section 2014-09-24 13:35:33 +01:00
Matej Lach 3c47d89614 Remove unnecessary code from an example 2014-09-24 12:39:16 +01:00
bors 8cad720879 auto merge of #17471 : vadimcn/rust/link-libgcc, r=alexcrichton
Closes #17271
Closes #15420
2014-09-24 11:25:48 +00:00
bors d853666c7b auto merge of #17463 : oskchaitanya/rust/master, r=alexcrichton
Setting LC_ALL to C helps keep gdb's output consistent ('print' gives us expected output). This fixes #17423. I do not have access to a windows/mac machines to test this. I've only tested it on an x86_64 linux box.
2014-09-24 09:40:52 +00:00
bors d8af469c01 auto merge of #17459 : dradtke/rust/master, r=brson
This PR adds a new Vim compiler file specifically for use with Cargo. It passes all arguments through, so commands like `:make build`, `:make clean`, and `:make run` all work as expected.

It also adds a quickfix autocommand for fixing the paths before populating the error list. `cargo build` reports errors with file paths that are relative to Cargo.toml, so if you're further down in the project tree, then trying to open the error will result in a blank buffer because Vim treats that path as relative to the working directory instead. With this fix, the paths work properly no matter where you are in the project.
2014-09-24 07:55:46 +00:00
Steven Fackler dcdbdc1003 Fix rebase fallout 2014-09-24 00:35:42 -07:00
Steven Fackler 65cca7c8b1 Deprecate `#[ignore(cfg(...))]`
Replace `#[ignore(cfg(a, b))]` with `#[cfg_attr(all(a, b), ignore)]`
2014-09-23 23:49:20 -07:00
Steven Fackler e520bb1b2f Add a cfg_attr syntax extension
This extends cfg-gating to attributes.

```rust
 #[cfg_attr(<cfg pattern>, <attr>)]
```
will expand to
```rust
 #[<attr>]
```
if the `<cfg pattern>` matches the current cfg environment, and nothing
if it does not. The grammar for the cfg pattern has a simple
recursive structure:

 * `value` and `key = "value"` are cfg patterns,
 * `not(<cfg pattern>)` is a cfg pattern and matches if `<cfg pattern>`
    does not.
 * `all(<cfg pattern>, ...)` is a cfg pattern and matches if all of the
    `<cfg pattern>`s do.
 * `any(<cfg pattern>, ...)` is a cfg pattern and matches if any of the
    `<cfg pattern>`s do.

Examples:

```rust
 // only derive Show for assert_eq! in tests
 #[cfg_attr(test, deriving(Show))]
 struct Foo { ... }

 // only derive Show for assert_eq! in tests and debug builds
 #[cfg_attr(any(test, not(ndebug)), deriving(Show))]
 struct Foo { ... }

 // ignore a test in certain cases
 #[test]
 #[cfg_attr(all(not(target_os = "linux"), target_endian = "big"), ignore)]
 fn test_broken_thing() { ... }

 // Avoid duplication when fixing staging issues in rustc
 #[cfg_attr(not(stage0), lang="iter")]
 pub trait Iterator<T> { ... }
```
2014-09-23 23:47:45 -07:00
Dan Burkert fc58dcbd43 use emit_tuple_arg while serializing tuples 2014-09-23 23:45:56 -07:00
bors 9cce2b7bab auto merge of #17449 : mcoffin/rust/master, r=alexcrichton
Right now, libuv will **always** be built for the host system (at least when building on OSX) because the information about the cross compiler is never actually passed to GYP. I don't know how anybody has been managing to build cross compilers with this.

Note that, at least on OSX, there is a bug in GYP that will send clang flags to non-clang compilers and it will still attempt to use Xcode's libtool, so this doesn't completely fix the problem of cross-compiling on an OSX host, but it's a start.
2014-09-24 05:10:45 +00:00
Corey Ford e87209ecd6 Fix iterator doc
OrdIterator: the doc says that values must implement `PartialOrd`, while the implementation is only for `Ord` values. It looks like this initially got out of sync in 4e1c215. Removed the doc sentence entirely since it seems redundant.

MultiplicativeIterator: Fixed weird sentence.
2014-09-23 21:06:00 -07:00
bors c8bafe0466 auto merge of #17248 : jbcrail/rust/fix-rational-rounding, r=alexcrichton
When I fixed the previous issue with rational rounding, I had introduced a regression. There was also an overflow bug introduced for fixed-precision rationals. This patch corrects both bugs.
2014-09-24 03:25:44 +00:00
NODA, Kai d4b7bdae33 liblibc and libnative: send() should use const buffers. 2014-09-24 10:36:40 +08:00
Alex Crichton 50375139e2 Deal with the fallout of string stabilization 2014-09-23 18:31:52 -07:00
Alex Crichton a59f3f21f2 Register new snapshots 2014-09-23 18:21:28 -07:00
NODA, Kai 24bd8124ea libnative/io: datasync() wrongly called fsync(). 2014-09-24 09:06:17 +08:00
Joseph Crail 363c264afa Fix regression and overflow bug for rationals. 2014-09-23 20:28:23 -04:00
Alex Crichton 3d8ca595a1 rustdoc: Don't try to inline the crate root
Fixes other test cases found in #16274
2014-09-23 15:19:30 -07:00
Alex Crichton d2b30f7d38 rustdoc: Prevent infinite recursion when inlining
Cyclic pub-use chains triggered infinite recursion, and this commit adds a hash
set to guard against cyclic recursion. This will cause one of the reexports to
render as a `pub use` instead of inlining the documentation.

Closes #16274
2014-09-23 15:13:56 -07:00
bors c669411afa auto merge of #17402 : steveklabnik/rust/update_manual, r=brson
Because I'm still 😷 😷 😷 , I figured some mindless tasks would be better than trying to finish the ownership guide. 

The manual has long been waiting for some ❤️ ❤️ ❤️ , and so I gave it a quick once-over. I made small commits in case any of the changes are a bit weird, I mostly did a few things:

1. changed 'manual' to 'reference.' I feel like this name is better. If it's not, It's not a huge deal. it shouldn't be `rust.md` though.
2. word wrapped everything appropriately. Changes 1&2 are in the first commit, so that its' easier to see the changes in the later ones.
3. fixed other small style issues
4. removed references to things that are in the standard library, and not the language itself

There's still lots of gross in here, but I didn't want to pile on too too many changes.

/cc @brson @nikomatsakis
2014-09-23 22:05:38 +00:00
bors 7fbbfe6bf2 auto merge of #17366 : ohazi/rust/master, r=steveklabnik
See: http://doc.rust-lang.org/std/from_str/trait.FromStr.html
```
let input_num = from_str::<Option<uint>>("5");
```
```
<anon>:2:21: 2:45 error: failed to find an implementation of trait std::from_str::FromStr for core::option::Option<uint>
<anon>:2     let input_num = from_str::<Option<uint>>("5");
                             ^~~~~~~~~~~~~~~~~~~~~~~~
```
2014-09-23 20:20:41 +00:00
Kasey Carrothers 3e8ad53939 Cleanup the check_null function. 2014-09-23 12:54:16 -07:00
bors 321785927c auto merge of #17413 : jakub-/rust/issue-17385, r=pcwalton
This is to make sure it hadn't been moved if there are no bindings
in any of the arms.

Fixes #17385.
2014-09-23 17:05:39 +00:00
Valerii Hiora cef86613db Fixed: iOS build was broken because of deprecated APIs 2014-09-23 18:04:50 +03:00
bors d80cd3d9bc auto merge of #17028 : pcwalton/rust/higher-rank-trait-lifetimes, r=pnkfelix
They will ICE during typechecking if used, because they depend on trait
reform.

This is part of unboxed closures.

r? @nikomatsakis
2014-09-23 14:30:40 +00:00
bors 2f9669c748 auto merge of #17456 : alfie/rust/master, r=steveklabnik
While reading the intro, I was confused as to why there were two variables named "numbers". Unless I'm mistaken and it's not necessary, let's get rid of it to make it clearer.
2014-09-23 12:45:45 +00:00
Felix S. Klock II ad0cdeffd3 Add deallocate calls to the realloc-16687.rs test.
Fix #17303.
2014-09-23 13:52:34 +02:00
bors 0a4c136d6a auto merge of #17446 : steveklabnik/rust/gh17445, r=alexcrichton
Fixes #17445.
2014-09-23 09:00:40 +00:00
Kasey Carrothers 80014b2856 Check for null bytes before calling with_c_str on link_section and export_name value strings. 2014-09-23 00:54:10 -07:00
bors f351e676cb auto merge of #17443 : alexcrichton/rust/issue-17442, r=brson
...des a full path via -Clinker=..."

This reverts commit 94f05324fe.
2014-09-23 07:15:40 +00:00
bors 3941d3c394 auto merge of #17401 : pcwalton/rust/private-items-in-public-apis, r=alexcrichton
This breaks code like:

    struct Foo {
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

Change this code to:

    pub struct Foo {    // note `pub`
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

The `visible_private_types` lint has been removed, since it is now an
error to attempt to expose a private type in a public API.

Closes #16463.

RFC #48.

[breaking-change]

r? @alexcrichton
2014-09-23 04:15:37 +00:00
Patrick Walton 5376b1c798 librustc: Parse and resolve higher-rank lifetimes in traits.
They will ICE during typechecking if used, because they depend on trait
reform.

This is part of unboxed closures.
2014-09-22 21:14:58 -07:00
Patrick Walton e9ad12c0ca librustc: Forbid private types in public APIs.
This breaks code like:

    struct Foo {
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

Change this code to:

    pub struct Foo {    // note `pub`
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

The `visible_private_types` lint has been removed, since it is now an
error to attempt to expose a private type in a public API. In its place
a `#[feature(visible_private_types)]` gate has been added.

Closes #16463.

RFC #48.

[breaking-change]
2014-09-22 20:05:45 -07:00
bors 3f299ff19d auto merge of #17432 : nick29581/rust/contrib, r=brson
r? @brson
2014-09-23 02:30:36 +00:00
O S K Chaitanya 2443dd0dcc collapse setting and exporting RUST_BENCH into one line 2014-09-23 03:12:37 +02:00
O S K Chaitanya 23ba9072e1 Use locale 'C' for running tests. Closes #17423 2014-09-23 03:07:39 +02:00
bors 43fd619819 auto merge of #17286 : vberger/rust/deprecated_in_macros, r=aturon
Closes #17185.

The stability lint will now check code generated by macro expansion. It will allow to detect :
- arguments passed to macros using deprecated (and others) items
- macro expansion generating code using deprecated items due to its arguments (hence the second commit, fixing such issue found in libcollections)

Checking is still done at expansion, but it will also detect a macro explicitly using a deprecated item in its definition.
2014-09-22 23:50:30 +00:00
Vadim Chugunov a46865981e Link libgcc statically on Win64.
Allow linking it statically on Win32 with an override.
2014-09-22 16:33:18 -07:00
Damien Radtke 59e750f198 Add cargo.vim compiler file. 2014-09-22 17:24:26 -05:00
bors 4b5f4563bf auto merge of #17408 : bkoropoff/rust/bot-ice, r=alexcrichton
- Don't attempt to autoderef `!`.  The `Deref`/`DerefMut` trait lookup would generate a bunch of unhelpful error spew.
- Don't allow explicit deref of `!`, since later passes just ICE.  This closes issue #17373 
- Don't allow explicit index of `!`, since later passes just ICE.  There does not seem to be an issue associated with this
2014-09-22 22:05:33 +00:00