From b69ef5e0933d0ca96ebc5dcf17833555714a32df Mon Sep 17 00:00:00 2001 From: Shunsuke Shibayama Date: Thu, 22 Dec 2022 23:49:21 +0900 Subject: [PATCH] Update register.rs --- compiler/erg_compiler/context/register.rs | 50 ++++++++++++----------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/compiler/erg_compiler/context/register.rs b/compiler/erg_compiler/context/register.rs index 465b5522..4d901800 100644 --- a/compiler/erg_compiler/context/register.rs +++ b/compiler/erg_compiler/context/register.rs @@ -87,18 +87,19 @@ impl Context { None }; if let Some(_decl) = self.decls.remove(&ident.name) { - Err(TyCheckErrors::from(TyCheckError::duplicate_decl_error( - self.cfg.input.clone(), - line!() as usize, - sig.loc(), - self.caused_by(), - ident.name.inspect(), - ))) - } else { - let vi = VarInfo::new(sig_t, muty, vis, kind, None, self.impl_of(), py_name); - self.future_defined_locals.insert(ident.name.clone(), vi); - Ok(()) + if !self.cfg.python_compatible_mode { + return Err(TyCheckErrors::from(TyCheckError::duplicate_decl_error( + self.cfg.input.clone(), + line!() as usize, + sig.loc(), + self.caused_by(), + ident.name.inspect(), + ))); + } } + let vi = VarInfo::new(sig_t, muty, vis, kind, None, self.impl_of(), py_name); + self.future_defined_locals.insert(ident.name.clone(), vi); + Ok(()) } pub(crate) fn declare_sub( @@ -141,21 +142,22 @@ impl Context { py_name, ); if let Some(_decl) = self.decls.remove(name) { - Err(TyCheckErrors::from(TyCheckError::duplicate_decl_error( - self.cfg.input.clone(), - line!() as usize, - sig.loc(), - self.caused_by(), - name, - ))) - } else { - self.decls.insert(sig.ident.name.clone(), vi); - if errs.is_empty() { - Ok(()) - } else { - Err(errs) + if !self.cfg.python_compatible_mode { + return Err(TyCheckErrors::from(TyCheckError::duplicate_decl_error( + self.cfg.input.clone(), + line!() as usize, + sig.loc(), + self.caused_by(), + name, + ))); } } + self.decls.insert(sig.ident.name.clone(), vi); + if errs.is_empty() { + Ok(()) + } else { + Err(errs) + } } pub(crate) fn assign_var_sig(