Commit graph

382 commits

Author SHA1 Message Date
bors
68655029d4 Auto merge of #60730 - matthewjasper:optimize-false-edges, r=pnkfelix
Optimize matches

Attempt to fix or improve #60571

This is breaking some diagnostics because the MIR for match arms isn't in source order any more.

cc @centril
2019-06-16 09:30:34 +00:00
Mazdak Farrokhzad
be09427b11
Rollup merge of #61813 - matthewjasper:remove-unnecessary-symbol-ops, r=petrochenkov
Remove some unnecessary symbol interner ops

* Don't gensym symbols that don't need to worry about colliding with other symbols
* Use symbol constants instead of interning string literals in a few places.
* Don't generate a module in `__register_diagnostic`

r? @petrochenkov
2019-06-15 17:45:02 +02:00
Matthew Jasper
5c84cd37cb Use sym constansts for PrimitiveTypeTable keys 2019-06-14 18:54:58 +01:00
Matthew Jasper
4e212c6ddc Avoid some unnecessary symbol interner operations 2019-06-14 18:54:58 +01:00
Matthew Jasper
ef1fc86b52 Call str::eq and <[T]>::eq for match comparisons
We used to call the less efficient `<&str>::eq` and `<&[T]>::eq`.
2019-06-13 21:05:21 +01:00
bors
3f511ade5b Auto merge of #60669 - c410-f3r:attrs-fn, r=petrochenkov
Allow attributes in formal function parameters

Implements https://github.com/rust-lang/rust/issues/60406.

This is my first contribution to the compiler and since this is a large and complex project, I am not fully aware of the consequences of the changes I have made.

**TODO**

- [x] Forbid some built-in attributes.
- [x] Expand cfg/cfg_attr
2019-06-12 07:38:01 +00:00
Mazdak Farrokhzad
d78260d781
Rollup merge of #61568 - Mark-Simulacrum:symbol-fmt-macros, r=estebank
Use Symbol, Span in libfmt_macros

I'm not super happy with this, personally, but I think it might be a decent start -- happy to take suggestions as to how to expand this or change things further.

r? @estebank

Fixes #60795
2019-06-12 04:22:47 +02:00
bors
5f3656ce9a Auto merge of #61735 - eddyb:must-use-life, r=oli-obk
Add deny(unused_lifetimes) to all the crates that have deny(internal).

@Zoxc brought up, regarding #61722, that we don't force the removal of unused lifetimes.
Turns out that it's not that bad to enable for compiler crates (I wonder why it's not `warn` by default?).

I would've liked to enable `single_use_lifetimes` as well, but https://github.com/rust-lang/rust/issues/53738 makes it unusable for now.

For the `rustfmt` commit, I used https://github.com/rust-lang/rustfmt/issues/1324#issuecomment-482109952, and manually filtered out some noise.

r? @oli-obk cc @rust-lang/compiler
2019-06-11 20:45:17 +00:00
Eduard-Mihai Burtescu
630ec8880c Add deny(unused_lifetimes) to all the crates that have deny(internal). 2019-06-11 14:11:59 +03:00
Michael Bradshaw
dac1c6a731 Implement RFC 2645 (transparent enums and unions)
Tracking issue: #60405
2019-06-10 22:07:24 -07:00
Mark Rousskov
b1c357e0c3 Introduce InnerSpan abstraction
This should be used when trying to get at subsets of a larger span,
especially when the larger span is not available in the code attempting
to work with those subsets (especially common in the fmt_macros crate).

This is usually a good replacement for (BytePos, BytePos) and (usize,
usize) tuples.

This commit also removes from_inner_byte_pos, since it took usize
arguments, which is error prone.
2019-06-09 14:09:36 -06:00
Mark Rousskov
dc13072b7b Use Symbol for named arguments in fmt_macros 2019-06-09 13:45:16 -06:00
Caio
1eaaf440d5 Allow attributes in formal function parameters 2019-06-09 07:58:40 -03:00
Vadim Petrochenkov
ea4ad555d7 Introduce #[rustc_dummy] attribute and use it in tests
Unlike other built-in attributes, this attribute accepts any input
2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
74a6d1c821 Turn #[allocator] into a built-in attribute and rename it to #[rustc_allocator] 2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
8049e6199b Remove unused #![feature(custom_attribute)]s 2019-06-08 23:55:24 +03:00
bors
c1c60d292e Auto merge of #61209 - matthewjasper:const-tuple-constructors, r=oli-obk
Make tuple constructors real const fns

Mir construction special cases `Ctor(...)` to be lowered as `Ctor { 0: ... }`, which means this doesn't come up much in practice, but it seems inconsistent not to allow this.

r? @oli-obk
2019-06-07 09:41:06 +00:00
Matthew Jasper
0d75ab2293 Make constructors actually be const functions 2019-06-06 17:20:06 +01:00
Vadim Petrochenkov
ff40e37b98 Some code cleanup and tidy/test fixes 2019-06-06 14:04:02 +03:00
Vadim Petrochenkov
f745e5f9b6 syntax: Remove duplicate span from token::Ident 2019-06-06 14:04:02 +03:00
Alexander Regueiro
c105c28de0 Fixed rebase fallout. 2019-06-05 21:09:27 +01:00
Alexander Regueiro
a71d55701e Addressed points raised in review. 2019-06-05 21:09:27 +01:00
Nicholas Nethercote
4c9ecbf3d1 Add modernize_and_adjust methods.
These combine two `HygieneData::with` calls into one.
2019-06-05 09:09:35 +10:00
Nicholas Nethercote
425736dc97 Add a useful comment about this file. 2019-06-05 07:43:15 +10:00
Nicholas Nethercote
dc807a9f7e Add walk_chain.
This combines multiple `HygieneData::with` calls on a hot path.
2019-06-05 07:43:15 +10:00
Nicholas Nethercote
6596743d5e Add SyntaxContext::hygienic_eq.
This combines multiple `HygieneData::with` calls into one, by combining
parts of `hygienic_eq` and `adjust_ident`.
2019-06-05 07:43:15 +10:00
Nicholas Nethercote
f9209fcd63 Add and use SyntaxContext::outer_and_expn_info.
This combines two `HygieneData::with` calls into one on a hot path.
2019-06-05 07:43:15 +10:00
Nicholas Nethercote
e19857c4db Optimize glob_adjust and reverse_glob_adjust.
They can each now do a single `HygieneData::with` call by replacing the
`SyntaxContext` and `Mark` methods with the equivalent methods from
`HygieneData`.
2019-06-05 07:43:14 +10:00
Nicholas Nethercote
58a486928e Add HygieneData::apply_mark.
This combines two `HygieneData::with` calls into one.
2019-06-05 07:43:14 +10:00
Nicholas Nethercote
4527a868d6 Add HygieneData::apply_mark_with_transparency.
Also remove `HygieneData::apply_mark_internal`, which is no longer
needed.
2019-06-05 07:43:14 +10:00
Nicholas Nethercote
a84aee3dbe Add HygieneData::apply_mark_internal. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
a02b2e36c0 Add HygieneData::marks. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
88fd7a8eb7 Add HygieneData::adjust. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
cd64cc835d Add HygieneData::remove_mark. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
7bec8c94b4 Add HygieneData::default_transparency.
Also use `HygieneData::expn_info` in an appropriate place.
2019-06-05 07:43:14 +10:00
Nicholas Nethercote
0ba36ea7c1 Add some useful methods to HygieneData. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
8797e8cabd Move modern calls inside glob_adjust and reverse_glob_adjust. 2019-06-05 07:43:14 +10:00
Nicholas Nethercote
95ea7fd735 Add HygieneData::{outer,expn_info,is_descendant_of} methods.
This commit factors out some repeated code.
2019-05-30 08:59:22 +10:00
Nicholas Nethercote
caea42f6c8 Introduce and use SyntaxContext::outer_expn_info().
It reduces two `hygiene_data` accesses to one on some hot paths.
2019-05-29 09:32:56 +10:00
Nicholas Nethercote
828f6fdbe5 Introduce and use Mark::outer_is_descendant_of().
It reduces two `hygiene_data` accesses to one on some hot paths.
2019-05-29 09:32:56 +10:00
Oliver Scherer
d6ca34c9d2 Use Symbol more in lint APIs 2019-05-27 12:28:54 +02:00
Nicholas Nethercote
33a3206dc5 Use Symbol equality in may_begin_with and parse_nt. 2019-05-27 14:05:05 +10:00
Nicholas Nethercote
8ae01a9008 Use Symbol equality in is_ident_named. 2019-05-27 14:05:05 +10:00
Nicholas Nethercote
9c7d28d4fd Pre-intern "0", "1", ..., "9", and use where appropriate. 2019-05-27 13:58:38 +10:00
Nicholas Nethercote
58c68d00fd Pass symbols to ExtCtxt::std_path instead of strings.
Because this function is hot.

Also remove the dead `ty_option` function.
2019-05-27 13:58:38 +10:00
Nicholas Nethercote
26451ef7b5 Avoid unnecessary internings.
Most involving `Symbol::intern` on string literals.
2019-05-27 13:58:38 +10:00
Nicholas Nethercote
6c0ff3dd97 Avoid interning in resolve_place_op.
This function is hot for `keccak`.
2019-05-27 13:58:38 +10:00
Nicholas Nethercote
e396f99255 Don't arena-allocate static symbols.
It's just a waste of memory. This also gets rid of the special case for
"".
2019-05-24 20:11:52 +10:00
Vadim Petrochenkov
90d15e7704 syntax: Some code cleanup 2019-05-23 12:46:41 +03:00
bors
15ccaf7791 Auto merge of #60740 - petrochenkov:kw, r=nnethercote
Simplify use of keyword symbols

They mirror non-keyword symbols now (see https://github.com/rust-lang/rust/pull/60630).

`keywords::MyKeyword.name()` -> `kw::MyKeyword`
`keywords::MyKeyword.ident()` -> `Ident::with_empty_ctxt(kw::MyKeyword)` (not common)
`keywords::Invalid.ident()` -> `Ident::invalid()` (more common)

Keywords are simply `Symbol` constants now, the `Keyword` struct is eliminated.
This means `kw::MyKeyword` can now be used in `match` in particular.
2019-05-23 01:50:55 +00:00