mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-01 13:11:11 +00:00
Fix a scope escaping bug
This commit is contained in:
parent
fee464945b
commit
06e0b9c1ae
3 changed files with 18 additions and 15 deletions
|
@ -1036,7 +1036,10 @@ impl Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn check_decls_and_pop(&mut self) -> Result<Context, TyCheckErrors> {
|
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())
|
Ok(self.pop())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -642,9 +642,9 @@ impl Context {
|
||||||
self.grow(__name__, ContextKind::Proc, vis, Some(tv_cache));
|
self.grow(__name__, ContextKind::Proc, vis, Some(tv_cache));
|
||||||
let (obj, const_t) = match self.eval_const_block(&def.body.block) {
|
let (obj, const_t) = match self.eval_const_block(&def.body.block) {
|
||||||
Ok(obj) => (obj.clone(), v_enum(set! {obj})),
|
Ok(obj) => (obj.clone(), v_enum(set! {obj})),
|
||||||
Err(e) => {
|
Err(errs) => {
|
||||||
self.pop();
|
self.pop();
|
||||||
return Err(e);
|
return Err(errs);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if let Some(spec) = sig.return_t_spec.as_ref() {
|
if let Some(spec) = sig.return_t_spec.as_ref() {
|
||||||
|
@ -657,14 +657,14 @@ impl Context {
|
||||||
PreRegister,
|
PreRegister,
|
||||||
false,
|
false,
|
||||||
)
|
)
|
||||||
.map_err(|err| {
|
.map_err(|errs| {
|
||||||
self.pop();
|
self.pop();
|
||||||
err
|
errs
|
||||||
})?;
|
})?;
|
||||||
self.sub_unify(&const_t, &spec_t, def.body.loc(), None)
|
self.sub_unify(&const_t, &spec_t, def.body.loc(), None)
|
||||||
.map_err(|err| {
|
.map_err(|errs| {
|
||||||
self.pop();
|
self.pop();
|
||||||
err
|
errs
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
self.pop();
|
self.pop();
|
||||||
|
@ -694,14 +694,14 @@ impl Context {
|
||||||
PreRegister,
|
PreRegister,
|
||||||
false,
|
false,
|
||||||
)
|
)
|
||||||
.map_err(|err| {
|
.map_err(|errs| {
|
||||||
self.pop();
|
self.pop();
|
||||||
err
|
errs
|
||||||
})?;
|
})?;
|
||||||
self.sub_unify(&const_t, &spec_t, def.body.loc(), None)
|
self.sub_unify(&const_t, &spec_t, def.body.loc(), None)
|
||||||
.map_err(|err| {
|
.map_err(|errs| {
|
||||||
self.pop();
|
self.pop();
|
||||||
err
|
errs
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
self.pop();
|
self.pop();
|
||||||
|
|
|
@ -469,9 +469,9 @@ impl ASTLowerer {
|
||||||
hir::Record::new(record.l_brace, record.r_brace, hir::RecordAttrs::empty());
|
hir::Record::new(record.l_brace, record.r_brace, hir::RecordAttrs::empty());
|
||||||
self.ctx.grow("<record>", ContextKind::Dummy, Private, None);
|
self.ctx.grow("<record>", ContextKind::Dummy, Private, None);
|
||||||
for attr in record.attrs.into_iter() {
|
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();
|
self.pop_append_errs();
|
||||||
e
|
errs
|
||||||
})?;
|
})?;
|
||||||
hir_record.push(attr);
|
hir_record.push(attr);
|
||||||
}
|
}
|
||||||
|
@ -998,9 +998,9 @@ impl ASTLowerer {
|
||||||
if let Err(errs) = self.ctx.preregister(&lambda.body) {
|
if let Err(errs) = self.ctx.preregister(&lambda.body) {
|
||||||
self.errs.extend(errs);
|
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();
|
self.pop_append_errs();
|
||||||
e
|
errs
|
||||||
})?;
|
})?;
|
||||||
let (non_default_params, default_params): (Vec<_>, Vec<_>) = self
|
let (non_default_params, default_params): (Vec<_>, Vec<_>) = self
|
||||||
.ctx
|
.ctx
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue