Auto merge of #40597 - jseyfried:improve_span_expn_info, r=jseyfried

macros: improve `Span`'s expansion information

This PR improves `Span`'s expansion information. More specifically:
 - It refactors AST node span construction to preserve expansion information.
   - Today, we only use the underlying tokens' `BytePos`s, throwing away the `ExpnId`s.
   - This improves the accuracy of AST nodes' expansion information, fixing #30506.
 - It refactors `span.expn_id: ExpnId` to `span.ctxt: SyntaxContext` and removes `ExpnId`.
   - This gives all tokens as much hygiene information as `Ident`s.
   - This is groundwork for procedural macros 2.0 `TokenStream` API.
   - This is also groundwork for declarative macros 2.0, which will need this hygiene information for some non-`Ident` tokens.
 - It simplifies processing of spans' expansion information throughout the compiler.
 - It fixes #40649.
 - It fixes #39450 and fixes part of #23480.

r? @nrc
This commit is contained in:
bors 2017-03-30 06:48:52 +00:00
commit fe151194e9
67 changed files with 934 additions and 1410 deletions

View file

@ -2,10 +2,7 @@ error[E0433]: failed to resolve. Use of undeclared type or module `m`
--> $DIR/macro_path_as_generic_bound.rs:17:6
|
17 | foo!(m::m2::A);
| -----^^^^^^^^--
| | |
| | Use of undeclared type or module `m`
| in this macro invocation
| ^^^^^^^^ Use of undeclared type or module `m`
error: cannot continue compilation due to previous error