Commit graph

2875 commits

Author SHA1 Message Date
bors
4f3c7a472b Auto merge of #52145 - ExpHP:drop-it-like-its-eof, r=nikomatsakis
Fix macro parser quadratic complexity in small repeating groups

Observed in #51754, and more easily demonstrated with the following:

```rust
macro_rules! stress {
    ($($t:tt)+) => { };
}

fn main() {
    stress!{
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        //    ... 65536 copies of "a" total ...
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
        a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
    }
}
```
which takes 50 seconds to compile prior to the fix and <1s after.

I hope this has a visible impact on the compile times for real code.  (I think it is most likely to affect incremental TT munchers that deal with large inputs, though it depends on how they are written)

For a fuller description of the performance issue:  https://github.com/rust-lang/rust/issues/51754#issuecomment-403242159

---

There is no test (yet) because I'm not sure how easily to measure this for regressions.
2018-07-17 19:28:23 +00:00
Michael Lamparski
0467ae0cf5 cleanup unnecessary else 2018-07-16 16:15:34 -04:00
Alex Crichton
65f3007fa8 rustc: Stabilize much of the proc_macro feature
This commit stabilizes some of the `proc_macro` language feature as well as a
number of APIs in the `proc_macro` crate as [previously discussed][1]. This
means that on stable Rust you can now define custom procedural macros which
operate as attributes attached to items or `macro_rules!`-like bang-style
invocations. This extends the suite of currently stable procedural macros,
custom derives, with custom attributes and custom bang macros.

Note though that despite the stabilization in this commit procedural macros are
still not usable on stable Rust. To stabilize that we'll need to stabilize at
least part of the `use_extern_macros` feature. Currently you can define a
procedural macro attribute but you can't import it to call it!

A summary of the changes made in this PR (as well as the various consequences)
is:

* The `proc_macro` language and library features are now stable.
* Other APIs not stabilized in the `proc_macro` crate are now named under a
  different feature, such as `proc_macro_diagnostic` or `proc_macro_span`.
* A few checks in resolution for `proc_macro` being enabled have switched over
  to `use_extern_macros` being enabled. This means that code using
  `#![feature(proc_macro)]` today will likely need to move to
  `#![feature(use_extern_macros)]`.

It's intended that this PR, once landed, will be followed up with an attempt to
stabilize a small slice of `use_extern_macros` just for procedural macros to
make this feature 100% usable on stable.

[1]: https://internals.rust-lang.org/t/help-stabilize-a-subset-of-macros-2-0/7252
2018-07-16 07:58:06 -07:00
bors
82e5c9c8e2 Auto merge of #52383 - petrochenkov:pmns, r=alexcrichton
resolve: Functions introducing procedural macros reserve a slot in the macro namespace as well

Similarly to https://github.com/rust-lang/rust/pull/52234, this gives us symmetry between internal and external views of a crate, but in this case it's always an error to call a procedural macro in the same crate in which it's defined.

Closes https://github.com/rust-lang/rust/issues/52225
2018-07-15 19:35:06 +00:00
Vadim Petrochenkov
431aefb2d4 Functions introducing procedural macros reserve a slot in the macro namespace as well 2018-07-14 20:10:07 +03:00
Vadim Petrochenkov
5987fe8f75 Remove most of Hash impls from AST and HIR structures 2018-07-14 14:57:14 +03:00
Vadim Petrochenkov
4d1a30c92b Remove most of PartialEq impls from AST and HIR structures 2018-07-14 14:56:57 +03:00
Mark Rousskov
2d49909f45
Rollup merge of #52224 - ljedrz:dyn_libsyntax, r=oli-obk
Deny bare trait objects in in src/libsyntax

Enforce `#![deny(bare_trait_objects)]` in `src/libsyntax`.
2018-07-11 12:38:39 -06:00
ljedrz
84dadb6139 Pacify tidy 2018-07-10 21:58:16 +02:00
ljedrz
e28e4877a8 Deny bare trait objects in in src/libsyntax 2018-07-10 21:06:26 +02:00
Vadim Petrochenkov
94ef9f57f5 hygiene: Decouple transparencies from expansion IDs 2018-07-08 16:17:37 +03:00
Michael Lamparski
191e76c5b8 fix perf issue in macro parser
For a fuller description of the performance issue fixed by this:

https://github.com/rust-lang/rust/issues/51754#issuecomment-403242159
2018-07-07 17:13:21 -04:00
Vadim Petrochenkov
9f92fce77c Fortify dummy span checking 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
99ecdb3f5f hygiene: Implement transparent marks 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
09856c85b7 expansion: Give names to some fields of SyntaxExtension 2018-06-30 01:53:32 +03:00
bors
9f79d2f86a Auto merge of #50997 - michaelwoerister:pre-analyze-filemaps, r=Mark-Simulacrum
Make FileMap::{lines, multibyte_chars, non_narrow_chars} non-mutable.

This PR removes most of the interior mutability from `FileMap`, which should be beneficial, especially in a multithreaded setting. This is achieved by initializing the state in question when the filemap is constructed instead of during lexing. Hopefully this doesn't degrade performance.

cc @wesleywiser
2018-06-28 11:20:41 +00:00
Michael Woerister
095a339bec Remove the now redundant CodeMap::new_filemap_with_lines() method. 2018-06-27 14:00:34 +02:00
Vadim Petrochenkov
d347270e0c Implement #[macro_export(local_inner_macros)] 2018-06-27 13:10:16 +03:00
Vadim Petrochenkov
20ce91076a hygiene: Merge NameAndSpan into ExpnInfo 2018-06-23 21:53:24 +03:00
Vadim Petrochenkov
c00f5af4d6 hygiene: Do not reset expansion info for quote! 2018-06-23 20:40:25 +03:00
Vadim Petrochenkov
296955a6e1 expansion: Add some comments 2018-06-23 20:09:21 +03:00
Vadim Petrochenkov
399da7bc35 expansion: Improve searchability for AstFragments methods 2018-06-23 20:09:21 +03:00
Vadim Petrochenkov
a12726460e expansion: Rename Expansion to AstFragment 2018-06-23 20:09:21 +03:00
Vadim Petrochenkov
17f20bec22 expansion: Remove unnecessary override from impl Folder for Marker 2018-06-23 20:09:21 +03:00
Taylor Cramer
cf844b547d async await desugaring and tests 2018-06-21 22:36:36 -07:00
Without Boats
18ff7d091a Parse async fn header.
This is gated on edition 2018 & the `async_await` feature gate.

The parser will accept `async fn` and `async unsafe fn` as fn
items. Along the same lines as `const fn`, only `async unsafe fn`
is permitted, not `unsafe async fn`.The parser will not accept
`async` functions as trait methods.

To do a little code clean up, four fields of the function type
struct have been merged into the new `FnHeader` struct: constness,
asyncness, unsafety, and ABI.

Also, a small bug in HIR printing is fixed: it previously printed
`const unsafe fn` as `unsafe const fn`, which is grammatically
incorrect.
2018-06-21 22:29:47 -07:00
varkor
37204027b6 Rename ty_param_bound to trait_bound 2018-06-20 12:23:46 +01:00
varkor
95f1866a4d Make GenericBound explicit 2018-06-20 12:23:46 +01:00
varkor
c5f16e0e18 Rename ParamBound(s) to GenericBound(s) 2018-06-20 12:23:46 +01:00
varkor
7de6ed06a5 Rename TraitTyParamBound to ParamBound::Trait 2018-06-20 12:23:23 +01:00
varkor
6015edf9af Remove name from GenericParamKind::Lifetime 2018-06-20 12:23:08 +01:00
varkor
aed530a457 Lift bounds into GenericParam 2018-06-20 12:22:46 +01:00
varkor
3bcb006fd9 Rename structures in ast 2018-06-20 12:21:52 +01:00
varkor
2c6ff2469a Refactor ast::GenericParam as a struct 2018-06-20 12:21:08 +01:00
varkor
d643946550 Rename ast::GenericParam and ast::GenericArg
It's so confusing to have everything having the same name, at least while refactoring.
2018-06-20 12:19:04 +01:00
varkor
f9d0968906 Make method and variable names more consistent 2018-06-20 12:19:04 +01:00
varkor
76c0d68745 Rename "parameter" to "arg" 2018-06-20 12:19:04 +01:00
varkor
1ed60a9173 Rename *Parameter to *Param 2018-06-20 12:19:04 +01:00
varkor
494859e8dd Consolidate PathParameters and AngleBracketedParameterData 2018-06-20 12:19:03 +01:00
QuietMisdreavus
122b5b47c2 create multiple HIR items for a use statement 2018-06-14 17:47:28 -05:00
David Tolnay
987020846c
Enable fall through past $:lifetime matcher 2018-06-10 14:39:16 -07:00
kennytm
e46ef1bb86
Rollup merge of #51417 - pietroalbini:revert-49719, r=nikomatsakis
Revert #49719

This also needs to be backported into beta.

Fixes #51416.
r? @nikomatsakis
2018-06-08 07:05:47 +08:00
Pietro Albini
1df7817122
Revert "Auto merge of #49719 - mark-i-m:no_sep, r=petrochenkov"
This reverts commit d6ba1b9b02, reversing
changes made to 8de5353f75.
2018-06-07 17:07:05 +02:00
kennytm
c9cb806689
Deny #[cfg] and #[cfg_attr] on generic parameters. 2018-06-02 05:11:33 +08:00
Vadim Petrochenkov
345e7c3597 resolve: Make sure indeterminate and inconsistent macro resolutions always generate errors 2018-05-30 22:21:50 +03:00
bors
16cd84ee22 Auto merge of #50724 - zackmdavis:applicability_rush, r=Manishearth
add suggestion applicabilities to librustc and libsyntax

A down payment on #50723. Interested in feedback on whether my `MaybeIncorrect` vs. `MachineApplicable` judgement calls are well-calibrated (and that we have a consensus on what this means).

r? @Manishearth
cc @killercup @estebank
2018-05-28 10:11:26 +00:00
Takanori Ishibashi
f386cdae19 innacurate -> inaccurate 2018-05-27 09:47:04 +09:00
Vadim Petrochenkov
1e4269cb83 Add Ident::as_str helper 2018-05-26 15:20:23 +03:00
bors
7426f5ccf7 Auto merge of #50971 - alexcrichton:no-stringify, r=petrochenkov
rustc: Correctly pretty-print macro delimiters

This commit updates the `Mac_` AST structure to keep track of the delimiters
that it originally had for its invocation. This allows us to faithfully
pretty-print macro invocations not using parentheses (e.g. `vec![...]`). This in
turn helps procedural macros due to #43081.

Closes #50840
2018-05-24 07:14:21 +00:00
Niko Matsakis
e9e8514ca0 add Span information into Qself 2018-05-22 19:05:42 -04:00