Commit Graph

35026 Commits

Author SHA1 Message Date
Niko Matsakis
d7bb01eb52 Use the quick reject mechanism during trait matching as well. Seems to
yield an incremental improvement (type-checking rustc drops from ~9s
to ~8s).
2014-11-17 14:25:11 -05:00
Niko Matsakis
d93921b348 Port a simplified versions of pcwalton's "quick reject" mechanism for quickly throwing out method candidates. Yields a 40%-50% improvement in typechecking time as well as lowering peak memory use from 2.2GB to 1.8GB (due to creating fewer types).
Conflicts:
	src/librustc/driver/config.rs
	src/librustc/middle/ty.rs
	src/librustc/middle/typeck/check/method.rs
	src/librustc/middle/typeck/check/mod.rs
	src/librustc/middle/typeck/coherence/mod.rs
2014-11-17 14:25:11 -05:00
Niko Matsakis
0ed0a4633b Correct indentation 2014-11-17 14:25:11 -05:00
Niko Matsakis
70aecde11d Correct long line 2014-11-17 14:25:11 -05:00
Niko Matsakis
e691192042 Substitute type/lifetimeInstatiate method type/early-bound lifetime parameters too when creating xform-self-type.
Fixes #18208.
2014-11-17 14:25:11 -05:00
Niko Matsakis
f8403aac81 Rewrite method resolution to be cleaner, more correct, and to lay
groundwork for better performance.

Key points:

- Separate out determining which method to use from actually selecting
  a method (this should enable caching, as well as the pcwalton fast-reject strategy).
- Merge the impl selection back into method resolution and don't rely on
  trait matching (this should perform better but also is needed to resolve some
  kind of conflicts, see e.g. `method-two-traits-distinguished-via-where-clause.rs`)
- Purge a lot of out-of-date junk and coercions from method lookups.
2014-11-17 14:25:11 -05:00
bors
f09279395b auto merge of #18973 : sfackler/rust/enum-namespace-pt2, r=pcwalton
This breaks code that referred to variant names in the same namespace as
their enum. Reexport the variants in the old location or alter code to
refer to the new locations:

```
pub enum Foo {
    A,
    B
}

fn main() {
    let a = A;
}
```
=>
```
pub use self::Foo::{A, B};

pub enum Foo {
    A,
    B
}

fn main() {
    let a = A;
}
```
or
```
pub enum Foo {
    A,
    B
}

fn main() {
    let a = Foo::A;
}
```

[breaking-change]
2014-11-17 17:22:06 +00:00
Gleb Kozyrev
8b16ccdd7b Return proper errors with update_err 2014-11-17 19:18:26 +02:00
Gleb Kozyrev
b7908febca Remove duplicate code by using util::copy() 2014-11-17 19:18:26 +02:00
Victor Berger
55200504f0 Don't inherit stability to items in a function body.
Items defined in the body of a function has no visibility
outside it, and thus have no reason to be marked with
stability attributes.

Closes #17488
2014-11-17 18:14:42 +01:00
Ivan Ukhov
5a12cb8e56 Bring back the dylib kind of the link attribute 2014-11-17 18:00:30 +01:00
Steven Fackler
3dcd215740 Switch to purely namespaced enums
This breaks code that referred to variant names in the same namespace as
their enum. Reexport the variants in the old location or alter code to
refer to the new locations:

```
pub enum Foo {
    A,
    B
}

fn main() {
    let a = A;
}
```
=>
```
pub use self::Foo::{A, B};

pub enum Foo {
    A,
    B
}

fn main() {
    let a = A;
}
```
or
```
pub enum Foo {
    A,
    B
}

fn main() {
    let a = Foo::A;
}
```

[breaking-change]
2014-11-17 07:35:51 -08:00
bors
88c743def3 auto merge of #19007 : huonw/rust/more-marker-impls, r=alexcrichton
Useful for #[deriving].
2014-11-17 14:22:03 +00:00
oli-obk
70bf4f72ef libgraphviz: Id::new returns Result<Id, ()> instead of panicking on error
creating a new Id object requires the format to match a subset of `ID` format defined by the DOT language. When the format did not match, the function called assert. This was not mentioned in the docs or the spec. I made the failure explicit by returning an Result<Id, ()>.
2014-11-17 15:08:25 +01:00
bors
0047dbe59c auto merge of #19027 : nick29581/rust/coercions-4, r=alexcrichton
The forwards compatible parts of #18645, rebased. Converts implicit coercions from `[T, ..n]` to `&[T]` into explicit references.
2014-11-17 11:22:00 +00:00
Nick Cameron
ca08540a00 Fix fallout from coercion removal 2014-11-17 22:41:33 +13:00
Andrew Cann
197a0ac481 change return type of slice_shift_char
`slice_shift_char` splits a `str` into it's leading `char` and the remainder
of the `str`. Currently, it returns a `(Option<char>, &str)` such that:

    "bar".slice_shift_char() => (Some('b'), "ar")
    "ar".slice_shift_char()  => (Some('a'), "r")
    "r".slice_shift_char()   => (Some('r'), "")
    "".slice_shift_char()    => (None,      "")

This is a little odd. Either a `str` can be split into both a head and a
tail or it cannot. So the return type should be `Option<(char, &str)>`.
With the current behaviour, in the case of the empty string, the `str`
returned is meaningless - it is always the empty string.

This commit changes slice_shift_char so that:

    "bar".slice_shift_char() => Some(('b', "ar"))
    "ar".slice_shift_char()  => Some(('a', "r"))
    "r".slice_shift_char()   => Some(('r', ""))
    "".slice_shift_char()    => None

[breaking-change]
2014-11-17 17:35:18 +08:00
bors
edfb83c9e2 auto merge of #18914 : Gankro/rust/cloned, r=aturon
Part of #18424. r? @aturon 

[breaking-change]
2014-11-17 09:26:57 +00:00
Alexis Beingessner
8c467f75e3 slightly better deprecation message for fn syntax 2014-11-17 00:42:56 -05:00
Alfie John
9a5237d7ae doc: extend a893397 to make whole document consistent 2014-11-17 05:15:24 +00:00
Roy Crihfield
f3bd844d2a rust-mode.el: Tweak syntax table
"_" should keep the default syntax class (symbol, not word). This
allows, e.g., `forward-word' to behave in the familiar way, jumping to
underscores within a function or variable name.
2014-11-16 21:42:57 -06:00
Tom Jakubowski
8000482e86 Disallow parsing of struct variants with 0 fields
Make struct variant syntax more consistent with struct syntax and fix an
assert in middle::typeck.

Fix #19003
2014-11-16 19:10:47 -08:00
bors
803aacd5ae auto merge of #18927 : areski/rust/pr-improve-option-match-readl, r=jakub-
**match** are much more easy to read when it's not in 1 single line
2014-11-17 02:56:55 +00:00
Alex Gaynor
1128a7f08f Fixed a few typos in libcore 2014-11-16 16:51:22 -08:00
bors
0b7b4f075a auto merge of #18747 : csherratt/rust/ringbuf-remove-option, r=huonw
Fix for task in Metabug #18009 (Rebased version of https://github.com/rust-lang/rust/pull/18170)

This changes much of about how RingBuf functions. `lo`, `nelts` are replaced by a more traditional `head` and`tail`. The `Vec<Option<T>>` is replaced by a bare pointer that is managed by the `RingBuf` itself. This also expects the ring buffer to always be size that is a power of 2.

This change also includes a number of new tests to cover the some areas that could be of concern with manual memory management.

The benchmarks have been reworked since the old ones were benchmarking of the Ring buffers growth rather then the actual test.

The unit test suite have been expanded, and exposed some bugs in `fn get()` and `fn get_mut()`

## Benchmark
**Before:**
```
test ring_buf::tests::bench_grow_1025                      ... bench:      8919 ns/iter (+/- 87)
test ring_buf::tests::bench_iter_1000                      ... bench:       924 ns/iter (+/- 28)
test ring_buf::tests::bench_mut_iter_1000                  ... bench:       918 ns/iter (+/- 6)
test ring_buf::tests::bench_new                            ... bench:        15 ns/iter (+/- 0)
test ring_buf::tests::bench_pop_100                        ... bench:       294 ns/iter (+/- 9)
test ring_buf::tests::bench_pop_front_100                  ... bench:       948 ns/iter (+/- 32)
test ring_buf::tests::bench_push_back_100                  ... bench:       291 ns/iter (+/- 16)
test ring_buf::tests::bench_push_front_100                 ... bench:       311 ns/iter (+/- 27
```
**After:**
```
test ring_buf::tests::bench_grow_1025                      ... bench:      2209 ns/iter (+/- 169)
test ring_buf::tests::bench_iter_1000                      ... bench:       534 ns/iter (+/- 27)
test ring_buf::tests::bench_mut_iter_1000                  ... bench:       515 ns/iter (+/- 28)
test ring_buf::tests::bench_new                            ... bench:        11 ns/iter (+/- 0)
test ring_buf::tests::bench_pop_100                        ... bench:       170 ns/iter (+/- 5)
test ring_buf::tests::bench_pop_front_100                  ... bench:       171 ns/iter (+/- 11)
test ring_buf::tests::bench_push_back_100                  ... bench:       172 ns/iter (+/- 13)
test ring_buf::tests::bench_push_front_100                 ... bench:       158 ns/iter (+/- 12)

```
2014-11-16 22:36:50 +00:00
Huon Wilson
f97524387d Implement more basic traits for the marker types. 2014-11-17 09:25:49 +11:00
bors
245c7fbef5 auto merge of #18995 : alfie/rust/comment-docs, r=aturon
Start comment is a string literal while end comment is made up of two character literals. This change is to make them consistent.
2014-11-16 20:32:12 +00:00
bors
aad75471fd auto merge of #18994 : sfackler/rust/struct-variants-pt2, r=jakub-
Struct variant field visibility is now inherited. Remove `pub` keywords
from declarations.

Closes #18641

[breaking-change]

r? @alexcrichton
2014-11-16 18:27:10 +00:00
Alex Gaynor
33345dae0c Fixed several typos in libcollections 2014-11-16 08:28:13 -08:00
Alexis Beingessner
dfb7a811ae fallout from deprecating find_copy and get_copy 2014-11-16 10:40:25 -05:00
Alexis Beingessner
64efd2650c Deprecate hashmap's find_copy and get_copy in favour of cloned and clone 2014-11-16 10:40:23 -05:00
Alexis Beingessner
04f7b690ba implement cloned for Option 2014-11-16 10:39:03 -05:00
bors
321488b675 auto merge of #18752 : jakub-/rust/remove-unit, r=eddyb
Closes https://github.com/rust-lang/rust/issues/18614.
2014-11-16 14:27:08 +00:00
Jakub Bukaj
c425ed2a8d Update the reference 2014-11-16 14:23:15 +01:00
Jakub Bukaj
28b1b2ec39 Update tests accordingly 2014-11-16 14:23:15 +01:00
Jakub Bukaj
eb01b17b06 Complete the removal of ty_nil, ast::LitNil, ast::TyBot and ast::TyUniq
[breaking-change]

This will break any uses of macros that assumed () being a valid literal.
2014-11-16 14:23:15 +01:00
Niko Matsakis
08d6774f39 Try to remove ty_nil, some kind of error in exhaustiveness checking 2014-11-16 14:23:14 +01:00
bors
0c7a3d6c16 auto merge of #18978 : jakub-/rust/roll-up, r=cmr 2014-11-16 11:27:35 +00:00
Jakub Bukaj
892d4e28f4 Fix doctests 2014-11-16 12:22:40 +01:00
Jakub Bukaj
3ee9f0df54 Fix warnings 2014-11-16 10:40:34 +01:00
Jakub Bukaj
b22afe9ee7 rollup merge of #18990: alfie/master 2014-11-16 10:22:43 +01:00
Jakub Bukaj
a9f9e80de5 rollup merge of #18989: alex/fix-typos 2014-11-16 10:22:35 +01:00
Jakub Bukaj
086b2974de rollup merge of #18985: alexcrichton/issue-18900 2014-11-16 10:22:28 +01:00
Jakub Bukaj
94c8bb4696 rollup merge of #18979: inrustwetrust/codegen-options-parsing 2014-11-16 10:22:00 +01:00
Jakub Bukaj
4c30cb2564 rollup merge of #18976: bjz/rfc369-numerics 2014-11-16 10:21:42 +01:00
Jakub Bukaj
42c77f4958 rollup merge of #18970: aturon/fixup-stable 2014-11-16 10:21:33 +01:00
Jakub Bukaj
f3fd09a6f5 rollup merge of #18965: cmr/master 2014-11-16 10:21:18 +01:00
Jakub Bukaj
c01c6e2cac rollup merge of #18964: coyotebush/rustdoc-print 2014-11-16 10:21:11 +01:00
Jakub Bukaj
c46b5b5314 rollup merge of #18960: stepancheg/cell-default 2014-11-16 10:21:01 +01:00
Jakub Bukaj
f7be5966dc rollup merge of #18949: tomjakubowski/tojson-str 2014-11-16 10:20:35 +01:00