Commit Graph

36478 Commits

Author SHA1 Message Date
Alex Crichton ec7a50d20d std: Redesign c_str and c_vec
This commit is an implementation of [RFC 494][rfc] which removes the entire
`std::c_vec` module and redesigns the `std::c_str` module as `std::ffi`.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0494-c_str-and-c_vec-stability.md

The interface of the new `CString` is outlined in the linked RFC, the primary
changes being:

* The `ToCStr` trait is gone, meaning the `with_c_str` and `to_c_str` methods
  are now gone. These two methods are replaced with a `CString::from_slice`
  method.
* The `CString` type is now just a wrapper around `Vec<u8>` with a static
  guarantee that there is a trailing nul byte with no internal nul bytes. This
  means that `CString` now implements `Deref<Target = [c_char]>`, which is where
  it gains most of its methods from. A few helper methods are added to acquire a
  slice of `u8` instead of `c_char`, as well as including a slice with the
  trailing nul byte if necessary.
* All usage of non-owned `CString` values is now done via two functions inside
  of `std::ffi`, called `c_str_to_bytes` and `c_str_to_bytes_with_nul`. These
  functions are now the one method used to convert a `*const c_char` to a Rust
  slice of `u8`.

Many more details, including newly deprecated methods, can be found linked in
the RFC. This is a:

[breaking-change]
Closes #20444
2015-01-05 08:00:13 -08:00
FakeKane 05c5b5f033 reverting other changes 2015-01-05 10:25:22 -05:00
Niko Matsakis c8868942e8 Treat associated types the same as type parameters when it comes to region bounding. Fixes #20303.
Strictly speaking, this is a [breaking-change] (if you are using
associated types). You are no longer free to wantonly violate the type
system rules by closing associated types into objects without any form
of region bound. Instead you should add region bounds like `T::X :
'a`, just as you would with a normal type parameter.
2015-01-05 10:14:35 -05:00
bors 03268bbf35 auto merge of #20514 : alexcrichton/rust/serialize-associated-type, r=aturon
This commit moves the libserialize crate (and will force the hand of the
rustc-serialize crate) to not require the `old_orphan_check` feature gate as
well as using associated types wherever possible. Concretely, the following
changes were made:

* The error type of `Encoder` and `Decoder` is now an associated type, meaning
  that these traits have no type parameters.

* The `Encoder` and `Decoder` type parameters on the `Encodable` and `Decodable`
  traits have moved to the corresponding method of the trait. This movement
  alleviates the dependency on `old_orphan_check` but implies that
  implementations can no longer be specialized for the type of encoder/decoder
  being implemented.

Due to the trait definitions changing, this is a:

[breaking-change]
2015-01-05 14:51:03 +00:00
Piotr Czarnecki 156a1c3134 Implement a few methods for RingBuf
* shrink_to_fit
* swap_back_remove
* swap_front_remove
* truncate
* resize
2015-01-05 15:48:58 +01:00
Niko Matsakis 928bb2be8f Improve test to include a projection, per @huonw's suggestion. 2015-01-05 09:14:03 -05:00
Niko Matsakis 57aaa9bf87 Make supertrait references work in object types too. 2015-01-05 07:11:48 -05:00
Niko Matsakis 7ee5863202 Minor code formatting cleanups. 2015-01-05 07:11:48 -05:00
Niko Matsakis 9989288438 Permit bindings of (and references to) associated types defined in supertraits. 2015-01-05 07:11:48 -05:00
Niko Matsakis 2ccab193af Introduce a CollectCtxt and impl AstConv on *that*. Also make all fns
in collect private except the public entry point.
2015-01-05 07:11:47 -05:00
Niko Matsakis 95ee339bd1 Stop writing code that is (unnecessarily) generic over any AstConv in collect,
just hard-code the ccx.
2015-01-05 07:11:47 -05:00
Niko Matsakis 94c345b66c Convert astconv and friends to use object types, not generics. No need to compile
all that stuff twice. Also, code reads so much nicer.
2015-01-05 07:11:47 -05:00
bors 8e83af6e87 auto merge of #20451 : brson/rust/installer, r=alexcrichton
This fixes a mostly harmless syntax error in the install script.
2015-01-05 11:10:57 +00:00
Simonas Kazlauskas 6ca1f0c6ea Add tests for ChaCha and Isaac Clone impls 2015-01-05 13:10:31 +02:00
Simonas Kazlauskas f677deeab3 Implement Clone for PRNGs 2015-01-05 13:10:27 +02:00
Laurence Tratt 2c44195895 Make temporary directory names non-deterministic.
The previous scheme made it possible for another user/attacker to cause the
temporary directory creation scheme to panic. All you needed to know was the pid
of the process you wanted to target ('other_pid') and the suffix it was using
(let's pretend it's 'sfx') and then code such as this would, in essence, DOS it:

    for i in range(0u, 1001) {
        let tp = &Path::new(format!("/tmp/rs-{}-{}-sfx", other_pid, i));
        match fs::mkdir(tp, io::USER_RWX) { _ => () }
    }

Since the scheme retried only 1000 times to create a temporary directory before
dying, the next time the attacked process called TempDir::new("sfx") after that
would typically cause a panic. Of course, you don't necessarily need an attacker
to cause such a DOS: creating 1000 temporary directories without closing any of
the previous would be enough to DOS yourself.

This patch broadly follows the OpenBSD implementation of mkstemp. It uses the
operating system's random number generator to produce random directory names
that are impractical to guess (and, just in case someone manages to do that, it
retries creating the directory for a long time before giving up; OpenBSD
retries INT_MAX times, although 1<<31 seems enough to thwart even the most
patient attacker).

As a small additional change, this patch also makes the argument that
TempDir::new takes a prefix rather than a suffix. This is because 1) it more
closely matches what mkstemp and friends do 2) if you're going to have a
deterministic part of a filename, you really want it at the beginning so that
shell completion is useful.
2015-01-05 10:19:19 +00:00
Huon Wilson 3e9d5938cc Remove uses of default_type_params feature gate from tests. 2015-01-05 20:00:10 +11:00
Huon Wilson b98a589e23 Remove use of globs feature gate from tests. 2015-01-05 20:00:10 +11:00
Huon Wilson 4016c729f1 Remove use of associated_types feature gate from tests. 2015-01-05 20:00:10 +11:00
Huon Wilson 6e3d78f06f Ungate default type parameters.
These are in scope for 1.0, and this is good to e.g. find as many bugs
as possible.
2015-01-05 20:00:10 +11:00
Huon Wilson 6795148169 Ungate globs.
These are in scope for 1.0, so this is good to e.g. make it easier find
bugs.
2015-01-05 20:00:10 +11:00
Huon Wilson 82a96a11ab Ungate associated types.
They work pretty well now, and the stdlib is using them everywhere so
they're impossible to avoid anyway.
2015-01-05 20:00:10 +11:00
Jared Roesch c02fac471a Refactor struct parsing and add tests 2015-01-05 00:46:01 -08:00
Zbigniew Siciarz 73019ac10e Fix misleading name in AsciiExt docs 2015-01-05 08:44:18 +01:00
Alex Crichton dc246ae018 std: Fix missing stability on prelude
The module itself is stable (the name)
2015-01-04 23:40:07 -08:00
Alex Crichton 177f8bc55c std: Fix missing stability in sync
* The `sync` module is stable
* The `sync::mpsc` module is stable
* The `Sender::send` method is stable.
* The `Once::doit` method is now removed.
* Deprecated atomic initializers are removed.
* Renamed atomic initializers are now stable.
2015-01-04 23:38:46 -08:00
Alex Crichton 267b73d95e std: Fixup some missing stabilization on str
* The `str` module itself is stable.
* The `StrExt` trait is stable (and impls).
* The `Utf8Error` type is unstable.
* The `from_utf8` function is stable
* Some iterators are now stable:
  * `Chars`
  * `CharIndices`
* The `MatchIndices` iterator is now unstable
* The public `traits` module is no longer public.
2015-01-04 23:32:20 -08:00
York Xiang 09c4e8fe96 kate syntax highlight: update keyword list 2015-01-05 15:11:54 +08:00
Alex Crichton 0cb7a4062a serialize: Use assoc types + less old_orphan_check
This commit moves the libserialize crate (and will force the hand of the
rustc-serialize crate) to not require the `old_orphan_check` feature gate as
well as using associated types wherever possible. Concretely, the following
changes were made:

* The error type of `Encoder` and `Decoder` is now an associated type, meaning
  that these traits have no type parameters.

* The `Encoder` and `Decoder` type parameters on the `Encodable` and `Decodable`
  traits have moved to the corresponding method of the trait. This movement
  alleviates the dependency on `old_orphan_check` but implies that
  implementations can no longer be specialized for the type of encoder/decoder
  being implemented.

Due to the trait definitions changing, this is a:

[breaking-change]
2015-01-04 22:59:26 -08:00
bors 1f732ef53d auto merge of #20395 : huonw/rust/char-stab-2, r=aturon
cc #19260 

The casing transformations are left unstable (it is highly likely to be better to adopt the proper non-1-to-1 case mappings, per #20333) as are `is_xid_*`.

I've got a little todo list in the last commit of things I thought about/was told about that I haven't yet handled (I'd also like some feedback).
2015-01-05 06:45:39 +00:00
Huon Wilson bf6c007760 Change `&` pat to only work with &T, and `&mut` with &mut T.
This implements RFC 179 by making the pattern `&<pat>` require matching
against a variable of type `&T`, and introducing the pattern `&mut
<pat>` which only works with variables of type `&mut T`.

The pattern `&mut x` currently parses as `&(mut x)` i.e. a pattern match
through a `&T` or a `&mut T` that binds the variable `x` to have type
`T` and to be mutable. This should be rewritten as follows, for example,

    for &mut x in slice.iter() {

becomes

    for &x in slice.iter() {
        let mut x = x;

Due to this, this is a

[breaking-change]

Closes #20496.
2015-01-05 16:14:17 +11:00
bors ed22606c83 auto merge of #20285 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakis
This commit introduces the syntax for negative implementations of traits
as shown below:

`impl !Trait for Type {}`

cc #13231
Part of RFC rust-lang/rfcs#127

r? @nikomatsakis
2015-01-05 04:20:46 +00:00
Jared Roesch c54932cb12 Fix the parsing of where-clauses for structs 2015-01-04 17:33:31 -08:00
Huon Wilson 990a79f097 char: small tweak since `is_some` > equivalent `match`. 2015-01-05 12:30:51 +11:00
Huon Wilson e670fb484b Apply explicit stabilities to unicode parts of CharExt. 2015-01-05 12:30:51 +11:00
Huon Wilson 0302d37977 Merge `UnicodeChar` and `CharExt`.
This "reexports" all the functionality of `core::char::CharExt` as
methods on `unicode::u_char::UnicodeChar` (renamed to `CharExt`).

Imports may need to be updated (one now just imports
`unicode::CharExt`, or `std::char::CharExt` rather than two traits from
either), so this is a

[breaking-change]
2015-01-05 12:30:51 +11:00
Huon Wilson 19120209d8 Rename `core::char::Char` to `CharExt` to match prelude guidelines.
Imports may need to be updated so this is a

[breaking-change]
2015-01-05 12:30:30 +11:00
Huon Wilson 01417f245c Mark the contents of `char` stable. 2015-01-05 12:29:41 +11:00
Huon Wilson 8018293e08 Switch encode_utf* to by-value self. 2015-01-05 12:28:54 +11:00
Huon Wilson abdeefdbcc Remove deprecated functionality from `char`. 2015-01-05 12:28:54 +11:00
Tshepang Lekhonkhobe cc18053d9c bench: do not quit rt-messaging-ping-pong.rs early 2015-01-05 03:19:34 +02:00
bors ad9e759382 auto merge of #20163 : bfops/rust/master, r=Gankro
TODOs:
  - ~~Entry is still `<'a, K, V>` instead of `<'a, O, V>`~~
  - ~~BTreeMap is still outstanding~~.
  - ~~Transform appropriate things into `.entry(...).get().or_else(|e| ...)`~~

Things that make me frowny face:
  - I'm not happy about the fact that this `clone`s the key even when it's already owned.
  - With small keys (e.g. `int`s), taking a reference seems wasteful.

r? @Gankro
cc: @cgaebel
2015-01-05 00:26:28 +00:00
Flavio Percoco c062fac835 Put negative trait implemtations behind a feature gate 2015-01-04 23:16:14 +01:00
Flavio Percoco 8b883ab268 Add syntax for negative implementations of traits
This commit introduces the syntax for negative implmenetations of traits
as shown below:

`impl !Trait for Type {}`

cc #13231
Part of RFC #3
2015-01-04 23:16:13 +01:00
Niko Matsakis dbfa05411b Cleanup type-checking of constants, but do not try to fix #20489. 2015-01-04 17:03:09 -05:00
Niko Matsakis a17a7c9f75 Miscellaneous reformatting and commenting. 2015-01-04 17:03:09 -05:00
Niko Matsakis 9b820d0d63 Correct the subtyping relations created by the pattern typechecking
code. Previously we were creating a subtyping relation in the wrong
direction. We now just unify types, which is stronger than necessary
but turns out fine.

Fixes #19552.
Fixes #19997.
2015-01-04 17:03:08 -05:00
bors 5773bdefff Merge pull request #20520 from nhowell/patch-1
doc: Add missing `$`s in the Installing Rust guide

Reviewed-by: steveklabnik, steveklabnik
2015-01-04 21:36:41 +00:00
bors 589c38a3af Merge pull request #20515 from tshepang/modernise-ping-pong-benchmark
bench: remove warnings from rt-messaging-ping-pong.rs

Reviewed-by: alexcrichton
2015-01-04 21:36:41 +00:00
bors f1cda51bb4 Merge pull request #20512 from bjz/rustdoc
Allow rustdoc to accept vector pattern arguments

Reviewed-by: alexcrichton, alexcrichton
2015-01-04 21:36:40 +00:00