]> git.lizzy.rs Git - rust.git/log
rust.git
10 years agoenable fp-elim when debug info is disabled
Daniel Micay [Tue, 28 Jan 2014 19:59:28 +0000 (14:59 -0500)]
enable fp-elim when debug info is disabled

This can almost be fully disabled, as it no longer breaks retrieving a
backtrace on OS X as verified by @alexcrichton. However, it still
breaks retrieving the values of parameters. This should be fixable in
the future via a proper location list...

Closes #7477

10 years agomk: remove -fno-omit-frame-pointer
Daniel Micay [Tue, 28 Jan 2014 14:31:59 +0000 (09:31 -0500)]
mk: remove -fno-omit-frame-pointer

This is still used for Rust code (`Options.NoFramePointerElim = true`).

10 years agoauto merge of #11718 : ktt3ja/rust/borrowck-error-msg, r=brson
bors [Fri, 24 Jan 2014 06:46:32 +0000 (22:46 -0800)]
auto merge of #11718 : ktt3ja/rust/borrowck-error-msg, r=brson

A mutable and immutable borrow place some restrictions on what you can
with the variable until the borrow ends. This commit attempts to convey
to the user what those restrictions are. Also, if the original borrow is
a mutable borrow, the error message has been changed (more specifically,
i. "cannot borrow `x` as immutable because it is also borrowed as
mutable" and ii. "cannot borrow `x` as mutable more than once" have
been changed to "cannot borrow `x` because it is already borrowed as
mutable").

In addition, this adds a (custom) span note to communicate where the
original borrow ends.

```rust
fn main() {
    match true {
        true => {
            let mut x = 1;
            let y = &x;
            let z = &mut x;
        }
        false => ()
    }
}

test.rs:6:21: 6:27 error: cannot borrow `x` as mutable because it is already borrowed as immutable
test.rs:6             let z = &mut x;
                              ^~~~~~
test.rs:5:21: 5:23 note: previous borrow of `x` occurs here; the immutable borrow prevents subsequent moves or mutable borrows of `x` until the borrow ends
test.rs:5             let y = &x;
                              ^~
test.rs:7:10: 7:10 note: previous borrow ends here
test.rs:3         true => {
test.rs:4             let mut x = 1;
test.rs:5             let y = &x;
test.rs:6             let z = &mut x;
test.rs:7         }
                  ^
```

```rust
fn foo3(t0: &mut &mut int) {
    let t1 = &mut *t0;
    let p: &int = &**t0;
}

fn main() {}

test.rs:3:19: 3:24 error: cannot borrow `**t0` because it is already borrowed as mutable
test.rs:3     let p: &int = &**t0;
                            ^~~~~
test.rs:2:14: 2:22 note: previous borrow of `**t0` as mutable occurs here; the mutable borrow prevents subsequent moves, borrows, or modification of `**t0` until the borrow ends
test.rs:2     let t1 = &mut *t0;
                       ^~~~~~~~
test.rs:4:2: 4:2 note: previous borrow ends here
test.rs:1 fn foo3(t0: &mut &mut int) {
test.rs:2     let t1 = &mut *t0;
test.rs:3     let p: &int = &**t0;
test.rs:4 }
          ^
```

For the "previous borrow ends here" note, if the span is too long (has too many lines), then only the first and last lines are printed, and the middle is replaced with dot dot dot:
```rust
fn foo3(t0: &mut &mut int) {
    let t1 = &mut *t0;
    let p: &int = &**t0;

}

fn main() {}

test.rs:3:19: 3:24 error: cannot borrow `**t0` because it is already borrowed as mutable
test.rs:3     let p: &int = &**t0;
                            ^~~~~
test.rs:2:14: 2:22 note: previous borrow of `**t0` as mutable occurs here; the mutable borrow prevents subsequent moves, borrows, or modification of `**t0` until the borrow ends
test.rs:2     let t1 = &mut *t0;
                       ^~~~~~~~
test.rs:7:2: 7:2 note: previous borrow ends here
test.rs:1 fn foo3(t0: &mut &mut int) {
...
test.rs:7 }
          ^
```

(Sidenote: the `span_end_note` currently also has issue #11715)

10 years agoauto merge of #11686 : mankyKitty/rust/rename-invert-to-flip-issue-10632, r=alexcrichton
bors [Fri, 24 Jan 2014 03:56:35 +0000 (19:56 -0800)]
auto merge of #11686 : mankyKitty/rust/rename-invert-to-flip-issue-10632, r=alexcrichton

Renamed the ```invert()``` function in ```iter.rs``` to ```flip()```, from #10632

Also renamed the ```Invert<T>``` type to ```Flip<T>```.

Some related code comments changed. Documentation that I could find has
been updated, and all the instances I could locate where the
function/type were called have been updated as well.

This is my first contribution to Rust! Apologies in advance if I've snarfed the
PR process, I'm not used to rebase.

I initially had issues with the ```codegen``` section of the tests failing, however
the ```make check``` process is not reporting any failures at this time. I think
that was a local env issue more than me facerolling my changes. :)

10 years agoauto merge of #11478 : klutzy/rust/rustpkg-crate-id, r=cmr
bors [Fri, 24 Jan 2014 01:31:44 +0000 (17:31 -0800)]
auto merge of #11478 : klutzy/rust/rustpkg-crate-id, r=cmr

This patchset consists of three parts:

- rustpkg doesn't guess crate version if it is not given by user.
- `rustpkg::version::Version` is replaced by `Option<~str>`.
  It removes some semantic versioning portions which is not currently used.
  (cc #8405 and #11396)
  `rustpkg::crate_id::CrateId` is also replaced by `syntax::crateid::CrateId`.
- rustpkg now computes hash to find crate, instead of manual filename parse.

cc @metajack

10 years agoauto merge of #11761 : alexcrichton/rust/epoll-eintr, r=alexcrichton
bors [Thu, 23 Jan 2014 23:36:56 +0000 (15:36 -0800)]
auto merge of #11761 : alexcrichton/rust/epoll-eintr, r=alexcrichton

10 years agoupdate llvm
aydin.kim [Thu, 23 Jan 2014 05:23:39 +0000 (14:23 +0900)]
update llvm

10 years agoBuild llvm-extract (needed by codegen tests)
Alex Crichton [Thu, 23 Jan 2014 23:11:53 +0000 (15:11 -0800)]
Build llvm-extract (needed by codegen tests)

10 years agoUpdate flip() to be rev().
Sean Chalmers [Thu, 23 Jan 2014 19:41:57 +0000 (20:41 +0100)]
Update flip() to be rev().

Consensus leaned in favour of using rev instead of flip.

10 years agoRename Invert to Flip - Issue 10632
Sean Chalmers [Mon, 20 Jan 2014 10:23:23 +0000 (11:23 +0100)]
Rename Invert to Flip - Issue 10632

Renamed the invert() function in iter.rs to flip().

Also renamed the Invert<T> type to Flip<T>.

Some related code comments changed. Documentation that I could find has
been updated, and all the instances I could locate where the
function/type were called have been updated as well.

10 years agoHandle EINTR in epoll for native timers
Alex Crichton [Thu, 23 Jan 2014 20:33:34 +0000 (12:33 -0800)]
Handle EINTR in epoll for native timers

10 years agoMake some borrow checker errors more user friendly
Kiet Tran [Wed, 22 Jan 2014 05:33:37 +0000 (00:33 -0500)]
Make some borrow checker errors more user friendly

A mutable and immutable borrow place some restrictions on what you can
with the variable until the borrow ends. This commit attempts to convey
to the user what those restrictions are. Also, if the original borrow is
a mutable borrow, the error message has been changed (more specifically,
i. "cannot borrow `x` as immutable because it is also borrowed as
mutable" and ii. "cannot borrow `x` as mutable more than once" have
been changed to "cannot borrow `x` because it is already borrowed as
mutable").

In addition, this adds a (custom) span note to communicate where the
original borrow ends.

10 years agoauto merge of #11739 : thestinger/rust/rm-old-ext, r=alexcrichton
bors [Thu, 23 Jan 2014 13:56:30 +0000 (05:56 -0800)]
auto merge of #11739 : thestinger/rust/rm-old-ext, r=alexcrichton

10 years agoauto merge of #11737 : alexcrichton/rust/issue-11729, r=thestinger
bors [Thu, 23 Jan 2014 11:51:29 +0000 (03:51 -0800)]
auto merge of #11737 : alexcrichton/rust/issue-11729, r=thestinger

Closes #11729

10 years agoauto merge of #11701 : FeGs/rust/stray-debug-in-metadata, r=alexcrichton
bors [Thu, 23 Jan 2014 09:31:39 +0000 (01:31 -0800)]
auto merge of #11701 : FeGs/rust/stray-debug-in-metadata, r=alexcrichton

When there is `println!` macro in the code, compiling is never end.

```rust
// print.rs
fn main() {
  println!("Hello!");
}
```

```bash
$ RUST_LOG=rustc rustc print.rs
```

And this is a part of output from stderr.

```bash
# ...
Looking up syntax::ast::DefId{crate: 1u32, node: 176234u32}
looking up syntax::ast::DefId{crate: 1u32, node: 176235u32} : extra::ebml::Doc<>{data: &[168u8, 16u8, 0u8, 0u8, 16u8, 51u8, 101u8, 53u8, 97u8, 101u8, 98u8, 56u8, 51u8, 55u8, 97u8, 101u8, 49u8, 54u8, 50u8
# ...
# vector which has infinite length.
```

* note : rust 0.9, 0.10-pre

10 years agoauto merge of #11682 : thestinger/rust/vector, r=brson
bors [Thu, 23 Jan 2014 07:26:33 +0000 (23:26 -0800)]
auto merge of #11682 : thestinger/rust/vector, r=brson

This is just an initial implementation and does not yet fully replace `~[T]`. A generic initialization syntax for containers is missing, and the slice functionality needs to be reworked to make auto-slicing unnecessary.

Traits for supporting indexing properly are also required. This also needs to be fixed to make ring buffers as easy to use as vectors.

The tests and documentation for `~[T]` can be ported over to this type when it is removed. I don't really expect DST to happen for vectors as having both `~[T]` and `Vec<T>` is overcomplicated and changing the slice representation to 3 words is not at all appealing. Unlike with traits, it's possible (and easy) to implement `RcSlice<T>` and `GcSlice<T>` without compiler help.

10 years agoauto merge of #11611 : SiegeLord/rust/exp_printing, r=alexcrichton
bors [Thu, 23 Jan 2014 06:01:40 +0000 (22:01 -0800)]
auto merge of #11611 : SiegeLord/rust/exp_printing, r=alexcrichton

Fixes #6593

Currently, Rust provides no way to print very large or very small floating point values which come up routinely in scientific and modeling work. The classical solution to this is to use the scientific/exponential notation, which not-coincidentally, corresponds to how floating point values are encoded in memory. Given this, there are two solutions to the problem. One is what, as far as I understand it, Python does. I.e. for floating point numbers in a certain range it does what we do today with the `'f'` formatting flag, otherwise it switches to exponential notation. The other way is to provide a set of formatting flags to explicitly choose the exponential notation, like it is done in C. I've chosen the second way as I think its important to provide that kind of control to the user.

This pull request changes the `std::num::strconv::float_to_str_common` function to optionally format floating point numbers using the exponential (scientific) notation. The base of the significant can be varied between 2 and 25, while the base of the exponent can be 2 or 10.

Additionally this adds two new formatting specifiers to `format!` and friends: `'e'` and `'E'` which switch between outputs like `1.0e5` and `1.0E5`. Mostly parroting C stdlib in this sense, although I wasn't going for an exact output match.

10 years agoauto merge of #11294 : alexcrichton/rust/native-timer, r=brson
bors [Thu, 23 Jan 2014 04:41:29 +0000 (20:41 -0800)]
auto merge of #11294 : alexcrichton/rust/native-timer, r=brson

Commit messages have the fun details

Closes #10925

10 years agohashmap: port to Vec<T>
Daniel Micay [Sat, 18 Jan 2014 12:33:41 +0000 (07:33 -0500)]
hashmap: port to Vec<T>

10 years agoadd new vector representation as a library
Daniel Micay [Tue, 21 Jan 2014 14:35:11 +0000 (09:35 -0500)]
add new vector representation as a library

10 years agovec: make unsafe indexing functions higher-level
Daniel Micay [Tue, 21 Jan 2014 14:34:42 +0000 (09:34 -0500)]
vec: make unsafe indexing functions higher-level

10 years agolibc: switch `free` to the proper signature
Daniel Micay [Tue, 21 Jan 2014 14:31:32 +0000 (09:31 -0500)]
libc: switch `free` to the proper signature

This does not attempt to fully propagate the mutability everywhere, but
gives new code a hint to avoid the same issues.

10 years agoImplement native timers
Alex Crichton [Sun, 29 Dec 2013 07:33:56 +0000 (23:33 -0800)]
Implement native timers

Native timers are a much hairier thing to deal with than green timers due to the
interface that we would like to expose (both a blocking sleep() and a
channel-based interface). I ended up implementing timers in three different ways
for the various platforms that we supports.

In all three of the implementations, there is a worker thread which does send()s
on channels for timers. This worker thread is initialized once and then
communicated to in a platform-specific manner, but there's always a shared
channel available for sending messages to the worker thread.

* Windows - I decided to use windows kernel timer objects via
  CreateWaitableTimer and SetWaitableTimer in order to provide sleeping
  capabilities. The worker thread blocks via WaitForMultipleObjects where one of
  the objects is an event that is used to wake up the helper thread (which then
  drains the incoming message channel for requests).

* Linux/(Android?) - These have the ideal interface for implementing timers,
  timerfd_create. Each timer corresponds to a timerfd, and the helper thread
  uses epoll to wait for all active timers and then send() for the next one that
  wakes up. The tricky part in this implementation is updating a timerfd, but
  see the implementation for the fun details

* OSX/FreeBSD - These obviously don't have the windows APIs, and sadly don't
  have the timerfd api available to them, so I have thrown together a solution
  which uses select() plus a timeout in order to ad-hoc-ly implement a timer
  solution for threads. The implementation is backed by a sorted array of timers
  which need to fire. As I said, this is an ad-hoc solution which is certainly
  not accurate timing-wise. I have done this implementation due to the lack of
  other primitives to provide an implementation, and I've done it the best that
  I could, but I'm sure that there's room for improvement.

I'm pretty happy with how these implementations turned out. In theory we could
drop the timerfd implementation and have linux use the select() + timeout
implementation, but it's so inaccurate that I would much rather continue to use
timerfd rather than my ad-hoc select() implementation.

The only change that I would make to the API in general is to have a generic
sleep() method on an IoFactory which doesn't require allocating a Timer object.
For everything but windows it's super-cheap to request a blocking sleep for a
set amount of time, and it's probably worth it to provide a sleep() which
doesn't do something like allocate a file descriptor on linux.

10 years agoremove old rc extension from detection files
Daniel Micay [Thu, 23 Jan 2014 01:36:08 +0000 (20:36 -0500)]
remove old rc extension from detection files

10 years agoRemove the initial and trailing blank doc-comment lines
SiegeLord [Fri, 17 Jan 2014 16:10:19 +0000 (11:10 -0500)]
Remove the initial and trailing blank doc-comment lines

10 years agoAdd some tests for the exponential notation
SiegeLord [Fri, 17 Jan 2014 02:54:50 +0000 (21:54 -0500)]
Add some tests for the exponential notation

10 years agoAdd LowerExp 'e' and UpperExp 'E' format traits/specifiers
SiegeLord [Fri, 17 Jan 2014 00:19:52 +0000 (19:19 -0500)]
Add LowerExp 'e' and UpperExp 'E' format traits/specifiers

10 years agofloat_to_str_bytes_common can now handle exponential notation
SiegeLord [Thu, 16 Jan 2014 23:24:03 +0000 (18:24 -0500)]
float_to_str_bytes_common can now handle exponential notation

10 years agoDon't fatally fail in driver::early_error
Alex Crichton [Wed, 22 Jan 2014 23:48:55 +0000 (15:48 -0800)]
Don't fatally fail in driver::early_error

Closes #11729

10 years agoImplement std::rt::at_exit
Alex Crichton [Mon, 30 Dec 2013 17:36:26 +0000 (09:36 -0800)]
Implement std::rt::at_exit

This routine is currently only used to clean up the timer helper thread in the
libnative implementation, but there are possibly other uses for this.

The documentation is clear that the procedures are *not* run with any task
context and hence have very little available to them. I also opted to disallow
at_exit inside of at_exit and just abort the process at that point.

10 years agoTypo in module tutorial
Ben Striegel [Wed, 22 Jan 2014 21:03:00 +0000 (16:03 -0500)]
Typo in module tutorial

10 years agoauto merge of #10943 : fhahn/rust/issue-7313-replace-c-types, r=alexcrichton
bors [Wed, 22 Jan 2014 19:06:24 +0000 (11:06 -0800)]
auto merge of #10943 : fhahn/rust/issue-7313-replace-c-types, r=alexcrichton

I've started working on a patch for #7313 . So far I tried to replace C types in `src/libstd/unstable/*` and related files.

So far, I have two questions. Is there a convention for passing pointers around in `std` as Rust types? Sometimes pointers are passed around as `*c_char` (which seems to be an `*i8`), `*c_void` or `*u8`, which leads to a lot of casts. E.g: [`exchange_malloc`](https://github.com/fhahn/rust/compare/issue-7313-replace-c-types?expand=1#diff-39f44b8c3f4496abab854b3425ac1617R60) used to return a `*c_char` but the function in turn only calls `malloc_raw` which returns a `*c_void`.
Is there a specific reason for this?

The second question is about `CString` and related functions like `with_c_str`. At the moment these functions use `*c_char*`. Should I replace it with `*u8` or keep it, because it's an wrapper around classical C strings?

10 years agoReplace C types with Rust types in libstd, closes #7313
Florian Hahn [Thu, 12 Dec 2013 21:27:26 +0000 (22:27 +0100)]
Replace C types with Rust types in libstd, closes #7313

10 years agorustpkg::crate_id: Remove CrateId
klutzy [Fri, 10 Jan 2014 15:22:06 +0000 (00:22 +0900)]
rustpkg::crate_id: Remove CrateId

There is no significant difference between `rustpkg::crate_id::CrateId`
and `syntax::crateid::CrateId`. rustpkg's one is replaced by syntax's
one.

10 years agorustpkg: Compute hash to find crate
klutzy [Fri, 10 Jan 2014 04:12:59 +0000 (13:12 +0900)]
rustpkg: Compute hash to find crate

Previously rustpkg tried to parse filenames to find crate. Now ue use
deterministic hashes, so it becomes possible to directly construct
filename and check if the file exists.

10 years agorustpkg::version: Remove enum Version
klutzy [Wed, 8 Jan 2014 05:09:48 +0000 (14:09 +0900)]
rustpkg::version: Remove enum Version

Currently rustpkg doesn't use SemanticVersion or Tagged, so they are
removed. Remaining variants are replaced by `Option<~str>`.

10 years agorustpkg: Do not guess version if not given
klutzy [Tue, 7 Jan 2014 05:39:13 +0000 (14:39 +0900)]
rustpkg: Do not guess version if not given

rustpkg accessed git repo to read tags and guess package version,
but it's not quite useful: version can be given explicitly by user,
and implicit guess may cause confusions.

10 years agoauto merge of #11727 : sanxiyn/rust/trailing-comma, r=alexcrichton
bors [Wed, 22 Jan 2014 17:21:25 +0000 (09:21 -0800)]
auto merge of #11727 : sanxiyn/rust/trailing-comma, r=alexcrichton

Fix #6506.
Fix #7358.

10 years agoAllow trailing commas in argument lists and tuple patterns
Seo Sanghyeon [Wed, 22 Jan 2014 16:55:53 +0000 (01:55 +0900)]
Allow trailing commas in argument lists and tuple patterns

10 years agorustc/metadata: Removed stray debug statements
Hong Chulju [Wed, 22 Jan 2014 10:38:20 +0000 (19:38 +0900)]
rustc/metadata: Removed stray debug statements

10 years agoauto merge of #11711 : alexcrichton/rust/issue-11683, r=brson
bors [Wed, 22 Jan 2014 08:51:20 +0000 (00:51 -0800)]
auto merge of #11711 : alexcrichton/rust/issue-11683, r=brson

There's lots of fun rationale in the comments of the diff.

Closes #11683

10 years agoauto merge of #11719 : brson/rust/bleh, r=alexcrichton
bors [Wed, 22 Jan 2014 06:06:20 +0000 (22:06 -0800)]
auto merge of #11719 : brson/rust/bleh, r=alexcrichton

10 years agoxfail another external macro test on android
Brian Anderson [Wed, 22 Jan 2014 05:52:35 +0000 (21:52 -0800)]
xfail another external macro test on android

10 years agoauto merge of #11500 : jhasse/rust/patch-rlib, r=alexcrichton
bors [Wed, 22 Jan 2014 01:26:14 +0000 (17:26 -0800)]
auto merge of #11500 : jhasse/rust/patch-rlib, r=alexcrichton

Currently `rustpkg` only looks for shared libraries. After this patch it also looks for `*.rlib` files.

10 years agoauto merge of #11129 : SimonSapin/rust/foo-vs-foo_opt, r=alexcrichton
bors [Tue, 21 Jan 2014 23:56:16 +0000 (15:56 -0800)]
auto merge of #11129 : SimonSapin/rust/foo-vs-foo_opt, r=alexcrichton

[On 2013-12-06, I wrote to the rust-dev mailing list](https://mail.mozilla.org/pipermail/rust-dev/2013-December/007263.html):

> Subject: Let’s avoid having both foo() and foo_opt()
>
> We have some functions and methods such as [std::str::from_utf8](http://static.rust-lang.org/doc/master/std/str/fn.from_utf8.html) that may succeed and give a result, or fail when the input is invalid.
>
> 1. Sometimes we assume the input is valid and don’t want to deal with the error case. Task failure works nicely.
>
> 2. Sometimes we do want to do something different on invalid input, so returning an `Option<T>` works best.
>
> And so we end up with both `from_utf8` and `from_utf8`. This particular case is worse because we also have `from_utf8_owned` and `from_utf8_owned_opt`, to cover everything.
>
> Multiplying names like this is just not good design. I’d like to reduce this pattern.
>
> Getting behavior 1. when you have 2. is easy: just call `.unwrap()` on the Option. I think we should rename every `foo_opt()` function or method to just `foo`, remove the old `foo()` behavior, and tell people (through documentation) to use `foo().unwrap()` if they want it back?
>
> The downsides are that unwrap is more verbose and gives less helpful error messages on task failure. But I think it’s worth it.

The email discussion has gone around long enough. Let’s discuss a concrete proposal. For the following functions or methods, I removed `foo` (that caused task failure) and renamed `foo_opt` (that returns `Option`) to just `foo`.

Vector methods:

* `get_opt` (rename only, `get` did not exist as it would have been just `[]`)
* `head_opt`
* `last_opt`
* `pop_opt`
* `shift_opt`
* `remove_opt`

`std::path::BytesContainer` method:

* `container_as_str_opt`

`std::str` functions:

* `from_utf8_opt`
* `from_utf8_owned_opt` (also remove the now unused `not_utf8` condition)

Is there something else that should recieve the same treatement?

I did not rename `recv_opt` on channels based on @brson’s [feedback](https://mail.mozilla.org/pipermail/rust-dev/2013-December/007270.html).

Feel free to pick only some of these commits.

10 years ago[std::str] Remove the now unused not_utf8 condition.
Simon Sapin [Mon, 23 Dec 2013 16:50:27 +0000 (17:50 +0100)]
[std::str] Remove the now unused not_utf8 condition.

10 years ago[std::str] Rename from_utf8_owned_opt() to from_utf8_owned(), drop the old from_utf8_...
Simon Sapin [Mon, 23 Dec 2013 16:45:01 +0000 (17:45 +0100)]
[std::str] Rename from_utf8_owned_opt() to from_utf8_owned(), drop the old from_utf8_owned() behavior

10 years ago[std::str] Rename from_utf8_opt() to from_utf8(), drop the old from_utf8() behavior
Simon Sapin [Mon, 23 Dec 2013 16:30:49 +0000 (17:30 +0100)]
[std::str] Rename from_utf8_opt() to from_utf8(), drop the old from_utf8() behavior

10 years ago[std::path] Rename .container_as_str_opt() to .container_as_str(), drop the old ...
Simon Sapin [Mon, 23 Dec 2013 16:15:53 +0000 (17:15 +0100)]
[std::path] Rename .container_as_str_opt() to .container_as_str(), drop the old .container_as_str() behavior

10 years ago[std::vec] Rename .remove_opt() to .remove(), drop the old .remove() behavior
Simon Sapin [Mon, 23 Dec 2013 15:53:20 +0000 (16:53 +0100)]
[std::vec] Rename .remove_opt() to .remove(), drop the old .remove() behavior

10 years ago[std::vec] Rename .shift_opt() to .shift(), drop the old .shift() behavior
Simon Sapin [Mon, 23 Dec 2013 15:40:42 +0000 (16:40 +0100)]
[std::vec] Rename .shift_opt() to .shift(), drop the old .shift() behavior

10 years ago[std::vec] Rename .pop_opt() to .pop(), drop the old .pop() behavior
Simon Sapin [Mon, 23 Dec 2013 15:20:52 +0000 (16:20 +0100)]
[std::vec] Rename .pop_opt() to .pop(), drop the old .pop() behavior

10 years ago[std::vec] Rename .last_opt() to .last(), drop the old .last() behavior
Simon Sapin [Mon, 23 Dec 2013 14:08:23 +0000 (15:08 +0100)]
[std::vec] Rename .last_opt() to .last(), drop the old .last() behavior

10 years ago[std::vec] Rename .head_opt() to .head(), drop the old .head() behavior
Simon Sapin [Mon, 23 Dec 2013 13:46:54 +0000 (14:46 +0100)]
[std::vec] Rename .head_opt() to .head(), drop the old .head() behavior

10 years ago[std::vec] Rename .get_opt() to .get()
Simon Sapin [Mon, 23 Dec 2013 13:38:02 +0000 (14:38 +0100)]
[std::vec] Rename .get_opt() to .get()

10 years agoauto merge of #11700 : bharrisau/rust/thumb, r=alexcrichton
bors [Tue, 21 Jan 2014 19:26:13 +0000 (11:26 -0800)]
auto merge of #11700 : bharrisau/rust/thumb, r=alexcrichton

To build for the cortex-M series ARM processors LLC needs to be told to build for the thumb instruction set. There are two ways to do this, either with the triple "thumb\*-\*-\*" or with -march=thumb (which just overrides the triple anyway). I chose the first way.

The following will fail because the local cc doesn't know what to do with -mthumb.
````
rustc test.rs --lib --target thumb-linux-eab
error: linking with `cc` failed: exit code: 1
note: cc: error: unrecognized command line option ‘-mthumb’
````

Changing the linker works as expected.
````
rustc test.rs --lib --target thumb-linux-eabi --linker arm-none-eabi-gcc
````

Ideally I'd have the triple thumb-none-eabi, but adding a new OS looks like much more work (and I'm not familiar enough with what it does to know if it is needed).

10 years agoauto merge of #11665 : alexcrichton/rust/zed-cleanup, r=brson
bors [Tue, 21 Jan 2014 18:06:18 +0000 (10:06 -0800)]
auto merge of #11665 : alexcrichton/rust/zed-cleanup, r=brson

* Stop using hardcoded numbers that have to all get updated when something changes (inevitable errors and rebase conflicts) as well as removes some unneeded -Z options (obsoleted over time).
* Remove `std::rt::borrowck`

10 years agoRemove no-debug-borrows from the makefiles
Alex Crichton [Tue, 21 Jan 2014 17:39:00 +0000 (09:39 -0800)]
Remove no-debug-borrows from the makefiles

10 years agoCapitalize debugging opts and make them u64
Alex Crichton [Mon, 20 Jan 2014 21:55:10 +0000 (13:55 -0800)]
Capitalize debugging opts and make them u64

10 years agoPurge borrowck from libstd
Alex Crichton [Sun, 19 Jan 2014 09:35:31 +0000 (01:35 -0800)]
Purge borrowck from libstd

This hasn't been in use since `@mut` was removed

10 years agoRemove obsoleted -Z options
Alex Crichton [Sun, 19 Jan 2014 09:19:02 +0000 (01:19 -0800)]
Remove obsoleted -Z options

* borrowck_note_pure - unused
* borrowck_note_loan - unused
* no_debug_borrows - unused
* lint_llvm - equivalent to -Z no-prepopulate-passes + --llvm-passes lint

10 years agoStop using hardcoded numbers for -Z options
Alex Crichton [Sun, 19 Jan 2014 09:17:54 +0000 (01:17 -0800)]
Stop using hardcoded numbers for -Z options

Instead use a macro and generate them!

10 years agoFlag all TLS functions as inline(never)
Alex Crichton [Tue, 21 Jan 2014 16:19:35 +0000 (08:19 -0800)]
Flag all TLS functions as inline(never)

There's lots of fun rationale in the comments of the diff.

Closes #11683

10 years agoauto merge of #11663 : huonw/rust/paren-lint, r=cmr
bors [Tue, 21 Jan 2014 12:26:15 +0000 (04:26 -0800)]
auto merge of #11663 : huonw/rust/paren-lint, r=cmr

The parens in `if (true) {}` are not necessary, so we'll warn about them.

cc #3070 and #11432

10 years agoRemove unnecessary parentheses.
Huon Wilson [Sun, 19 Jan 2014 08:21:14 +0000 (19:21 +1100)]
Remove unnecessary parentheses.

10 years agorustc: add lint for parens in if, while, match and return.
Huon Wilson [Sun, 19 Jan 2014 03:57:47 +0000 (14:57 +1100)]
rustc: add lint for parens in if, while, match and return.

The parens in `if (true) {}` are not not necessary, so we'll warn about
them.

10 years agoAdd support for ARM thumb architecture
Ben Harris [Tue, 21 Jan 2014 06:47:14 +0000 (14:47 +0800)]
Add support for ARM thumb architecture

10 years agoauto merge of #11699 : alexcrichton/rust/snapshot, r=huonw
bors [Tue, 21 Jan 2014 09:31:30 +0000 (01:31 -0800)]
auto merge of #11699 : alexcrichton/rust/snapshot, r=huonw

Upgrade the version to 0.10-pre

10 years agoauto merge of #11687 : sfackler/rust/macro-export-inner-crate, r=alexcrichton
bors [Tue, 21 Jan 2014 08:06:22 +0000 (00:06 -0800)]
auto merge of #11687 : sfackler/rust/macro-export-inner-crate, r=alexcrichton

It previously missed anything in an inner module.

10 years agoauto merge of #11684 : FlaPer87/rust/doc_typos, r=cmr
bors [Tue, 21 Jan 2014 06:46:20 +0000 (22:46 -0800)]
auto merge of #11684 : FlaPer87/rust/doc_typos, r=cmr

10 years agoauto merge of #11674 : indirect/rust/doc_file, r=alexcrichton
bors [Tue, 21 Jan 2014 05:26:22 +0000 (21:26 -0800)]
auto merge of #11674 : indirect/rust/doc_file, r=alexcrichton

Found out about `file!` today from o11c in IRC.

10 years agoauto merge of #11662 : alexcrichton/rust/faster-parens, r=huonw
bors [Tue, 21 Jan 2014 04:06:23 +0000 (20:06 -0800)]
auto merge of #11662 : alexcrichton/rust/faster-parens, r=huonw

The included test case would essentially never finish compiling without this
patch. It recursies twice at every ExprParen meaning that the branching factor
is 2^n

The included test case will take so long to parse on the old compiler that it'll
surely never let this crop up again.

10 years agoRegister new snapshots
Alex Crichton [Tue, 21 Jan 2014 03:42:50 +0000 (19:42 -0800)]
Register new snapshots

Upgrade the version to 0.10-pre

10 years agoauto merge of #11486 : Matthias247/rust/doc, r=cmr
bors [Tue, 21 Jan 2014 02:31:38 +0000 (18:31 -0800)]
auto merge of #11486 : Matthias247/rust/doc, r=cmr

I wrote a chapter for the FFI tutorial that describes how to perform callbacks from C code to Rust and gives some hints about what to consider and synchronization.

I just needed that for my own wrapper and thought it would be helpful for others.

10 years agoauto merge of #11653 : alexcrichton/rust/issue-11647, r=luqmana
bors [Tue, 21 Jan 2014 00:56:25 +0000 (16:56 -0800)]
auto merge of #11653 : alexcrichton/rust/issue-11647, r=luqmana

Closes #11647

10 years agoauto merge of #11675 : alexcrichton/rust/fix-snap, r=cmr
bors [Mon, 20 Jan 2014 23:26:27 +0000 (15:26 -0800)]
auto merge of #11675 : alexcrichton/rust/fix-snap, r=cmr

They need to read the metadata of cross-compiled crates, so the pretty things
need to have the right target.

10 years agoFix cross-compiled pretty tests
Alex Crichton [Mon, 20 Jan 2014 00:08:48 +0000 (16:08 -0800)]
Fix cross-compiled pretty tests

They need to read the metadata of cross-compiled crates, so the pretty things
need to have the right target.

10 years agoFix a pathological const checking case
Alex Crichton [Sun, 19 Jan 2014 08:00:39 +0000 (00:00 -0800)]
Fix a pathological const checking case

The included test case would essentially never finish compiling without this
patch. It recursies twice at every ExprParen meaning that the branching factor
is 2^n

The included test case will take so long to parse on the old compiler that it'll
surely never let this crop up again.

10 years agoauto merge of #11636 : alexcrichton/rust/purge-all-the-c, r=brson
bors [Mon, 20 Jan 2014 21:46:24 +0000 (13:46 -0800)]
auto merge of #11636 : alexcrichton/rust/purge-all-the-c, r=brson

This means we can purge even more C from src/rt!

10 years agorustuv: Re-work sockaddr glue to not use malloc
Alex Crichton [Sat, 18 Jan 2014 03:33:29 +0000 (19:33 -0800)]
rustuv: Re-work sockaddr glue to not use malloc

This means we can purge even more C from src/rt!

10 years agoDon't emit landing pads with -Z no-landing-pads
Alex Crichton [Sat, 18 Jan 2014 19:21:10 +0000 (11:21 -0800)]
Don't emit landing pads with -Z no-landing-pads

Closes #11647

10 years agoDisabled the tests for the new code blocks
Matthias Einwag [Mon, 20 Jan 2014 20:44:41 +0000 (21:44 +0100)]
Disabled the tests for the new code blocks

10 years agoauto merge of #11673 : omasanori/rust/sep-doc, r=alexcrichton
bors [Mon, 20 Jan 2014 19:41:29 +0000 (11:41 -0800)]
auto merge of #11673 : omasanori/rust/sep-doc, r=alexcrichton

10 years agoauto merge of #11664 : bjz/rust/identities, r=alexcrichton
bors [Mon, 20 Jan 2014 18:16:30 +0000 (10:16 -0800)]
auto merge of #11664 : bjz/rust/identities, r=alexcrichton

`Zero` and `One` have precise definitions in mathematics as the identities of the `Add` and `Mul` operations respectively. As such, types that implement these identities are now also required to implement their respective operator traits. This should reduce their misuse whilst still enabling them to be used in generalized algebraic structures (not just numbers). Existing usages of `#[deriving(Zero)]` in client code could break under these new rules, but this is probably a sign that they should have been using something like `#[deriving(Default)]` in the first place.

For more information regarding the mathematical definitions of the additive and multiplicative identities, see the following Wikipedia articles:

- http://wikipedia.org/wiki/Additive_identity
- http://wikipedia.org/wiki/Multiplicative_identity

Note that for floating point numbers the laws specified in the doc comments of `Zero::zero` and `One::one` may not always hold. This is true however for many other traits currently implemented by floating point numbers. What traits floating point numbers should and should not implement is an open question that is beyond the scope of this pull request.

The implementation of `std::num::pow` has been made more succinct and no longer requires `Clone`. The coverage of the associated unit test has also been increased to test for more combinations of bases, exponents, and expected results.

10 years agoScan the entire crate for exported macros
Steven Fackler [Mon, 20 Jan 2014 17:22:46 +0000 (09:22 -0800)]
Scan the entire crate for exported macros

It previously missed anything in an inner module.

10 years agoauto merge of #11670 : sfackler/rust/extctxt-span-note, r=alexcrichton
bors [Mon, 20 Jan 2014 16:41:30 +0000 (08:41 -0800)]
auto merge of #11670 : sfackler/rust/extctxt-span-note, r=alexcrichton

It was the only span_* missing.

10 years agoauto merge of #11661 : huonw/rust/fixed-length-instantiation, r=thestinger
bors [Mon, 20 Jan 2014 14:16:29 +0000 (06:16 -0800)]
auto merge of #11661 : huonw/rust/fixed-length-instantiation, r=thestinger

Previously, they were treated like ~[] and &[] (which can have length
0), but fixed length vectors are fixed length, i.e. we know at compile
time if it's possible to have length zero (which is only for [T, .. 0]).

Fixes #11659.

10 years agoauto merge of #11660 : sfackler/rust/quote-unused-sp, r=huonw
bors [Mon, 20 Jan 2014 12:11:32 +0000 (04:11 -0800)]
auto merge of #11660 : sfackler/rust/quote-unused-sp, r=huonw

The provided span isn't used in all cases (namely primitives).

10 years agoauto merge of #11657 : huonw/rust/less-lang-duplication, r=cmr
bors [Mon, 20 Jan 2014 10:31:42 +0000 (02:31 -0800)]
auto merge of #11657 : huonw/rust/less-lang-duplication, r=cmr

We can use a secondary macro to calculate the count from the information
we're already having to pass to the lang items macro.

10 years agoFix documentation typos
Flavio Percoco [Mon, 20 Jan 2014 10:16:24 +0000 (11:16 +0100)]
Fix documentation typos

10 years agoauto merge of #11656 : brson/rust/omgandroid, r=cmr
bors [Mon, 20 Jan 2014 09:11:35 +0000 (01:11 -0800)]
auto merge of #11656 : brson/rust/omgandroid, r=cmr

10 years agoauto merge of #11654 : korenchkin/rust/doc_guide-testing_format, r=cmr
bors [Mon, 20 Jan 2014 07:51:33 +0000 (23:51 -0800)]
auto merge of #11654 : korenchkin/rust/doc_guide-testing_format, r=cmr

10 years agoImprove std::num::pow implementation
Brendan Zabarauskas [Sun, 19 Jan 2014 13:39:05 +0000 (00:39 +1100)]
Improve std::num::pow implementation

The implementation has been made more succinct and no longer requires Clone. The coverage of the associated unit test has also been increased to check more combinations of bases, exponents, and expected results.

10 years agoAdd operator trait constraints to std::num::{Zero, One} and document their appropriat...
Brendan Zabarauskas [Sat, 18 Jan 2014 06:08:23 +0000 (17:08 +1100)]
Add operator trait constraints to std::num::{Zero, One} and document their appropriate use

Zero and One have precise definitions in mathematics. Documentation has been added to describe the appropriate uses for these traits and the laws that they should satisfy.

For more information regarding these identities, see the following wikipedia pages:

- http://wikipedia.org/wiki/Additive_identity
- http://wikipedia.org/wiki/Multiplicative_identity

10 years agoauto merge of #11652 : hdima/rust/base64-padding-newlines, r=alexcrichton
bors [Mon, 20 Jan 2014 06:31:42 +0000 (22:31 -0800)]
auto merge of #11652 : hdima/rust/base64-padding-newlines, r=alexcrichton

Ignore all newline characters in Base64 decoder to make it compatible with other Base64 decoders.

Most of the Base64 decoder implementations ignore all newline characters in the input string. There are some examples:

Python:

```python
>>> "
A
Q
=
=
".decode("base64")
'\x01'
```

Ruby:

```ruby
irb(main):001:0> "
A
Q
=
=
".unpack("m")
=> ["\ 1"]
```

Erlang:

```erlang
1> base64:decode("
A
Q
=
=
").
<<1>>
```

Moreover some Base64 encoders append newline character at the end of the output string by default:

Python:

```python
>>> "\ 1".encode("base64")
'AQ==
'
```

Ruby:

```ruby
irb(main):001:0> ["\ 1"].pack("m")
=> "AQ==
"
```

So I think it's fairly important for Rust Base64 decoder to accept Base64 inputs even with newline characters in the padding.

10 years agoauto merge of #11649 : FlaPer87/rust/pow, r=cmr
bors [Mon, 20 Jan 2014 03:46:35 +0000 (19:46 -0800)]
auto merge of #11649 : FlaPer87/rust/pow, r=cmr

There was an old and barely used implementation of pow, which expected
both parameters to be uint and required more traits to be implemented.
Since a new implementation for `pow` landed, I'm proposing to remove
this old impl in favor of the new one.

The benchmark shows that the new implementation is faster than the one being removed:

```
    test num::bench::bench_pow_function               ..bench:      9429 ns/iter (+/- 2055)
    test num::bench::bench_pow_with_uint_function     ...bench:     28476 ns/iter (+/- 2202)
```

10 years agoauto merge of #10801 : musitdev/rust/jsondoc2, r=cmr
bors [Mon, 20 Jan 2014 02:21:39 +0000 (18:21 -0800)]
auto merge of #10801 : musitdev/rust/jsondoc2, r=cmr

I update the example of json use to the last update of the json.rs code. I delete the old branch.
From my last request, I remove the example3 because it doesn't compile. I don't understand why and I don't have the time now to investigate.

10 years agoauto merge of #11644 : huonw/rust/less-fatality, r=cmr
bors [Mon, 20 Jan 2014 00:56:40 +0000 (16:56 -0800)]
auto merge of #11644 : huonw/rust/less-fatality, r=cmr

This means that compilation continues for longer, and so we can see more
errors per compile. This is mildly more user-friendly because it stops
users having to run rustc n times to see n macro errors: just run it
once to see all of them.

10 years agoauto merge of #11643 : kballard/rust/path-root-path, r=erickt
bors [Sun, 19 Jan 2014 23:31:57 +0000 (15:31 -0800)]
auto merge of #11643 : kballard/rust/path-root-path, r=erickt

10 years agodocument file!
Andre Arko [Sun, 19 Jan 2014 23:15:57 +0000 (15:15 -0800)]
document file!