mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 02:39:20 +00:00
fix: Python 3.7~3.8 bugs
This commit is contained in:
parent
75c1ac733c
commit
aacdca31b8
6 changed files with 35 additions and 4 deletions
|
@ -187,6 +187,7 @@ pub struct PyCodeGenerator {
|
|||
union_loaded: bool,
|
||||
fake_generic_loaded: bool,
|
||||
abc_loaded: bool,
|
||||
builtins_loaded: bool,
|
||||
unit_size: usize,
|
||||
units: PyCodeGenStack,
|
||||
fresh_gen: SharedFreshNameGenerator,
|
||||
|
@ -209,6 +210,7 @@ impl PyCodeGenerator {
|
|||
union_loaded: false,
|
||||
fake_generic_loaded: false,
|
||||
abc_loaded: false,
|
||||
builtins_loaded: false,
|
||||
unit_size: 0,
|
||||
units: PyCodeGenStack::empty(),
|
||||
fresh_gen: SharedFreshNameGenerator::new("codegen"),
|
||||
|
@ -231,6 +233,7 @@ impl PyCodeGenerator {
|
|||
union_loaded: false,
|
||||
fake_generic_loaded: false,
|
||||
abc_loaded: false,
|
||||
builtins_loaded: false,
|
||||
unit_size: 0,
|
||||
units: PyCodeGenStack::empty(),
|
||||
fresh_gen: self.fresh_gen.clone(),
|
||||
|
@ -253,6 +256,7 @@ impl PyCodeGenerator {
|
|||
self.union_loaded = false;
|
||||
self.fake_generic_loaded = false;
|
||||
self.abc_loaded = false;
|
||||
self.builtins_loaded = false;
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -2456,13 +2460,18 @@ impl PyCodeGenerator {
|
|||
Some(7) => self.emit_with_instr_307(args),
|
||||
_ => todo!("not supported Python version"),
|
||||
},
|
||||
"sum" if self.py_version.minor <= Some(7) && args.get_kw("start").is_some() => {
|
||||
self.load_builtins();
|
||||
self.emit_load_name_instr(Identifier::private("#sum"));
|
||||
self.emit_args_311(args, Name, true);
|
||||
}
|
||||
other if local.ref_t().is_poly_type_meta() && other != "classof" => {
|
||||
if self.py_version.minor <= Some(9) {
|
||||
self.load_fake_generic();
|
||||
self.emit_load_name_instr(Identifier::private("#FakeGenericAlias"));
|
||||
let mut args = args;
|
||||
args.insert_pos(0, PosArg::new(Expr::Accessor(Accessor::Ident(local))));
|
||||
self.emit_args_311(args, Name, false);
|
||||
self.emit_args_311(args, Name, true);
|
||||
} else {
|
||||
self.emit_load_name_instr(local);
|
||||
self.emit_index_args(args);
|
||||
|
@ -3573,6 +3582,13 @@ impl PyCodeGenerator {
|
|||
);
|
||||
}
|
||||
|
||||
fn load_builtins(&mut self) {
|
||||
self.emit_global_import_items(
|
||||
Identifier::public("_erg_builtins"),
|
||||
vec![(Identifier::public("sum"), Some(Identifier::private("#sum")))],
|
||||
);
|
||||
}
|
||||
|
||||
pub fn emit(&mut self, hir: HIR) -> CodeObj {
|
||||
log!(info "the code-generating process has started.{RESET}");
|
||||
self.unit_size += 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue