diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-05-28 18:06:01 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-06-01 20:28:48 +0300 |
| commit | ed1bbbb5458b9ee2fbcf7a41b9aeb3203ebca807 (patch) | |
| tree | 48b4f74bf4af4632de5d6f9a870d777fa3f61893 /src/librustc_resolve | |
| parent | 340b91e2ffdd884be5c260144305b518e5a22a9b (diff) | |
| download | rust-ed1bbbb5458b9ee2fbcf7a41b9aeb3203ebca807.tar.gz rust-ed1bbbb5458b9ee2fbcf7a41b9aeb3203ebca807.zip | |
rustc: remove Res::Upvar.
Diffstat (limited to 'src/librustc_resolve')
| -rw-r--r-- | src/librustc_resolve/lib.rs | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index c8ec7367edc..ff54643989b 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -612,7 +612,6 @@ impl<'a> PathSource<'a> { | Res::Def(DefKind::Const, _) | Res::Def(DefKind::Static, _) | Res::Local(..) - | Res::Upvar(..) | Res::Def(DefKind::Fn, _) | Res::Def(DefKind::Method, _) | Res::Def(DefKind::AssocConst, _) @@ -2204,7 +2203,7 @@ impl<'a> Resolver<'a> { if let Some(res) = self.ribs[ns][i].bindings.get(&ident).cloned() { // The ident resolves to a type parameter or local variable. return Some(LexicalScopeBinding::Res( - self.adjust_local_res(ns, i, res, record_used, path_span) + self.validate_res_from_ribs(ns, i, res, record_used, path_span), )); } @@ -4006,14 +4005,16 @@ impl<'a> Resolver<'a> { diag); } - // Resolve a local definition, potentially adjusting for closures. - fn adjust_local_res(&mut self, - ns: Namespace, - rib_index: usize, - mut res: Res, - record_used: bool, - span: Span) -> Res { - debug!("adjust_local_res"); + // Validate a local resolution (from ribs), potentially recording closure upvars. + fn validate_res_from_ribs( + &mut self, + ns: Namespace, + rib_index: usize, + res: Res, + record_used: bool, + span: Span, + ) -> Res { + debug!("validate_res_from_ribs({:?})", res); let ribs = &self.ribs[ns][rib_index + 1..]; // An invalid forward use of a type parameter from a previous default. @@ -4035,9 +4036,6 @@ impl<'a> Resolver<'a> { } match res { - Res::Upvar(..) => { - span_bug!(span, "unexpected {:?} in bindings", res) - } Res::Local(var_id) => { use ResolutionError::*; let mut res_err = None; @@ -4049,14 +4047,9 @@ impl<'a> Resolver<'a> { // Nothing to do. Continue. } ClosureRibKind(function_id) => { - res = Res::Upvar(var_id); - match self.upvars.entry(function_id).or_default().entry(var_id) { - indexmap::map::Entry::Occupied(_) => continue, - indexmap::map::Entry::Vacant(entry) => { - if record_used { - entry.insert(Upvar { span }); - } - } + if record_used { + self.upvars.entry(function_id).or_default() + .entry(var_id).or_insert(Upvar { span }); } } ItemRibKind | FnItemRibKind | AssocItemRibKind => { |
