Only remember blocks that have a DefMap
This commit is contained in:
parent
4c8ee9a531
commit
9b13e1bb91
@ -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(
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user