From 06e0b9c1aeafabd52de9b136f4a294de9b28bc4e Mon Sep 17 00:00:00 2001 From: Shunsuke Shibayama Date: Wed, 21 Dec 2022 14:32:46 +0900 Subject: [PATCH] Fix a scope escaping bug --- compiler/erg_compiler/context/mod.rs | 5 ++++- compiler/erg_compiler/context/register.rs | 20 ++++++++++---------- compiler/erg_compiler/lower.rs | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/compiler/erg_compiler/context/mod.rs b/compiler/erg_compiler/context/mod.rs index 40ab4f68..56fd2251 100644 --- a/compiler/erg_compiler/context/mod.rs +++ b/compiler/erg_compiler/context/mod.rs @@ -1036,7 +1036,10 @@ impl Context { } pub(crate) fn check_decls_and_pop(&mut self) -> Result { - self.check_decls()?; + self.check_decls().map_err(|errs| { + self.pop(); + errs + })?; Ok(self.pop()) } diff --git a/compiler/erg_compiler/context/register.rs b/compiler/erg_compiler/context/register.rs index 38003292..465b5522 100644 --- a/compiler/erg_compiler/context/register.rs +++ b/compiler/erg_compiler/context/register.rs @@ -642,9 +642,9 @@ impl Context { self.grow(__name__, ContextKind::Proc, vis, Some(tv_cache)); let (obj, const_t) = match self.eval_const_block(&def.body.block) { Ok(obj) => (obj.clone(), v_enum(set! {obj})), - Err(e) => { + Err(errs) => { self.pop(); - return Err(e); + return Err(errs); } }; if let Some(spec) = sig.return_t_spec.as_ref() { @@ -657,14 +657,14 @@ impl Context { PreRegister, false, ) - .map_err(|err| { + .map_err(|errs| { self.pop(); - err + errs })?; self.sub_unify(&const_t, &spec_t, def.body.loc(), None) - .map_err(|err| { + .map_err(|errs| { self.pop(); - err + errs })?; } self.pop(); @@ -694,14 +694,14 @@ impl Context { PreRegister, false, ) - .map_err(|err| { + .map_err(|errs| { self.pop(); - err + errs })?; self.sub_unify(&const_t, &spec_t, def.body.loc(), None) - .map_err(|err| { + .map_err(|errs| { self.pop(); - err + errs })?; } self.pop(); diff --git a/compiler/erg_compiler/lower.rs b/compiler/erg_compiler/lower.rs index 3a00dee7..22f76fbf 100644 --- a/compiler/erg_compiler/lower.rs +++ b/compiler/erg_compiler/lower.rs @@ -469,9 +469,9 @@ impl ASTLowerer { hir::Record::new(record.l_brace, record.r_brace, hir::RecordAttrs::empty()); self.ctx.grow("", ContextKind::Dummy, Private, None); for attr in record.attrs.into_iter() { - let attr = self.lower_def(attr).map_err(|e| { + let attr = self.lower_def(attr).map_err(|errs| { self.pop_append_errs(); - e + errs })?; hir_record.push(attr); } @@ -998,9 +998,9 @@ impl ASTLowerer { if let Err(errs) = self.ctx.preregister(&lambda.body) { self.errs.extend(errs); } - let body = self.lower_block(lambda.body).map_err(|e| { + let body = self.lower_block(lambda.body).map_err(|errs| { self.pop_append_errs(); - e + errs })?; let (non_default_params, default_params): (Vec<_>, Vec<_>) = self .ctx