diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-04-01 19:42:27 +0200 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2021-09-03 23:36:22 +0200 |
| commit | fed4410def78cf459c746100817d22487621b88c (patch) | |
| tree | 4fe94cb037ca562094ebf36e4af37058199cfa7f | |
| parent | 1baac86670227658962d895157d27cfd4e4ea70c (diff) | |
| download | rust-fed4410def78cf459c746100817d22487621b88c.tar.gz rust-fed4410def78cf459c746100817d22487621b88c.zip | |
Replace Vec by Option.
| -rw-r--r-- | compiler/rustc_ast_lowering/src/expr.rs | 32 | ||||
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 17 |
2 files changed, 14 insertions, 35 deletions
diff --git a/compiler/rustc_ast_lowering/src/expr.rs b/compiler/rustc_ast_lowering/src/expr.rs index 80633e141fc..16cd7a0bcdd 100644 --- a/compiler/rustc_ast_lowering/src/expr.rs +++ b/compiler/rustc_ast_lowering/src/expr.rs @@ -1186,9 +1186,7 @@ impl<'hir> LoweringContext<'_, 'hir> { } } None => self - .loop_scopes - .last() - .cloned() + .loop_scope .map(|id| Ok(self.lower_node_id(id))) .unwrap_or(Err(hir::LoopIdError::OutsideLoopScope)), }; @@ -1208,18 +1206,9 @@ impl<'hir> LoweringContext<'_, 'hir> { } fn with_catch_scope<T>(&mut self, catch_id: NodeId, f: impl FnOnce(&mut Self) -> T) -> T { - let len = self.catch_scopes.len(); - self.catch_scopes.push(catch_id); - + let old_scope = self.catch_scope.replace(catch_id); let result = f(self); - assert_eq!( - len + 1, - self.catch_scopes.len(), - "catch scopes should be added and removed in stack order" - ); - - self.catch_scopes.pop().unwrap(); - + self.catch_scope = old_scope; result } @@ -1228,17 +1217,9 @@ impl<'hir> LoweringContext<'_, 'hir> { let was_in_loop_condition = self.is_in_loop_condition; self.is_in_loop_condition = false; - let len = self.loop_scopes.len(); - self.loop_scopes.push(loop_id); - + let old_scope = self.loop_scope.replace(loop_id); let result = f(self); - assert_eq!( - len + 1, - self.loop_scopes.len(), - "loop scopes should be added and removed in stack order" - ); - - self.loop_scopes.pop().unwrap(); + self.loop_scope = old_scope; self.is_in_loop_condition = was_in_loop_condition; @@ -1565,8 +1546,7 @@ impl<'hir> LoweringContext<'_, 'hir> { unstable_span, ); let thin_attrs = ThinVec::from(attrs); - let catch_scope = self.catch_scopes.last().copied(); - let ret_expr = if let Some(catch_node) = catch_scope { + let ret_expr = if let Some(catch_node) = self.catch_scope { let target_id = Ok(self.lower_node_id(catch_node)); self.arena.alloc(self.expr( try_span, diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 4e1aab459b1..5391d4b0c93 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -64,7 +64,6 @@ use rustc_span::{Span, DUMMY_SP}; use smallvec::SmallVec; use std::collections::BTreeMap; -use std::mem; use tracing::{debug, trace}; macro_rules! arena_vec { @@ -117,8 +116,8 @@ struct LoweringContext<'a, 'hir: 'a> { /// outside of an `async fn`. current_item: Option<Span>, - catch_scopes: Vec<NodeId>, - loop_scopes: Vec<NodeId>, + catch_scope: Option<NodeId>, + loop_scope: Option<NodeId>, is_in_loop_condition: bool, is_in_trait_impl: bool, is_in_dyn_type: bool, @@ -323,8 +322,8 @@ pub fn lower_crate<'a, 'hir>( bodies: BTreeMap::new(), modules: BTreeMap::new(), attrs: BTreeMap::default(), - catch_scopes: Vec::new(), - loop_scopes: Vec::new(), + catch_scope: None, + loop_scope: None, is_in_loop_condition: false, is_in_trait_impl: false, is_in_dyn_type: false, @@ -911,11 +910,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { let was_in_loop_condition = self.is_in_loop_condition; self.is_in_loop_condition = false; - let catch_scopes = mem::take(&mut self.catch_scopes); - let loop_scopes = mem::take(&mut self.loop_scopes); + let catch_scope = self.catch_scope.take(); + let loop_scope = self.loop_scope.take(); let ret = f(self); - self.catch_scopes = catch_scopes; - self.loop_scopes = loop_scopes; + self.catch_scope = catch_scope; + self.loop_scope = loop_scope; self.is_in_loop_condition = was_in_loop_condition; |
