about summary refs log tree commit diff
path: root/compiler/rustc_expand/src
AgeCommit message (Collapse)AuthorLines
2022-03-30Improve comments and rename many things for consistency.Nicholas Nethercote-198/+181
In particular: - Replace use of "item" with "matcher position/"mp". - Replace use of "repetition" with "sequence". - Replace `ms` with `matcher`.
2022-03-30Clarify comments about doc comments in macros.Nicholas Nethercote-1/+6
2022-03-30Simplify and rename `count_names`.Nicholas Nethercote-14/+14
2022-03-29Add a useful assertion.Nicholas Nethercote-2/+7
2022-03-28Rollup merge of #95390 - nnethercote:allow-doc-comments-in-macros, ↵Dylan DPC-7/+8
r=petrochenkov Ignore doc comments in a declarative macro matcher. Fixes #95267. Reverts to the old behaviour before #95159 introduced a regression. r? `@petrochenkov`
2022-03-28Rollup merge of #95301 - nnethercote:rm-NtTT, r=petrochenkovDylan DPC-31/+27
Remove `Nonterminal::NtTT`. It's only needed for macro expansion, not as a general element in the AST. This commit removes it, adds `NtOrTt` for the parser and macro expansion cases, and renames the variants in `NamedMatch` to better match the new type. r? `@petrochenkov`
2022-03-28Ignore doc comments in a declarative macro matcher.Nicholas Nethercote-7/+8
Fixes #95267. Reverts to the old behaviour before #95159 introduced a regression.
2022-03-28Remove `Nonterminal::NtTT`.Nicholas Nethercote-31/+27
It's only needed for macro expansion, not as a general element in the AST. This commit removes it, adds `NtOrTt` for the parser and macro expansion cases, and renames the variants in `NamedMatch` to better match the new type.
2022-03-27Rollup merge of #95335 - Badel2:resolve-path, r=Dylan-DPCDylan DPC-37/+2
Move resolve_path to rustc_builtin_macros and make it private Fixing a FIXME introduced by `@jyn514` in #85457
2022-03-26Use str and char's Debug impl to format literalsDavid Tolnay-8/+8
2022-03-26Move resolve_path to rustc_builtin_macros and make it privateBadel2-37/+2
2022-03-26proc-macro: Stop wrapping `ident` matchers into groupsVadim Petrochenkov-106/+4
2022-03-26Auto merge of #95149 - cjgillot:once-diag, r=estebankbors-2/+2
Remove `Session::one_time_diagnostic` This is untracked mutable state, which modified the behaviour of queries. It was used for 2 things: some full-blown errors, but mostly for lint declaration notes ("the lint level is defined here" notes). It is replaced by the diagnostic deduplication infra which already exists in the diagnostic emitter. A new diagnostic level `OnceNote` is introduced specifically for lint notes, to deduplicate subdiagnostics. As a drive-by, diagnostic emission takes a `&mut` to allow dropping the `SubDiagnostic`s.
2022-03-25Shrink `MatcherPosRepetition`.Nicholas Nethercote-15/+13
Currently it copies a `KleeneOp` and a `Token` out of a `SequenceRepetition`. It's better to store a reference to the `SequenceRepetition`, which is now possible due to #95159 having changed the lifetimes.
2022-03-25Shrink `NamedMatchVec` to one inline element.Nicholas Nethercote-2/+5
This counters the `NamedMatchVec` size increase from the previous commit, leaving `NamedMatchVec` smaller than before.
2022-03-25Split `NamedMatch::MatchNonterminal` in two.Nicholas Nethercote-71/+81
The `Lrc` is only relevant within `transcribe()`. There, the `Lrc` is helpful for the non-`NtTT` cases, because the entire nonterminal is cloned. But for the `NtTT` cases the inner token tree is cloned (a full clone) and so the `Lrc` is of no help. This commit splits the `NtTT` and non-`NtTT` cases, avoiding the useless `Lrc` in the former case, for the following effect on macro-heavy crates. - It reduces the total number of allocations a lot. - It increases the size of some of the remaining allocations. - It doesn't affect *peak* memory usage, because the larger allocations are short-lived. This overall gives a speed win.
2022-03-23Add a size assertion for `NamedMatchVec`.Nicholas Nethercote-0/+4
2022-03-22Auto merge of #95159 - nnethercote:TtParser, r=petrochenkovbors-511/+421
Introduce `TtParser` These commits make a number of changes to declarative macro expansion, resulting in code that is shorter, simpler, and faster. Best reviewed one commit at a time. r? `@petrochenkov`
2022-03-23Eliminate `TokenTreeOrTokenTreeSlice`.Nicholas Nethercote-173/+146
As its name suggests, `TokenTreeOrTokenTreeSlice` is either a single `TokenTree` or a slice of them. It has methods `len` and `get_tt` that let it be treated much like an ordinary slice. The reason it isn't an ordinary slice is that for `TokenTree::Delimited` the open and close delimiters are represented implicitly, and when they are needed they are constructed on the fly with `Delimited::{open,close}_tt`, rather than being present in memory. This commit changes `Delimited` so the open and close delimiters are represented explicitly. As a result, `TokenTreeOrTokenTreeSlice` is no longer needed and `MatcherPos` and `MatcherTtFrame` can just use an ordinary slice. `TokenTree::{len,get_tt}` are also removed, because they were only needed to support `TokenTreeOrTokenTreeSlice`. The change makes the code shorter and a little bit faster on benchmarks that use macro expansion heavily, partly because `MatcherPos` is a lot smaller (less data to `memcpy`) and partly because ordinary slice operations are faster than `TokenTreeOrTokenTreeSlice::{len,get_tt}`.
2022-03-21Fix generated tokens hygieneCaio-4/+10
2022-03-21Move items into `TtParser` as `Vec`s.Nicholas Nethercote-58/+43
By putting them in `TtParser`, we can reuse them for every rule in a macro. With that done, they can be `SmallVec` instead of `Vec`, and this is a performance win because these vectors are hot and `SmallVec` operations are a bit slower due to always needing an "inline or heap?" check.
2022-03-21Remove `MatcherPosHandle`.Nicholas Nethercote-88/+23
This type was a small performance win for `html5ever`, which uses a macro with hundreds of very simple rules that don't contain any metavariables. But this type is complicated (extra lifetimes) and perf-neutral for macros that do have metavariables. This commit removes `MatcherPosHandle`, simplifying things a lot. This increases the allocation rate for `html5ever` and similar cases a bit, but makes things easier for follow-up changes that will improve performance more than what we lost here.
2022-03-20Take &mut Diagnostic in emit_diagnostic.Camille GILLOT-2/+2
Taking a Diagnostic by move would break the usual pattern `diag.label(..).emit()`.
2022-03-19Remove an impossible code path.Nicholas Nethercote-5/+6
Doc comments cannot appear in a matcher.
2022-03-19Add `TtParser::macro_name`.Nicholas Nethercote-38/+35
Instead of passing it into `parse_tt`.
2022-03-19Rename `bb_items_ambiguity_error` as `ambiguity_error`.Nicholas Nethercote-2/+2
Because it involves `next_items` as well as `bb_items`.
2022-03-19Introduce `TtParser`.Nicholas Nethercote-304/+323
It currently has no state, just the three methods `parse_tt`, `parse_tt_inner`, and `bb_items_ambiguity_error`. This commit is large but trivial, and mostly consists of changes to the indentation of those methods. Subsequent commits will do more.
2022-03-18Auto merge of #95067 - nnethercote:parse_tt-more-refactoring, r=petrochenkovbors-142/+124
Still more refactoring of `parse_tt` r? `@petrochenkov`
2022-03-18Rename `TtSeq` as `TtSlice`.Nicholas Nethercote-10/+10
It's a better name because (a) it holds a slice, and (b) "sequence" has other meanings in this file.
2022-03-18Tweak a bunch of comments.Nicholas Nethercote-62/+36
I've been staring at these enough lately that they're annoying me, let's make them better.
2022-03-18Reorder cases in `parse_tt_inner`.Nicholas Nethercote-61/+55
I find the new order easier to read: within a matcher; past the end of a repetition; at end of input. It also reduces the indentation level by one for
2022-03-18Only modify `eof_items` if `token == Eof`.Nicholas Nethercote-4/+7
Because that's the condition under which `eof_items` is used.
2022-03-18Factor out some code into `MatcherPos::repetition`.Nicholas Nethercote-28/+37
Also move `create_matches` within `impl MatcherPos`, because it's only used within that impl block.
2022-03-18Add two useful assertions.Nicholas Nethercote-0/+2
2022-03-16rustc_error: make ErrorReported impossible to constructmark-8/+8
There are a few places were we have to construct it, though, and a few places that are more invasive to change. To do this, we create a constructor with a long obvious name.
2022-03-15Auto merge of #94584 - pnkfelix:inject-use-suggestion-sites, r=ekuberbors-11/+11
More robust fallback for `use` suggestion Our old way to suggest where to add `use`s would first look for pre-existing `use`s in the relevant crate/module, and if there are *no* uses, it would fallback on trying to use another item as the basis for the suggestion. But this was fragile, as illustrated in issue #87613 This PR instead identifies span of the first token after any inner attributes, and uses *that* as the fallback for the `use` suggestion. Fix #87613
2022-03-14Fix remaining meta-variable expression TODOsCaio-9/+16
2022-03-12Rollup merge of #94833 - c410-f3r:meta-take-2, r=petrochenkovMatthias Krüger-10/+147
[2/2] Implement macro meta-variable expression Final part of https://github.com/rust-lang/rust/pull/93545#issuecomment-1050963295 r? `@petrochenkov`
2022-03-11Implement macro meta-variable expressionCaio-10/+147
2022-03-11Move a `parse_tt` error case into a separate function.Nicholas Nethercote-24/+35
2022-03-11Make next_items a `SmallVec`.Nicholas Nethercote-3/+2
For consistency, and to make the code slightly nicer.
2022-03-11Move `eof_items` handling entirely within `inner_parse_loop`.Nicholas Nethercote-50/+40
Also rename `inner_parse_loop` as `parse_tt_inner`, because it's no longer just a loop.
2022-03-11Add a useful assertion.Nicholas Nethercote-0/+2
2022-03-11Disallow `TokenTree::{MetaVar,MetaVarExpr}` in matchers.Nicholas Nethercote-4/+5
They should only appear in transcribers.
2022-03-11Refactor the second half of `parse_tt`.Nicholas Nethercote-61/+68
The current structure makes it hard to tell that there are just four distinct code paths, depending on how many items there are in `bb_items` and `next_items`. This commit introduces a `match` that clarifies things.
2022-03-09Implement macro meta-variable expressionsCaio-43/+318
2022-03-04Auto merge of #94096 - cjgillot:ensure-stability, r=lcnrbors-0/+3
Ensure stability directives are checked in all cases Split off #93017 Stability and deprecation were not checked in all cases, for instance if a type error happened. This PR moves the check earlier in the pipeline to ensure the errors are emitted in all cases. r? `@lcnr`
2022-03-03Associate multiple with a crate too.Felix S. Klock II-9/+9
2022-03-03refactor: prepare to associate multiple spans with a module.Felix S. Klock II-5/+5
2022-03-03Rollup merge of #94555 - cuishuang:master, r=oli-obkMatthias Krüger-2/+2
all: fix some typos Signed-off-by: cuishuang <imcusg@gmail.com>