fix: symop codegen bug

This commit is contained in:
Shunsuke Shibayama 2023-09-09 17:29:19 +09:00
parent 21cb0bb4c1
commit abb025afd4
6 changed files with 210 additions and 22 deletions

View file

@ -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"),