This commit is contained in:
Aleksey Kladov 2019-03-17 12:43:25 +03:00
parent 4d7fa6d30b
commit 3a77023365

View File

@ -10,12 +10,12 @@
/// ///
/// Computing `CrateDefMap` can be partitioned into several logically /// Computing `CrateDefMap` can be partitioned into several logically
/// independent "phases". The phases are mutually recursive though, there's no /// independent "phases". The phases are mutually recursive though, there's no
/// stric ordering. /// strict ordering.
/// ///
/// ## Collecting RawItems /// ## Collecting RawItems
/// ///
/// This happens in the `raw` module, which parses a single source file into a /// This happens in the `raw` module, which parses a single source file into a
/// set of top-level items. Nested importa are desugared to flat imports in /// set of top-level items. Nested imports are desugared to flat imports in
/// this phase. Macro calls are represented as a triple of (Path, Option<Name>, /// this phase. Macro calls are represented as a triple of (Path, Option<Name>,
/// TokenTree). /// TokenTree).
/// ///
@ -24,22 +24,28 @@
/// This happens in the `collector` module. In this phase, we recursively walk /// This happens in the `collector` module. In this phase, we recursively walk
/// tree of modules, collect raw items from submodules, populate module scopes /// tree of modules, collect raw items from submodules, populate module scopes
/// with defined items (so, we assign item ids in this phase) and record the set /// with defined items (so, we assign item ids in this phase) and record the set
/// of unresovled imports and macros. /// of unresolved imports and macros.
/// ///
/// While we walk tree of modules, we also record macro_rules defenitions and /// While we walk tree of modules, we also record macro_rules definitions and
/// expand calls to macro_rules defined macros. /// expand calls to macro_rules defined macros.
/// ///
/// ## Resolving Imports /// ## Resolving Imports
/// ///
/// TBD /// We maintain a list of currently unresolved imports. On every iteration, we
/// try to resolve some imports from this list. If the import is resolved, we
/// record it, by adding an item to current module scope and, if necessary, by
/// recursively populating glob imports.
/// ///
/// ## Resolving Macros /// ## Resolving Macros
/// ///
/// While macro_rules from the same crate use a global mutable namespace, macros /// macro_rules from the same crate use a global mutable namespace. We expand
/// from other crates (including proc-macros) can be used with `foo::bar!` /// them immediately, when we collect modules.
/// syntax.
/// ///
/// TBD; /// Macros from other crates (including proc-macros) can be used with
/// `foo::bar!` syntax. We handle them similarly to imports. There's a list of
/// unexpanded macros. On every iteration, we try to resolve each macro call
/// path and, upon success, we run macro expansion and "collect module" phase
/// on the result
mod per_ns; mod per_ns;
mod raw; mod raw;