From 95a9455fa5da8cc8db3485bb344024d286bfc406 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Wed, 1 Jan 2020 01:50:43 +0900 Subject: [PATCH] Fix links --- src/appendix/code-index.md | 4 ++-- src/high-level-overview.md | 2 +- src/macro-expansion.md | 28 ++++++++++++++-------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/appendix/code-index.md b/src/appendix/code-index.md index 1c8d1d707..062293f7e 100644 --- a/src/appendix/code-index.md +++ b/src/appendix/code-index.md @@ -21,9 +21,9 @@ Item | Kind | Short description | Chapter | `Query` | struct | Represents the result of query to the `Compiler` interface and allows stealing, borrowing, and returning the results of compiler passes. | [The Rustc Driver and Interface] | [src/librustc_interface/queries.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/queries/struct.Query.html) `Rib` | struct | Represents a single scope of names | [Name resolution] | [src/librustc_resolve/lib.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/late/struct.Rib.html) `Session` | struct | The data associated with a compilation session | [The parser], [The Rustc Driver and Interface] | [src/librustc/session/mod.html](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html) -`SourceFile` | struct | Part of the `SourceMap`. Maps AST nodes to their source code for a single source file. Was previously called FileMap | [The parser] | [src/libsyntax_pos/lib.rs](https://doc.rust-lang.org/nightly/nightly-rustc/syntax/source_map/struct.SourceFile.html) +`SourceFile` | struct | Part of the `SourceMap`. Maps AST nodes to their source code for a single source file. Was previously called FileMap | [The parser] | [src/librustc_span/lib.rs](https://doc.rust-lang.org/nightly/nightly-rustc/syntax/source_map/struct.SourceFile.html) `SourceMap` | struct | Maps AST nodes to their source code. It is composed of `SourceFile`s. Was previously called CodeMap | [The parser] | [src/libsyntax/source_map.rs](https://doc.rust-lang.org/nightly/nightly-rustc/syntax/source_map/struct.SourceMap.html) -`Span` | struct | A location in the user's source code, used for error reporting primarily | [Emitting Diagnostics] | [src/libsyntax_pos/span_encoding.rs](https://doc.rust-lang.org/nightly/nightly-rustc/syntax_pos/struct.Span.html) +`Span` | struct | A location in the user's source code, used for error reporting primarily | [Emitting Diagnostics] | [src/librustc_span/span_encoding.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html) `StringReader` | struct | This is the lexer used during parsing. It consumes characters from the raw source code being compiled and produces a series of tokens for use by the rest of the parser | [The parser] | [src/librustc_parse/lexer/mod.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/lexer/struct.StringReader.html) `syntax::token_stream::TokenStream` | struct | An abstract sequence of tokens, organized into `TokenTree`s | [The parser], [Macro expansion] | [src/libsyntax/tokenstream.rs](https://doc.rust-lang.org/nightly/nightly-rustc/syntax/tokenstream/struct.TokenStream.html) `TraitDef` | struct | This struct contains a trait's definition with type information | [The `ty` modules] | [src/librustc/ty/trait_def.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/trait_def/struct.TraitDef.html) diff --git a/src/high-level-overview.md b/src/high-level-overview.md index 625559034..e4b9ff372 100644 --- a/src/high-level-overview.md +++ b/src/high-level-overview.md @@ -36,7 +36,7 @@ rustc_codegen rustc_borrowck ... rustc_metadata syntax / \ / \ - syntax_pos syntax_ext + rustc_span rustc_builtin_macros ``` The `rustc_driver` crate, at the top of this lattice, is effectively diff --git a/src/macro-expansion.md b/src/macro-expansion.md index a3a3ae762..9280fa9bc 100644 --- a/src/macro-expansion.md +++ b/src/macro-expansion.md @@ -1,6 +1,6 @@ # Macro expansion -> `libsyntax`, `librustc_expand`, and `libsyntax_ext` are all undergoing +> `libsyntax`, `librustc_expand`, and `librustc_builtin_macros` are all undergoing > refactoring, so some of the links in this chapter may be broken. Macro expansion happens during parsing. `rustc` has two parsers, in fact: the @@ -10,7 +10,7 @@ before name resolution, macros are expanded using these portions of the code. The macro parser, in turn, may call the normal Rust parser when it needs to bind a metavariable (e.g. `$my_expr`) while parsing the contents of a macro invocation. The code for macro expansion is in -[`src/libsyntax_expand/mbe/`][code_dir]. This chapter aims to explain how macro +[`src/librustc_expand/mbe/`][code_dir]. This chapter aims to explain how macro expansion works. ### Example @@ -64,7 +64,7 @@ invocations. Interestingly, both are done by the macro parser. Basically, the macro parser is like an NFA-based regex parser. It uses an algorithm similar in spirit to the [Earley parsing algorithm](https://en.wikipedia.org/wiki/Earley_parser). The macro parser is -defined in [`src/libsyntax_expand/mbe/macro_parser.rs`][code_mp]. +defined in [`src/librustc_expand/mbe/macro_parser.rs`][code_mp]. The interface of the macro parser is as follows (this is slightly simplified): @@ -113,7 +113,7 @@ normal Rust parser. As mentioned above, both definitions and invocations of macros are parsed using the macro parser. This is extremely non-intuitive and self-referential. The code to parse macro _definitions_ is in -[`src/libsyntax_expand/mbe/macro_rules.rs`][code_mr]. It defines the pattern for +[`src/librustc_expand/mbe/macro_rules.rs`][code_mr]. It defines the pattern for matching for a macro definition as `$( $lhs:tt => $rhs:tt );+`. In other words, a `macro_rules` definition should have in its body at least one occurrence of a token tree followed by `=>` followed by another token tree. When the compiler @@ -142,7 +142,7 @@ the parse is ambiguous, while if there are no matches at all, there is a syntax error. For more information about the macro parser's implementation, see the comments -in [`src/libsyntax_expand/mbe/macro_parser.rs`][code_mp]. +in [`src/librustc_expand/mbe/macro_parser.rs`][code_mp]. ### Hygiene @@ -208,10 +208,10 @@ TODO TODO: maybe something about macros 2.0? -[code_dir]: https://github.com/rust-lang/rust/tree/master/src/libsyntax_expand/mbe -[code_mp]: https://doc.rust-lang.org/nightly/nightly-rustc/syntax_expand/mbe/macro_parser -[code_mr]: https://doc.rust-lang.org/nightly/nightly-rustc/syntax_expand/mbe/macro_rules -[code_parse_int]: https://doc.rust-lang.org/nightly/nightly-rustc/syntax_expand/mbe/macro_parser/fn.parse.html +[code_dir]: https://github.com/rust-lang/rust/tree/master/src/librustc_expand/mbe +[code_mp]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_parser +[code_mr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_rules +[code_parse_int]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_parser/fn.parse.html [parsing]: ./the-parser.html @@ -356,11 +356,11 @@ Vadim Petrochenkov: Here's some preliminary data I prepared. Vadim Petrochenkov: Below I'll assume #62771 and #62086 has landed. -Vadim Petrochenkov: Where to find the code: libsyntax_pos/hygiene.rs - +Vadim Petrochenkov: Where to find the code: librustc_span/hygiene.rs - structures related to hygiene and expansion that are kept in global data (can -be accessed from any Ident without any context) libsyntax_pos/lib.rs - some +be accessed from any Ident without any context) librustc_span/lib.rs - some secondary methods like macro backtrace using primary methods from hygiene.rs -libsyntax_ext - implementations of built-in macros (including macro attributes +librustc_builtin_macros - implementations of built-in macros (including macro attributes and derives) and some other early code generation facilities like injection of standard library imports or generation of test harness. libsyntax/config.rs - implementation of cfg/cfg_attr (they treated specially from other macros), @@ -375,8 +375,8 @@ AST libsyntax/ext/placeholder.rs - the part of expand.rs responsible for "integrating the results back into AST" basicallly, "placeholder" is a temporary AST node replaced with macro expansion result nodes libsyntax/ext/builer.rs - helper functions for building AST for built-in macros -in libsyntax_ext (and user-defined syntactic plugins previously), can probably -be moved into libsyntax_ext these days libsyntax/ext/proc_macro.rs + +in librustc_builtin_macros (and user-defined syntactic plugins previously), can probably +be moved into librustc_builtin_macros these days libsyntax/ext/proc_macro.rs + libsyntax/ext/proc_macro_server.rs - interfaces between the compiler and the stable proc_macro library, converting tokens and token streams between the two representations and sending them through C ABI libsyntax/ext/tt -