Commit Graph

43419 Commits

Author SHA1 Message Date
bors
2fbbd54afe Auto merge of #26122 - bluss:borrow-box, r=alexcrichton
Implement Borrow<T> and BorrowMut<T> for Box<T: ?Sized>
2015-06-11 03:25:45 +00:00
bors
fbb13543fc Auto merge of #25839 - bluss:str-split-at-impl, r=alexcrichton
Implement RFC rust-lang/rfcs#1123

Add str method str::split_at(mid: usize) -> (&str, &str).

Also a minor cleanup in the collections::str module. Remove redundant slicing of self.
2015-06-11 00:22:27 +00:00
bors
01ab4f761c Auto merge of #25777 - shepmaster:cstring-return-to-c, r=alexcrichton
As far as I was able to determine, it's currently *impossible* to allocate a C NUL-terminated string in Rust and then return it to C (transferring ownership), without leaking memory. There is support for passing the string to C (borrowing).

To complicate matters, it's not possible for the C code to just call `free` on the allocated string, due to the different allocators in use.

`CString` has no way to recreate itself from a pointer. This commit adds one. This is complicated a bit because Rust `Vec`s want the pointer, size, and capacity.

To deal with that, another method to shrink and "leak" the `CString` to a `char *` is also provided. 

We can then use `strlen` to determine the length of the string, which must match the capacity. 

**TODO**

- [x] Improve documentation
- [x] Add stability markers
- [x] Convert to `Box<[u8]>`

### Example code

With this example code:

```rust
#![feature(libc)]
#![feature(cstr_to_str)]
#![feature(c_str_memory)]

extern crate libc;

use std::ffi::{CStr,CString};

#[no_mangle]
pub extern fn reverse(s: *const libc::c_char) -> *const libc::c_char {
    let s = unsafe { CStr::from_ptr(s) };
    let s2 = s.to_str().unwrap();
    let s3: String = s2.chars().rev().collect();
    let s4 = CString::new(s3).unwrap();
    s4.into_ptr()
}

#[no_mangle]
pub extern fn cleanup(s: *const libc::c_char) {
    unsafe { CString::from_ptr(s) };
}
```

Compiled using `rustc --crate-type dylib str.rs`, I was able to link against it from C (`gcc -L. -l str str.c -o str`):
 
```c
#include <stdio.h>

extern char *reverse(char *);
extern void cleanup(char *);

int main() {
  char *s = reverse("Hello, world!");
  printf("%s\n", s);
  cleanup(s);
}
```

As well as dynamically link via Ruby:

```ruby
require 'fiddle'
require 'fiddle/import'

module LibSum
  extend Fiddle::Importer

  dlload './libstr.dylib'
  extern 'char* reverse(char *)'
  extern 'void cleanup(char *)'
end

s = LibSum.reverse("hello, world!")
puts s
LibSum.cleanup(s)
```
2015-06-10 22:37:38 +00:00
bors
db0c1cb13c Auto merge of #24689 - SimonSapin:formatter-write-char, r=alexcrichton
This is the logical next step after #24661, but I’m less sure about this one.

r? @alexcrichton
2015-06-10 21:02:08 +00:00
Simon Sapin
63da18b269 Have std::fmt::Formatter implement std::fmt::Write. 2015-06-10 22:06:18 +02:00
bors
ae8a3c92a7 Auto merge of #26182 - Manishearth:rollup, r=Manishearth
- Successful merges: #26142, #26143, #26145, #26146, #26164, #26174
- Failed merges:
2015-06-10 18:41:42 +00:00
Simon Sapin
15b028c585 Add a write_char method to std::fmt::Formatter.
This is the logical next step after #24661, but I’m less sure about this one.
2015-06-10 20:34:22 +02:00
Manish Goregaokar
c8519c9793 Rollup merge of #26174 - mcast:trpl-assignment-empty-tuple, r=steveklabnik
Doc patch for #26120.  Extra words here, because "value" is repeated.

I haven't read about whether/how it should go to stable (sorry), but I think it would help newcomers.

Thanks,
2015-06-10 22:07:10 +05:30
Manish Goregaokar
bd7a6ec8ec Rollup merge of #26164 - tafia:early-dedup, r=Gankro
No need to dedup if there is only 1 element in the vec, can early return
2015-06-10 22:07:10 +05:30
Manish Goregaokar
7d9427e6cd Rollup merge of #26146 - steveklabnik:remove_unsafe_pointer, r=Gankro
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-10 22:07:10 +05:30
Manish Goregaokar
ef089ff70d Rollup merge of #26145 - steveklabnik:gh25853, r=brson
Fixes #25853
2015-06-10 22:07:10 +05:30
Manish Goregaokar
32e96aa165 Rollup merge of #26143 - steveklabnik:gh25851, r=alexcrichton
Still some references left to this old term, I've updated them to say boxes.

Related to #25851
2015-06-10 22:07:09 +05:30
Manish Goregaokar
c84aff92b9 Rollup merge of #26142 - steveklabnik:gh25850, r=Gankro
Fixes #25850
2015-06-10 22:07:09 +05:30
Matthew Astley
aaf1983a56 mend bad Markdown 2015-06-10 16:16:03 +01:00
bors
d8a9570154 Auto merge of #26141 - eddyb:ast_map, r=nikomatsakis
Gets libsyntax one step closer to running on stable (see #24518).
Closes #24757, erickt's previous attempt at this.
2015-06-10 11:38:04 +00:00
bors
8025bc964c Auto merge of #26153 - dotdash:issue26127, r=luqmana
Fixes #26127
2015-06-10 10:05:39 +00:00
Matthew Astley
1ece005838 trpl: why (assignment == empty tuple) #26120 2015-06-10 11:02:31 +01:00
Ulrik Sverdrup
1112a05b8f collections: Remove redundant slicing for str
This is a remnant from a previous implementation of the str methods.
Using `self` is fine now.
2015-06-10 09:15:07 +02:00
Ulrik Sverdrup
d43bf53948 Add str::split_at
Implement RFC rust-lang/rfcs#1123

Add str method str::split_at(mid: usize) -> (&str, &str).
2015-06-10 09:15:07 +02:00
bors
6c5834d81b Auto merge of #26137 - steveklabnik:gh25623, r=alexcrichton
Fixes #25623

I am bad with BNF, so I may have messed this up, but that's what review is for!
2015-06-10 06:59:31 +00:00
bors
e954031ea2 Auto merge of #26130 - steveklabnik:gh25986, r=alexcrichton
This can be confusing when whitespace is the separator

Fixes #25986
2015-06-10 05:28:03 +00:00
bors
172cd83490 Auto merge of #26058 - Kimundi:issue15609, r=nikomatsakis
Closes #15609
2015-06-10 03:15:16 +00:00
Johann Tuffe
cb31373dc2 early return if 1 element
No need to dedup if there is only 1 element in the vec, can early return
2015-06-10 10:51:48 +08:00
bors
5ea3ed0fd0 Auto merge of #26055 - arielb1:smart-fold, r=nikomatsakis
Before:
581.72user 4.75system 7:42.74elapsed 126%CPU (0avgtext+0avgdata 1176224maxresident)k
llvm took 359.183

After:
550.63user 5.09system 7:20.28elapsed 126%CPU (0avgtext+0avgdata 1165516maxresident)k
llvm took 354.801
2015-06-10 01:44:59 +00:00
Eduard Burtescu
76eaed44d9 syntax: move ast_map to librustc. 2015-06-10 02:40:45 +03:00
bors
2228ce10c6 Auto merge of #25836 - steveklabnik:gh25305, r=alexcrichton
Fixes #25794
2015-06-09 23:11:25 +00:00
Björn Steinbrink
96bc00f30e Use the correct type of undef value for ignored return values in trans_named_tuple_constructor
Fixes #26127
2015-06-10 00:07:47 +02:00
bors
ac67354392 Auto merge of #26150 - steveklabnik:rollup, r=steveklabnik
- Successful merges: #26111, #26125, #26129, #26131, #26132, #26133, #26134, #26136, #26140, #26144
- Failed merges:
2015-06-09 21:36:03 +00:00
Steve Klabnik
6b6b380fd1 Rollup merge of #26144 - steveklabnik:static_doc_fix, r=alexcrichton
Fixes #25851

I am 99% sure this is true for all `static`s and not just `static mut`, yes?
2015-06-09 17:24:45 -04:00
Steve Klabnik
9bcae312a3 Rollup merge of #26140 - steveklabnik:gh25803, r=alexcrichton
As this example got changed, we stopped showing how to return self as
the first example, so this text is outdated.

Fixes #25803
2015-06-09 17:24:45 -04:00
Steve Klabnik
b38e9a73d4 Rollup merge of #26136 - steveklabnik:gh25597, r=alexcrichton
Fixes #25597
2015-06-09 17:24:44 -04:00
Steve Klabnik
d16906283a Rollup merge of #26134 - steveklabnik:gh25586, r=alexcrichton
After talking with @graydon on #rust-internals, this is hopefully clarifying.

Fixes #25586

@mkpankov, what do you think?
2015-06-09 17:24:44 -04:00
Steve Klabnik
496fe4d51a Rollup merge of #26133 - steveklabnik:gh25573, r=alexcrichton
This obscures more than it helps.

Fixes #25573
2015-06-09 17:24:44 -04:00
Steve Klabnik
8a55e5399f Rollup merge of #26132 - astraw:fix-demangle-comment, r=alexcrichton
Hi, I think the second example fails rule 3 described immediately above. This PR fixes that.
2015-06-09 17:24:44 -04:00
Steve Klabnik
91a9f82596 Rollup merge of #26131 - astraw:fix-trait-comment, r=alexcrichton
Hi, I think the comments are wrong in the example and this PR offers my suggested fix.
2015-06-09 17:24:43 -04:00
Steve Klabnik
67bb4e9356 Rollup merge of #26129 - steveklabnik:gh26012, r=brson
Fixes #26012
2015-06-09 17:24:43 -04:00
Steve Klabnik
c7de6aa342 Rollup merge of #26125 - nsimplex:master, r=steveklabnik
The text claimed 'any borrow must last for a _smaller_ scope than the
owner', however the accurate way of describing the comparison is
inclusive (i.e., 'less than or equal to' vs. 'less than').
2015-06-09 17:24:43 -04:00
Steve Klabnik
32c6deec07 Rollup merge of #26111 - tshepang:consistency, r=brson 2015-06-09 17:24:42 -04:00
Steve Klabnik
2c75256c15 Exise 'unsafe pointer' in favor of 'raw pointer'
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-09 16:49:24 -04:00
Steve Klabnik
34e5c24c5d make note of slicing syntax in TRPL: strings
Fixes #25853
2015-06-09 16:37:47 -04:00
Steve Klabnik
9db9449836 Make note about static and dtors
Fixes #25851
2015-06-09 16:30:39 -04:00
Steve Klabnik
a3cd5eb1bd Exise 'owned pointer' from the codebase
Still some references left to this old term, I've updated them to say boxes.

Related to #25851
2015-06-09 16:26:21 -04:00
Steve Klabnik
b242a86864 Mention that enum constructors are functions
Fixes #25850
2015-06-09 16:12:45 -04:00
bors
f06e026578 Auto merge of #26039 - SimonSapin:case-mapping, r=alexcrichton
* Add “complex” mappings to `char::to_lowercase` and `char::to_uppercase`, making them yield sometimes more than on `char`: #25800. `str::to_lowercase` and `str::to_uppercase` are affected as well.
* Add `char::to_titlecase`, since it’s the same algorithm (just different data). However this does **not** add `str::to_titlecase`, as that would require UAX#29 Unicode Text Segmentation which we decided not to include in of `std`: https://github.com/rust-lang/rfcs/pull/1054 I made `char::to_titlecase` immediately `#[stable]`, since it’s so similar to `char::to_uppercase` that’s already stable. Let me know if it should be `#[unstable]` for a while.
* Add a special case for upper-case Sigma in word-final position in `str::to_lowercase`: #26035. This is the only language-independent conditional mapping currently in `SpecialCasing.txt`.
* Stabilize `str::to_lowercase` and `str::to_uppercase`. The `&self -> String` on `str` signature seems straightforward enough, and the only relevant issue I’ve found is #24536 about naming. But `char` already has stable methods with the same name, and deprecating them for a rename doesn’t seem worth it.

r? @alexcrichton
2015-06-09 20:00:32 +00:00
Steve Klabnik
a95b48c2dd Fix some copyediting in TRPL: method-syntax
As this example got changed, we stopped showing how to return self as
the first example, so this text is outdated.

Fixes #25803
2015-06-09 15:49:57 -04:00
Steve Klabnik
6c452bebc5 Remove numbers all together from not_found.html 2015-06-09 15:47:48 -04:00
Steve Klabnik
a0b08f387b Explain interaction with if and | in patterns
Fixes #26012
2015-06-09 15:40:09 -04:00
Steve Klabnik
6bddfc9650 Fix up macro grammar
Fixes #25623
2015-06-09 15:26:51 -04:00
Steve Klabnik
e12c420522 Expand a bit on clone() in Dining Philosophers
Fixes #25597
2015-06-09 15:24:44 -04:00
Steve Klabnik
a9899a7353 Clarify confusing sentence in TRPL: FFI
After talking with @graydon on #rust-internals, this is hopefully clarifying.

Fixes #25586
2015-06-09 15:17:30 -04:00