Commit Graph

32719 Commits

Author SHA1 Message Date
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
Steve Klabnik
c765178bf6 clean up some references to 'owned' 2014-09-22 17:54:10 -04:00
Steve Klabnik
64813d33d8 vectors are not in the language 2014-09-22 17:54:10 -04:00
Steve Klabnik
c94d479a90 die 'managed' 2014-09-22 17:54:10 -04:00
Steve Klabnik
84bd6bba45 logging is an external crate 2014-09-22 17:54:10 -04:00
Steve Klabnik
68b8901fff no it won't 2014-09-22 17:54:10 -04:00
Steve Klabnik
7866f515a5 runtime has no C++ 2014-09-22 17:54:10 -04:00
Steve Klabnik
667276040f Remove lies about task scheduling
it's 1:1 by default now, and N:M is on its way out
2014-09-22 17:54:10 -04:00