Fix a scope escaping bug

This commit is contained in:
Shunsuke Shibayama 2022-12-21 14:32:46 +09:00
parent fee464945b
commit 06e0b9c1ae
3 changed files with 18 additions and 15 deletions

View file

@ -1036,7 +1036,10 @@ impl Context {
}
pub(crate) fn check_decls_and_pop(&mut self) -> Result<Context, TyCheckErrors> {
self.check_decls()?;
self.check_decls().map_err(|errs| {
self.pop();
errs
})?;
Ok(self.pop())
}

View file

@ -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();

View file

@ -469,9 +469,9 @@ impl ASTLowerer {
hir::Record::new(record.l_brace, record.r_brace, hir::RecordAttrs::empty());
self.ctx.grow("<record>", 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