Niko Matsakis
877b93add2
Move shifting code out of expr and into somewhere more accessible
2015-11-03 04:35:00 -05:00
Oliver Schneider
09d3adf52e
implement RFC 1229
...
const eval errors outside of true constant enviroments are not reported anymore, but instead forwarded to a lint.
2015-10-13 17:01:03 +02:00
Cristi Cobzarenco
4b308b44e1
typos: fix a grabbag of typos all over the place
2015-10-08 19:49:31 +01:00
bors
168a23ebe1
Auto merge of #28787 - dotdash:no_more___fat_ptr, r=eddyb
...
A DST value and a fat pointer to it have the same representation, all we
have to do is to adjust the type of the datum holding the pointer.
2015-10-01 20:06:35 +00:00
Niko Matsakis
01f32ace03
Convert DefId to use DefIndex, which is an index into a list of
...
paths, and construct paths for all definitions. Also, stop rewriting
DefIds for closures, and instead just load the closure data from
the original def-id, which may be in another crate.
2015-10-01 10:43:07 -04:00
Niko Matsakis
a0dc2d9a29
Introduce semi-duplicate DefIds into DefLocal/DefUpvar to remove use
...
of xxx_local.
2015-10-01 10:37:19 -04:00
Niko Matsakis
5600c6282e
move direct accesses of node
to go through as_local_node_id
, unless
...
they are being used as an opaque "position identifier"
2015-10-01 10:37:19 -04:00
Björn Steinbrink
bda083fa70
Avoid unnecessary temporaries when ref'ing a DST value
...
A DST value and a fat pointer to it have the same representation, all we
have to do is to adjust the type of the datum holding the pointer.
2015-10-01 15:24:23 +02:00
bors
2e88c36ebc
Auto merge of #28642 - petrochenkov:name3, r=nrc
...
This PR removes random remaining `Ident`s outside of libsyntax and performs general cleanup
In particular, interfaces of `Name` and `Ident` are tidied up, `Name`s and `Ident`s being small `Copy` aggregates are always passed to functions by value, and `Ident`s are never used as keys in maps, because `Ident` comparisons are tricky.
Although this PR closes https://github.com/rust-lang/rust/issues/6993 there's still work related to it:
- `Name` can be made `NonZero` to compress numerous `Option<Name>`s and `Option<Ident>`s but it requires const unsafe functions.
- Implementation of `PartialEq` on `Ident` should be eliminated and replaced with explicit hygienic, non-hygienic or member-wise comparisons.
- Finally, large parts of AST can potentially be converted to `Name`s in the same way as HIR to clearly separate identifiers used in hygienic and non-hygienic contexts.
r? @nrc
2015-09-26 14:48:56 +00:00
Eduard Burtescu
f293ea28b4
Remove the deprecated box(PLACE) syntax.
2015-09-24 18:00:08 +03:00
Vadim Petrochenkov
40ce80484c
Remove random Idents outside of libsyntax
2015-09-23 20:04:49 +03:00
Vadim Petrochenkov
64fb709f99
Use Names in hir::{Field, ExprMethodCall, ExprField}
2015-09-22 19:53:53 +03:00
bors
783c3fcc1e
Auto merge of #28345 - japaric:op-assign, r=nmatsakis
...
Implements overload-able augmented/compound assignments, like `a += b` via the `AddAssign` trait, as specified in RFC [953]
[953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md
r? @nikomatsakis
2015-09-19 21:19:29 +00:00
Jorge Aparicio
3ae3a5fc3c
Overloaded augmented assignments
2015-09-18 21:20:15 -05:00
Björn Steinbrink
2c17bfc20c
Skip no-op adjustments in trans
...
That allows us to keep using trans_into() in case of adjustments that
may actually be ignored in trans because they are a plain deref/ref pair
with no overloaded deref or unsizing.
Unoptimized(!) benchmarks from servo/servo#7638
Before
```
test goser::bench_clone ... bench: 17,701 ns/iter (+/- 58) = 30 MB/s
test goser::bincode::bench_decoder ... bench: 33,715 ns/iter (+/- 300) = 11 MB/s
test goser::bincode::bench_deserialize ... bench: 36,804 ns/iter (+/- 329) = 9 MB/s
test goser::bincode::bench_encoder ... bench: 34,695 ns/iter (+/- 149) = 11 MB/s
test goser::bincode::bench_populate ... bench: 18,879 ns/iter (+/- 88)
test goser::bincode::bench_serialize ... bench: 31,668 ns/iter (+/- 156) = 11 MB/s
test goser::capnp::bench_deserialize ... bench: 2,049 ns/iter (+/- 87) = 218 MB/s
test goser::capnp::bench_deserialize_packed ... bench: 10,707 ns/iter (+/- 258) = 31 MB/s
test goser::capnp::bench_populate ... bench: 635 ns/iter (+/- 5)
test goser::capnp::bench_serialize ... bench: 35,657 ns/iter (+/- 155) = 12 MB/s
test goser::capnp::bench_serialize_packed ... bench: 37,881 ns/iter (+/- 146) = 8 MB/s
test goser::msgpack::bench_decoder ... bench: 50,634 ns/iter (+/- 307) = 5 MB/s
test goser::msgpack::bench_encoder ... bench: 25,738 ns/iter (+/- 90) = 11 MB/s
test goser::msgpack::bench_populate ... bench: 18,900 ns/iter (+/- 138)
test goser::protobuf::bench_decoder ... bench: 2,791 ns/iter (+/- 29) = 102 MB/s
test goser::protobuf::bench_encoder ... bench: 75,414 ns/iter (+/- 358) = 3 MB/s
test goser::protobuf::bench_populate ... bench: 19,248 ns/iter (+/- 92)
test goser::rustc_serialize_json::bench_decoder ... bench: 109,999 ns/iter (+/- 797) = 5 MB/s
test goser::rustc_serialize_json::bench_encoder ... bench: 58,777 ns/iter (+/- 418) = 10 MB/s
test goser::rustc_serialize_json::bench_populate ... bench: 18,887 ns/iter (+/- 76)
test goser::serde_json::bench_deserializer ... bench: 104,803 ns/iter (+/- 770) = 5 MB/s
test goser::serde_json::bench_populate ... bench: 18,890 ns/iter (+/- 69)
test goser::serde_json::bench_serializer ... bench: 75,046 ns/iter (+/- 435) = 8 MB/s
```
After
```
test goser::bench_clone ... bench: 16,052 ns/iter (+/- 188) = 34 MB/s
test goser::bincode::bench_decoder ... bench: 31,194 ns/iter (+/- 941) = 12 MB/s
test goser::bincode::bench_deserialize ... bench: 33,934 ns/iter (+/- 352) = 10 MB/s
test goser::bincode::bench_encoder ... bench: 30,737 ns/iter (+/- 1,969) = 13 MB/s
test goser::bincode::bench_populate ... bench: 17,234 ns/iter (+/- 176)
test goser::bincode::bench_serialize ... bench: 28,269 ns/iter (+/- 452) = 12 MB/s
test goser::capnp::bench_deserialize ... bench: 2,019 ns/iter (+/- 85) = 221 MB/s
test goser::capnp::bench_deserialize_packed ... bench: 10,662 ns/iter (+/- 527) = 31 MB/s
test goser::capnp::bench_populate ... bench: 607 ns/iter (+/- 2)
test goser::capnp::bench_serialize ... bench: 30,488 ns/iter (+/- 219) = 14 MB/s
test goser::capnp::bench_serialize_packed ... bench: 33,731 ns/iter (+/- 201) = 9 MB/s
test goser::msgpack::bench_decoder ... bench: 46,921 ns/iter (+/- 461) = 6 MB/s
test goser::msgpack::bench_encoder ... bench: 22,315 ns/iter (+/- 96) = 12 MB/s
test goser::msgpack::bench_populate ... bench: 17,268 ns/iter (+/- 73)
test goser::protobuf::bench_decoder ... bench: 2,658 ns/iter (+/- 44) = 107 MB/s
test goser::protobuf::bench_encoder ... bench: 71,024 ns/iter (+/- 359) = 4 MB/s
test goser::protobuf::bench_populate ... bench: 17,704 ns/iter (+/- 104)
test goser::rustc_serialize_json::bench_decoder ... bench: 107,867 ns/iter (+/- 759) = 5 MB/s
test goser::rustc_serialize_json::bench_encoder ... bench: 52,327 ns/iter (+/- 479) = 11 MB/s
test goser::rustc_serialize_json::bench_populate ... bench: 17,262 ns/iter (+/- 68)
test goser::serde_json::bench_deserializer ... bench: 99,156 ns/iter (+/- 657) = 6 MB/s
test goser::serde_json::bench_populate ... bench: 17,264 ns/iter (+/- 77)
test goser::serde_json::bench_serializer ... bench: 66,135 ns/iter (+/- 392) = 9 MB/s
```
2015-09-18 15:46:58 +02:00
bors
89faafcd67
Auto merge of #28381 - ebfull:aint-fraid-a-no-ghosts-redux, r=me
...
#27483 redux at Gankro's request.
Fixes #26905 , Closes #28239
r? @nrc
2015-09-17 10:11:23 +00:00
Nick Cameron
d21bfff78c
Remove hir::ExprParen
2015-09-17 12:16:46 +12:00
Nick Cameron
e9f1b06329
Use ast attributes every where (remove HIR attributes).
...
This could be a [breaking-change] if your lint or syntax extension (is that even possible?) uses HIR attributes or literals.
2015-09-16 10:57:06 +12:00
Sean Bowe
b096403d43
Ignore PhantomData when checking CoerceUnsized implementations
2015-09-14 22:02:26 -06:00
Ariel Ben-Yehuda
5a95acb8ab
split ty::util and ty::adjustment
2015-09-14 14:55:56 +03:00
Ariel Ben-Yehuda
caa10c3bde
move middle::ty and related modules to middle/ty/
2015-09-14 10:56:13 +03:00
bors
f6aac80375
Auto merge of #28270 - arielb1:raw-fat-ops, r=nrc
...
r? @nrc
Fixes #17736
Fixes #18829
Fixes #23888
Fixes #28236
2015-09-06 23:24:11 +00:00
Ariel Ben-Yehuda
34bc99f860
implement raw fat pointer ops
2015-09-06 16:11:38 +03:00
Niko Matsakis
004d70212a
track, for each upvar, its index in list of upvars
2015-09-06 07:27:22 -04:00
bors
2f77a59d16
Auto merge of #28201 - apasel422:issue-26205, r=nikomatsakis
...
Closes #26205 .
r? @eddyb
2015-09-04 14:16:54 +00:00
Andrew Paseltiner
b8dad48435
Fix multiple mutable autoderefs with Box
...
Closes #26205 .
2015-09-03 14:41:27 -04:00
Simonas Kazlauskas
d8074e65b0
Use proper span for break and continue labels
...
Fixes #28109
2015-09-03 03:50:43 +03:00
Nick Cameron
facdf2ebb1
Add an intital HIR and lowering step
2015-09-03 10:02:36 +12:00
Huon Wilson
bb6be30d6f
Remove some SIMD codepaths from trans.
2015-08-31 18:33:55 -07:00
bors
abfa081c10
Auto merge of #27999 - dotdash:lt, r=eddyb
...
The major change here is in the tiny commit at the end and makes it so that we no longer emit lifetime intrinsics for allocas for function arguments. They are live for the whole function anyway, so the intrinsics add no value. This makes the resulting IR more clear, and reduces the peak memory usage and LLVM times by about 1-4%, depending on the crate.
The remaining changes are just preparatory cleanups and fixes for missing lifetime intrinsics.
2015-08-27 20:09:15 +00:00
bors
ab21fe59e9
Auto merge of #28020 - dotdash:ref_fat_ptr_be_gone, r=eddyb
...
r? @eddyb -- we talked about this on IRC a while back but I only now managed to get the change done.
2015-08-27 03:57:21 +00:00
Björn Steinbrink
05d36965df
Avoid an extra alloca/memcpy when auto-ref'ing fat pointers
...
auto_ref() handles fat pointers just fine and unlike ref_fat_ptr() does so
without creating an unnecessary copy of the pointer.
2015-08-26 19:41:27 +02:00
Ariel Ben-Yehuda
277eeb95c3
move destructors_for_type into AdtDef
2015-08-25 21:52:15 +03:00
Björn Steinbrink
727a5d543d
Prefer alloc_ty() instead of alloca() where possible
2015-08-25 18:37:01 +02:00
Björn Steinbrink
6c512dc52b
Separate lifetime starts from alloca()
...
Combining them seemed like a good idea at the time, but turns out that
handling lifetimes separately makes it somewhat easier to handle cases
where we don't want the intrinsics, and let's you see more easily where
the start/end pairs are.
2015-08-25 18:36:10 +02:00
Björn Steinbrink
f3bd14ab11
Turn some alloca_no_lifetime() calls into plain alloca() calls
...
The issues that the comments referred to were fixed before the PR even
landed but we never got around to remove the hack of skipping the
lifetime start.
2015-08-25 18:36:10 +02:00
bors
5c630a61c6
Auto merge of #27981 - dotdash:gepi, r=brson
2015-08-25 10:46:06 +00:00
Björn Steinbrink
5d9c250fe4
Use StructGEP instead of GEPi where appropriate
...
StructGEP seems clearer and probably does an even better job of the
micro-optimization that we have in GEPi.
2015-08-24 23:39:56 +02:00
Björn Steinbrink
d80ff126bf
Rename get_len() to get_meta()
...
The functions is useful for all kinds of fat pointers, but get_len()
just feels so wrong for trait object fat pointers. Let's use get_meta()
because that's rather neutral.
2015-08-24 23:39:43 +02:00
Niko Matsakis
c0de23de81
convert to use is_local
instead of == LOCAL_CRATE
2015-08-24 05:35:34 -04:00
Niko Matsakis
e91bef2e05
fallout from moving def-id
2015-08-24 05:35:34 -04:00
bors
c8c14f207b
Auto merge of #27875 - alexcrichton:msvc-f32-rem, r=nrc
...
Currently `f32 % f32` will generate a link error on 32-bit MSVC because LLVM
will lower the operation to a call to the nonexistent function `fmodf`. Work
around in this in the backend by lowering to a call to `fmod` instead with
necessary extension/truncation between floats/doubles.
Closes #27859
2015-08-19 07:14:43 +00:00
Alex Crichton
8a7b0fad53
trans: Call fmod
manually for 32-bit float rem
...
Currently `f32 % f32` will generate a link error on 32-bit MSVC because LLVM
will lower the operation to a call to the nonexistent function `fmodf`. Work
around in this in the backend by lowering to a call to `fmod` instead with
necessary extension/truncation between floats/doubles.
Closes #27859
2015-08-17 23:32:30 -07:00
Huon Wilson
1bfbde6778
Add comparison and shuffle SIMD intrinsics.
...
- simd_eq, simd_ne, simd_lt, simd_le, simd_gt, simd_ge
- simd_shuffleNNN
2015-08-17 14:41:37 -07:00
Ariel Ben-Yehuda
015300109d
cache Ty::is_simd
2015-08-06 18:26:00 +03:00
Ariel Ben-Yehuda
5f3c1412ad
use VariantDef instead of struct_fields
2015-08-06 16:54:40 +03:00
Ariel Ben-Yehuda
764310e7bb
introduce an ADTDef struct for struct/enum definitions
2015-08-06 14:16:56 +03:00
Björn Steinbrink
6e311e7af4
Make C_u8 take a u8 instead of a usize value
2015-08-05 09:56:29 +02:00
Eduard Burtescu
a34b0a4691
rustc: replace def::MethodProvenance with ty::ImplOrTraitItemContainer.
2015-08-04 01:16:53 +03:00
Simonas Kazlauskas
cca0ea718d
Replace illegal with invalid in most diagnostics
2015-07-29 01:59:31 +03:00