rust/compiler
Aaron Hill a93c4f05de
Implement token-based handling of attributes during expansion
This PR modifies the macro expansion infrastructure to handle attributes
in a fully token-based manner. As a result:

* Derives macros no longer lose spans when their input is modified
  by eager cfg-expansion. This is accomplished by performing eager
  cfg-expansion on the token stream that we pass to the derive
  proc-macro
* Inner attributes now preserve spans in all cases, including when we
  have multiple inner attributes in a row.

This is accomplished through the following changes:

* New structs `AttrAnnotatedTokenStream` and `AttrAnnotatedTokenTree` are introduced.
  These are very similar to a normal `TokenTree`, but they also track
  the position of attributes and attribute targets within the stream.
  They are built when we collect tokens during parsing.
  An `AttrAnnotatedTokenStream` is converted to a regular `TokenStream` when
  we invoke a macro.
* Token capturing and `LazyTokenStream` are modified to work with
  `AttrAnnotatedTokenStream`. A new `ReplaceRange` type is introduced, which
  is created during the parsing of a nested AST node to make the 'outer'
  AST node aware of the attributes and attribute target stored deeper in the token stream.
* When we need to perform eager cfg-expansion (either due to `#[derive]` or `#[cfg_eval]`),
we tokenize and reparse our target, capturing additional information about the locations of
`#[cfg]` and `#[cfg_attr]` attributes at any depth within the target.
This is a performance optimization, allowing us to perform less work
in the typical case where captured tokens never have eager cfg-expansion run.
2021-04-11 01:31:36 -04:00
..
rustc use jemallocator in rustc/rustdoc 2021-04-04 14:10:26 -07:00
rustc_apfloat Use iter::zip in compiler/ 2021-03-26 09:32:31 -07:00
rustc_arena Remove (lots of) dead code 2021-03-27 22:16:33 -04:00
rustc_ast Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_ast_lowering Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_ast_passes rustc: Add a new wasm ABI 2021-04-08 08:03:18 -07:00
rustc_ast_pretty Use AnonConst for asm! constants 2021-04-06 12:35:41 +01:00
rustc_attr Allow specifying alignment for functions 2021-04-05 17:36:51 -04:00
rustc_builtin_macros Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_codegen_cranelift Fix outdated crate names in compiler docs 2021-04-08 11:12:14 -05:00
rustc_codegen_llvm Auto merge of #84004 - mattico:print-target-features-improvements, r=petrochenkov 2021-04-09 21:14:50 +00:00
rustc_codegen_ssa Fix closed over variables not available in debuginfo for Windows MSVC 2021-04-08 14:08:56 -04:00
rustc_data_structures Fix outdated crate names in compiler docs 2021-04-08 11:12:14 -05:00
rustc_driver Rollup merge of #83895 - eggyal:issue-83883, r=jyn514 2021-04-06 17:42:31 +02:00
rustc_error_codes Bump cfgs 2021-04-04 14:57:05 -04:00
rustc_errors Document compiler/ with -Aprivate-intra-doc-links 2021-04-05 08:38:09 -04:00
rustc_expand Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_feature Auto merge of #84008 - Dylan-DPC:rollup-invxvg8, r=Dylan-DPC 2021-04-08 19:38:54 +00:00
rustc_fs_util Optimize away a fs::metadata call. 2021-01-06 08:33:15 -08:00
rustc_graphviz Remove (lots of) dead code 2021-03-27 22:16:33 -04:00
rustc_hir Rollup merge of #83980 - pierwill:fix-compiler-librustc-names, r=davidtwco 2021-04-08 20:29:58 +02:00
rustc_hir_pretty Use AnonConst for asm! constants 2021-04-06 12:35:41 +01:00
rustc_incremental Also profile finishing the encoding. 2021-03-30 18:10:08 +02:00
rustc_index Add fixme comment to revert change once const_panic is stable 2021-04-03 13:07:03 +02:00
rustc_infer Fix outdated crate names in compiler docs 2021-04-08 11:12:14 -05:00
rustc_interface Fix outdated crate names in rustc_interface::callbacks 2021-04-07 11:45:27 -05:00
rustc_lexer Fix outdated crate names in compiler docs 2021-04-08 11:12:14 -05:00
rustc_lint Rollup merge of #83980 - pierwill:fix-compiler-librustc-names, r=davidtwco 2021-04-08 20:29:58 +02:00
rustc_lint_defs Fix rustc_lint_defs documentation typo 2021-04-03 12:00:28 -03:00
rustc_llvm Categorize and explain target features support 2021-04-09 10:16:04 -05:00
rustc_macros Use iter::zip in compiler/ 2021-03-26 09:32:31 -07:00
rustc_metadata Rollup merge of #83820 - petrochenkov:nolinkargs, r=nagisa 2021-04-05 00:24:33 +02:00
rustc_middle Auto merge of #83870 - jackh726:binder-refactor-fix, r=nikomatsakis 2021-04-09 01:50:01 +00:00
rustc_mir Auto merge of #83870 - jackh726:binder-refactor-fix, r=nikomatsakis 2021-04-09 01:50:01 +00:00
rustc_mir_build rustc: Add a new wasm ABI 2021-04-08 08:03:18 -07:00
rustc_parse Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_parse_format Rollup merge of #83348 - osa1:issue83344, r=jackh726 2021-03-28 01:33:13 +09:00
rustc_passes Rollup merge of #83916 - Amanieu:asm_anonconst, r=petrochenkov 2021-04-07 13:07:14 +02:00
rustc_plugin_impl Remove hir::Item::attrs. 2021-03-09 19:27:50 +01:00
rustc_privacy Update with comments 2021-03-23 17:16:20 +00:00
rustc_query_impl Auto merge of #83207 - oli-obk:valtree2, r=lcnr 2021-04-02 10:28:12 +00:00
rustc_query_system Fix outdated crate names in compiler docs 2021-04-08 11:12:14 -05:00
rustc_resolve Auto merge of #83870 - jackh726:binder-refactor-fix, r=nikomatsakis 2021-04-09 01:50:01 +00:00
rustc_save_analysis Remove hir::CrateItem. 2021-03-30 20:31:06 +02:00
rustc_serialize Auto merge of #83465 - michaelwoerister:safe-read_raw_bytes, r=cjgillot 2021-03-26 01:28:59 +00:00
rustc_session Implement token-based handling of attributes during expansion 2021-04-11 01:31:36 -04:00
rustc_span rustc: Add a new wasm ABI 2021-04-08 08:03:18 -07:00
rustc_symbol_mangling Rollup merge of #80525 - devsnek:wasm64, r=nagisa 2021-04-05 00:24:23 +02:00
rustc_target Auto merge of #84008 - Dylan-DPC:rollup-invxvg8, r=Dylan-DPC 2021-04-08 19:38:54 +00:00
rustc_trait_selection Rollup merge of #83980 - pierwill:fix-compiler-librustc-names, r=davidtwco 2021-04-08 20:29:58 +02:00
rustc_traits Auto merge of #83207 - oli-obk:valtree2, r=lcnr 2021-04-02 10:28:12 +00:00
rustc_ty_utils Track bound vars 2021-03-31 10:15:27 -04:00
rustc_type_ir Remove nightly features in rustc_type_ir 2021-04-03 10:00:09 +02:00
rustc_typeck Auto merge of #83956 - estebank:issue-83892, r=varkor 2021-04-09 04:19:25 +00:00