Extended syntax::{fold, ast_map} to include lifetimes.

Part of this required added an override of `fold_type_method` in the
Folder for Ctx impl; it follows the same pattern as `fold_method`.

Also, as a drive-by fix, I moved all of the calls to `folder.new_id`
in syntax::fold's no-op default traversal to really be the first
statement in each function.

  * This is to uphold the invariant that `folder.new_id` is always
    called first (an unfortunate requirement of the current `ast_map`
    code), an invariant that we seemingly were breaking in e.g. the
    previous `noop_fold_block`.

  * Now it should be easier to see when adding new code that this
    invariant must be upheld.

  * (note that the breakage in `noop_fold_block` may not have mattered
    so much previously, since the only thing that blocks can bind are
    lifetimes, which I am only adding support for now.)
This commit is contained in:
Felix S. Klock II 2014-04-11 11:28:43 +02:00
parent 0e30f07abc
commit b25fe99331
3 changed files with 86 additions and 33 deletions

View file

@ -272,6 +272,7 @@ pub fn monomorphic_fn(ccx: &CrateContext,
}
// Ugh -- but this ensures any new variants won't be forgotten
ast_map::NodeLifetime(..) |
ast_map::NodeExpr(..) |
ast_map::NodeStmt(..) |
ast_map::NodeArg(..) |