mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 02:39:20 +00:00
fix: symop codegen bug
This commit is contained in:
parent
21cb0bb4c1
commit
abb025afd4
6 changed files with 210 additions and 22 deletions
|
@ -183,6 +183,7 @@ pub struct PyCodeGenerator {
|
|||
module_type_loaded: bool,
|
||||
control_loaded: bool,
|
||||
convertors_loaded: bool,
|
||||
operators_loaded: bool,
|
||||
abc_loaded: bool,
|
||||
unit_size: usize,
|
||||
units: PyCodeGenStack,
|
||||
|
@ -202,6 +203,7 @@ impl PyCodeGenerator {
|
|||
module_type_loaded: false,
|
||||
control_loaded: false,
|
||||
convertors_loaded: false,
|
||||
operators_loaded: false,
|
||||
abc_loaded: false,
|
||||
unit_size: 0,
|
||||
units: PyCodeGenStack::empty(),
|
||||
|
@ -221,6 +223,7 @@ impl PyCodeGenerator {
|
|||
module_type_loaded: false,
|
||||
control_loaded: false,
|
||||
convertors_loaded: false,
|
||||
operators_loaded: false,
|
||||
abc_loaded: false,
|
||||
unit_size: 0,
|
||||
units: PyCodeGenStack::empty(),
|
||||
|
@ -240,6 +243,7 @@ impl PyCodeGenerator {
|
|||
self.module_type_loaded = false;
|
||||
self.control_loaded = false;
|
||||
self.convertors_loaded = false;
|
||||
self.operators_loaded = false;
|
||||
self.abc_loaded = false;
|
||||
}
|
||||
|
||||
|
@ -729,6 +733,11 @@ impl PyCodeGenerator {
|
|||
"int__" | "nat__" | "str__" | "float__" => {
|
||||
self.load_convertors();
|
||||
}
|
||||
"add" | "sub" | "mul" | "truediv" | "floordiv" | "mod" | "pow" | "eq" | "ne" | "lt"
|
||||
| "le" | "gt" | "ge" | "and_" | "or_" | "xor" | "lshift" | "rshift" | "pos" | "neg"
|
||||
| "invert" | "is_" | "is_not" | "call" => {
|
||||
self.load_operators();
|
||||
}
|
||||
// NoneType is not defined in the global scope, use `type(None)` instead
|
||||
"NoneType" => {
|
||||
self.emit_push_null();
|
||||
|
@ -3450,6 +3459,12 @@ impl PyCodeGenerator {
|
|||
self.convertors_loaded = true;
|
||||
}
|
||||
|
||||
fn load_operators(&mut self) {
|
||||
let mod_name = Identifier::public("operator");
|
||||
self.emit_import_all_instr(mod_name);
|
||||
self.operators_loaded = true;
|
||||
}
|
||||
|
||||
fn load_prelude_py(&mut self) {
|
||||
self.emit_global_import_items(
|
||||
Identifier::public("sys"),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue