Only remember blocks that have a DefMap

This commit is contained in:
Jonas Schievink 2021-04-04 03:16:26 +02:00
parent 4c8ee9a531
commit 9b13e1bb91
2 changed files with 8 additions and 6 deletions

View file

@ -317,7 +317,7 @@ impl Body {
) -> impl Iterator<Item = (BlockId, Arc<DefMap>)> + '_ {
self.block_scopes
.iter()
.filter_map(move |block| db.block_def_map(*block).map(|map| (*block, map)))
.map(move |block| (*block, db.block_def_map(*block).expect("block ID without DefMap")))
}
fn new(

View file

@ -673,12 +673,14 @@ impl ExprCollector<'_> {
let block_loc =
BlockLoc { ast_id, module: self.expander.def_map.module_id(self.expander.module) };
let block_id = self.db.intern_block(block_loc);
self.body.block_scopes.push(block_id);
let opt_def_map = self.db.block_def_map(block_id);
let has_def_map = opt_def_map.is_some();
let def_map = opt_def_map.unwrap_or_else(|| self.expander.def_map.clone());
let module = if has_def_map { def_map.root() } else { self.expander.module };
let (module, def_map) = match self.db.block_def_map(block_id) {
Some(def_map) => {
self.body.block_scopes.push(block_id);
(def_map.root(), def_map)
}
None => (self.expander.module, self.expander.def_map.clone()),
};
let prev_def_map = mem::replace(&mut self.expander.def_map, def_map);
let prev_local_module = mem::replace(&mut self.expander.module, module);
let prev_statements = std::mem::take(&mut self.statements_in_scope);