Commit Graph

24102 Commits

Author SHA1 Message Date
Seo Sanghyeon 9028330f39 Take &Pat in visit_pat 2013-11-26 03:22:21 +09:00
bors 679a2c042f auto merge of #10653 : thestinger/rust/meaningless, r=huonw 2013-11-25 10:16:42 -08:00
bors f1bec46e15 auto merge of #10648 : sfackler/rust/base64-test, r=alexcrichton
We want a 1000 element array, not a 2 element array
2013-11-25 06:56:40 -08:00
Seo Sanghyeon eb5cbfebfd Take &Pat 2013-11-25 23:37:03 +09:00
Seo Sanghyeon cd7a9b7234 Remove arms_have_move_bindings 2013-11-25 23:36:20 +09:00
bors fffacb34fe auto merge of #10646 : alexcrichton/rust/issue-10645, r=luqmana
This is a behavioral difference in libuv between different platforms in
different situations. It turns out that libuv on windows will immediately
allocate a buffer instead of waiting for data to be ready. What this implies is
that we must have our custom data set on the handle before we call
uv_read_start.

I wish I knew of a way to test this, but this relies to being on the windows
platform *and* reading from a true TTY handle which only happens when this is
actually attached to a terminal. I have manually verified this works.

Closes #10645
2013-11-25 05:46:37 -08:00
Daniel Micay 07e21c3c8c rm #[mutable_doc] 2013-11-25 07:44:47 -05:00
bors 1746c0269d auto merge of #10644 : cmr/rust/rustdoc_cfg, r=alexcrichton
Closes #10623
2013-11-25 03:42:40 -08:00
Niko Matsakis ce44094bbb Add [mut_]shift_ref/[mut_]pop_ref functions, which return a pointer to the first/last item in the slice and modify the slice to exclude the returned item. Useful when writing iterators over mutable references. 2013-11-25 06:41:26 -05:00
bors 40439516ec auto merge of #10643 : jorendorff/rust/master, r=alexcrichton 2013-11-25 02:27:01 -08:00
bors 55201ed858 auto merge of #10628 : huonw/rust/3614, r=alexcrichton
Fixes #3614.
2013-11-25 01:12:36 -08:00
Huon Wilson e36cb0d5c1 syntax: parse inner attributes on impls.
Fixes #3614.
2013-11-25 19:18:44 +11:00
Steven Fackler 98f47aa67d Fix typo in base64 test
We want a 1000 element array, not a 2 element array
2013-11-25 00:10:31 -08:00
bors ce32f72f1d auto merge of #10641 : cmr/rust/close_delims, r=alexcrichton
Currently, the parser doesn't give any context when it finds an unclosed
delimiter and it's not EOF. Report the most recent unclosed delimiter, to help
the user along.

Closes #10636
2013-11-24 23:56:46 -08:00
bors 07ad0ccadc auto merge of #10635 : alexcrichton/rust/issue-10626, r=cmr
This is both useful for performance (otherwise logging is unbuffered), but also
useful for correctness. Because when a task is destroyed we can't block the task
waiting for the logger to close, loggers are opened with a 'CloseAsynchronously'
specification. This causes libuv do defer the call to close() until the next
turn of the event loop.

If you spin in a tight loop around printing, you never yield control back to the
libuv event loop, meaning that you simply enqueue a large number of close
requests but nothing is actually closed. This queue ends up never getting
closed, meaning that if you keep trying to create handles one will eventually
fail, which the runtime will attempt to print the failure, causing mass
destruction.

Caching will provide better performance as well as prevent creation of too many
handles.

Closes #10626
2013-11-24 22:47:10 -08:00
Jed Davis 8624d5b186 Represent C-like enums with a plain LLVM integer, not a struct.
This is needed so that the FFI works as expected on platforms that don't
flatten aggregates the way the AMD64 ABI does, especially for `#[repr(C)]`.

This moves more of `type_of` into `trans::adt`, because the type might
or might not be an LLVM struct.
2013-11-24 22:44:48 -08:00
Andreas Ots 20233b9848 std: IPv6 addresses are represented as eight groups of four HEXADECIMAL digits 2013-11-25 08:44:04 +02:00
Alex Crichton 6acf227cc8 Set uv's custom data before uv_read_start
This is a behavioral difference in libuv between different platforms in
different situations. It turns out that libuv on windows will immediately
allocate a buffer instead of waiting for data to be ready. What this implies is
that we must have our custom data set on the handle before we call
uv_read_start.

I wish I knew of a way to test this, but this relies to being on the windows
platform *and* reading from a true TTY handle which only happens when this is
actually attached to a terminal. I have manually verified this works.

Closes #10645
2013-11-24 21:47:13 -08:00
bors 2cc1e16ac0 auto merge of #10603 : alexcrichton/rust/no-linked-failure, r=brson
The reasons for doing this are:

* The model on which linked failure is based is inherently complex
* The implementation is also very complex, and there are few remaining who
  fully understand the implementation
* There are existing race conditions in the core context switching function of
  the scheduler, and possibly others.
* It's unclear whether this model of linked failure maps well to a 1:1 threading
  model

Linked failure is often a desired aspect of tasks, but we would like to take a
much more conservative approach in re-implementing linked failure if at all.

Closes #8674
Closes #8318
Closes #8863
2013-11-24 21:32:13 -08:00
Alex Crichton 9fe8fc8836 Cache a task's stderr logger
This is both useful for performance (otherwise logging is unbuffered), but also
useful for correctness. Because when a task is destroyed we can't block the task
waiting for the logger to close, loggers are opened with a 'CloseAsynchronously'
specification. This causes libuv do defer the call to close() until the next
turn of the event loop.

If you spin in a tight loop around printing, you never yield control back to the
libuv event loop, meaning that you simply enqueue a large number of close
requests but nothing is actually closed. This queue ends up never getting
closed, meaning that if you keep trying to create handles one will eventually
fail, which the runtime will attempt to print the failure, causing mass
destruction.

Caching will provide better performance as well as prevent creation of too many
handles.

Closes #10626
2013-11-24 21:22:19 -08:00
Alex Crichton acca9e3834 Remove linked failure from the runtime
The reasons for doing this are:

* The model on which linked failure is based is inherently complex
* The implementation is also very complex, and there are few remaining who
  fully understand the implementation
* There are existing race conditions in the core context switching function of
  the scheduler, and possibly others.
* It's unclear whether this model of linked failure maps well to a 1:1 threading
  model

Linked failure is often a desired aspect of tasks, but we would like to take a
much more conservative approach in re-implementing linked failure if at all.

Closes #8674
Closes #8318
Closes #8863
2013-11-24 21:21:12 -08:00
Corey Richardson 6fbe2a0c8b rustdoc: pass through --cfg to rustc
Closes #10623
2013-11-24 23:33:44 -05:00
Jason Orendorff a7c1a4a985 Fix spelling of "vacuum" in one of the abort quotes. 2013-11-24 22:29:48 -06:00
bors ca3274336e auto merge of #10639 : jix/rust/fix_find_mut_in_trie, r=thestinger
Make TrieMap/TrieSet's find_mut check the key for external nodes.
Without this find_mut sometimes returns a reference to another key when
querying for a non-present key.
2013-11-24 20:22:03 -08:00
bors 09eca11805 auto merge of #10637 : luqmana/rust/nmt, r=cmr
There's no need for it to be @mut.
2013-11-24 19:07:44 -08:00
Corey Richardson ab19861037 Add a note for unclosed delimiters
Currently, the parser doesn't give any context when it finds an unclosed
delimiter and it's not EOF. Report the most recent unclosed delimiter, to help
the user along.

Closes #10636
2013-11-24 21:32:38 -05:00
bors 861cced119 auto merge of #10600 : ktt3ja/rust/add-doc, r=huonw
I received a lot of helpful explanations when I was going through rustc's middle-end code. I document some of them here.
2013-11-24 16:46:50 -08:00
Kiet Tran 9a4c8da501 Add comments to ast, ast_map, ty, and pat_util 2013-11-24 18:38:41 -05:00
Luqman Aden 2431ac3080 libextra: Remove @mut from term. 2013-11-24 18:22:50 -05:00
Jannis Harder 525878fc96 std::trie: Fix find_mut for non-present keys
Make TrieMap/TrieSet's find_mut check the key for external nodes.
Without this find_mut sometimes returns a reference to another key when
querying for a non-present key.
2013-11-25 00:09:40 +01:00
bors b3ff24adaa auto merge of #10475 : astrieanna/rust/issue8763, r=alexcrichton
Issue #8763 is about improving a particular error message.

* added case & better error message for "impl trait for module"
* added compile-fail test trait-impl-for-module.rs
* updated copyright dates
* revised compile-fail test trait-or-new-type-instead
   (the error message for the modified test is still unclear, but that's a different bug https://github.com/mozilla/rust/issues/8767)
2013-11-24 10:17:03 -08:00
Leah Hanson e1d1ad34f7 Fix issue #8763
* added case & better error message for "impl trait for module"
* used better way to print the module
* switched from //error-pattern to //~ ERROR
* added compile-fail test trait-impl-for-module.rs
* revised compile-fail test trait-or-new-type-instead
    (the error message for the modified test is still unclear, but that's a different bug)
* added FIXME to trait-or-new-type-instead
2013-11-24 11:14:27 -06:00
bors 01b5381703 auto merge of #10634 : LeoTestard/rust/rc-eq, r=cmr 2013-11-24 08:42:35 -08:00
Léo Testard fdac9e470c Implement cmp traits for Rc<T> and add a ptr_eq method. 2013-11-24 17:29:44 +01:00
bors ae91b81a6f auto merge of #10633 : cmr/rust/linker_opts, r=thestinger
r? @Luqmana
2013-11-24 05:56:28 -08:00
Corey Richardson a8a6188a1a Use -O1 for non-GNU linkers 2013-11-24 08:50:16 -05:00
klutzy 472b618248 std::rt: Fix crate_map on Win64 2013-11-24 19:15:09 +09:00
klutzy a130861d31 std::rt: Fix record_stack_bounds on win64 2013-11-24 19:15:09 +09:00
klutzy 52c8c1daba llvm: Disable pthreads on mingw-w64 platforms 2013-11-24 19:15:08 +09:00
klutzy 561277d791 std: Fix transmute error on win64 2013-11-24 19:15:05 +09:00
klutzy e1091fd412 std::libc: Simplify win32/win64 type definitions 2013-11-24 19:08:41 +09:00
klutzy 8d990c3aaf std::libc: Remove TCHAR types 2013-11-24 19:08:40 +09:00
bors ce45bb7f44 auto merge of #10625 : huonw/rust/json-errors, r=alexcrichton
Fixes #4244.
2013-11-24 01:26:30 -08:00
bors 738eb9b930 auto merge of #10620 : cmr/rust/linker_opts, r=thestinger 2013-11-23 23:56:30 -08:00
bors 9ba473f86f auto merge of #10578 : luqmana/rust/mingw64, r=alexcrichton
With these changes I was able to cross compile for windows from a linux box. (Using the mingw-w64 package on Debian Testing).

Fixed a bug where the `target_family` cfg would be wrong when targeting something with a different value than the host. (i.e windows -> unix or unix -> windows).

Also, removed `LIBUV_FLAGS` in `mk/rt.mk` because of the redundancy between it and `CFG_GCCISH_CFLAGS_(target)`.

After this we can create a snapshot and migrate to mingw64 instead of mingw32.
2013-11-23 21:36:50 -08:00
bors 33375a31e8 auto merge of #10514 : sfackler/rust/mut, r=cmr
This is based off of @blake2-ppc's work on #9429. That PR bitrotted and I haven't been able to contact the original author so I decided to take up the cause.

Overview
======
`Mut` encapsulates a mutable, non-nullable slot. The `Cell` type is currently used to do this, but `Cell` is much more commonly used as a workaround for the inability to move values into non-once functions. `Mut` provides a more robust API.

`Mut` duplicates the semantics of borrowed pointers with enforcement at runtime instead of compile time.
```rust
let x = Mut::new(0);

{
    // make some immutable borrows
    let p = x.borrow();
    let y = *p.get() + 10;

    // multiple immutable borrows are allowed simultaneously
    let p2 = x.borrow();

    // this would throw a runtime failure
    // let p_mut = x.borrow_mut();
}

// now we can mutably borrow
let p = x.borrow_mut();
*p.get() = 10;
```
`borrow` returns a `Ref` type and `borrow_mut` returns a `RefMut` type, both of which are simple smart pointer types with a single method, `get`, which returns a reference to the wrapped data.

This also allows `RcMut<T>` to be deleted, as it can be replaced with `Rc<Mut<T>>`.

Changes
======
I've done things a little bit differently than the original proposal.

* I've added `try_borrow` and `try_borrow_mut` methods that return `Option<Ref<T>>` and `Option<RefMut<T>>` respectively instead of failing on a borrow check failure. I'm not totally sure when that'd be useful, but I don't see any reason to not put them in and @cmr requested them.
* `ReadPtr` and `WritePtr` have been renamed to `Ref` and `RefMut` respectively, as `Ref` is to `ref foo` and `RefMut` is to `ref mut foo` as `Mut` is to `mut foo`.
* `get` on `MutRef` now takes `&self` instead of `&mut self` for consistency with `&mut`. As @alexcrichton pointed, out this violates soundness by allowing aliasing `&mut` references.
* `Cell` is being left as is. It solves a different problem than `Mut` is designed to solve.
* There are no longer methods implemented for `Mut<Option<T>>`. Since `Cell` isn't going away, there's less of a need for these, and I didn't feel like they provided a huge benefit, especially as that kind of `impl` is very uncommon in the standard library.

Open Questions
============
* `Cell` should now be used exclusively for movement into closures. Should this be enforced by reducing its API to `new` and `take`? It seems like this use case will be completely going away once the transition to `proc` and co. finishes.
* Should there be `try_map` and `try_map_mut` methods along with `map` and `map_mut`?
2013-11-23 20:01:42 -08:00
Huon Wilson b052f28fd6 extra: improve the errors for the JSON Decoder.
Fixes #4244.
2013-11-24 10:34:27 +11:00
Steven Fackler bdfaf04bd5 Move mutable::Mut to cell::RefCell 2013-11-23 13:45:05 -08:00
Corey Richardson 672549372c Use linker optimizations on Linux 2013-11-23 10:03:41 -05:00
Luqman Aden ae5a13d643 Use CXX not CC for linking. 2013-11-23 04:49:16 -05:00