mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 12:14:43 +00:00
fix(transpiler): importing _erg_float
bug
This commit is contained in:
parent
4e2aa5c054
commit
b31d19d19b
1 changed files with 18 additions and 2 deletions
|
@ -304,6 +304,8 @@ impl ScriptGenerator {
|
||||||
.replace("from _erg_bool import Bool", "")
|
.replace("from _erg_bool import Bool", "")
|
||||||
.replace("from _erg_str import StrMut", "")
|
.replace("from _erg_str import StrMut", "")
|
||||||
.replace("from _erg_str import Str", "")
|
.replace("from _erg_str import Str", "")
|
||||||
|
.replace("from _erg_float import FloatMut", "")
|
||||||
|
.replace("from _erg_float import Float", "")
|
||||||
.replace("from _erg_array import Array", "")
|
.replace("from _erg_array import Array", "")
|
||||||
.replace("from _erg_range import Range", "")
|
.replace("from _erg_range import Range", "")
|
||||||
.replace("from _erg_result import Error", "")
|
.replace("from _erg_result import Error", "")
|
||||||
|
@ -350,12 +352,14 @@ impl ScriptGenerator {
|
||||||
if !self.builtin_types_loaded {
|
if !self.builtin_types_loaded {
|
||||||
self.load_builtin_controls_if_not();
|
self.load_builtin_controls_if_not();
|
||||||
if self.range_ops_loaded {
|
if self.range_ops_loaded {
|
||||||
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_float.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
||||||
} else if self.in_op_loaded {
|
} else if self.in_op_loaded {
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_int.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_int.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_nat.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_nat.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_bool.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_bool.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_str.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_str.py"));
|
||||||
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_float.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
||||||
} else {
|
} else {
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_result.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_result.py"));
|
||||||
|
@ -363,6 +367,7 @@ impl ScriptGenerator {
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_nat.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_nat.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_bool.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_bool.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_str.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_str.py"));
|
||||||
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_float.py"));
|
||||||
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
self.prelude += &Self::replace_import(include_str!("lib/std/_erg_array.py"));
|
||||||
}
|
}
|
||||||
self.builtin_types_loaded = true;
|
self.builtin_types_loaded = true;
|
||||||
|
@ -728,6 +733,7 @@ impl ScriptGenerator {
|
||||||
code += &" ".repeat(self.level);
|
code += &" ".repeat(self.level);
|
||||||
code += &format!("return {tmp}\n");
|
code += &format!("return {tmp}\n");
|
||||||
self.prelude += &code;
|
self.prelude += &code;
|
||||||
|
self.level -= 1;
|
||||||
format!("{tmp_func}()")
|
format!("{tmp_func}()")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,9 +864,19 @@ impl ScriptGenerator {
|
||||||
|
|
||||||
// TODO: trait definition
|
// TODO: trait definition
|
||||||
fn transpile_def(&mut self, mut def: Def) -> String {
|
fn transpile_def(&mut self, mut def: Def) -> String {
|
||||||
|
// HACK: allow reference to local variables in tmp functions
|
||||||
|
let mut code = if self.level == 0 {
|
||||||
|
"".to_string()
|
||||||
|
} else {
|
||||||
|
format!(
|
||||||
|
"global {}\n{}",
|
||||||
|
Self::transpile_ident(def.sig.ident().clone()),
|
||||||
|
" ".repeat(self.level)
|
||||||
|
)
|
||||||
|
};
|
||||||
match def.sig {
|
match def.sig {
|
||||||
Signature::Var(var) => {
|
Signature::Var(var) => {
|
||||||
let mut code = format!("{} = ", Self::transpile_ident(var.ident));
|
code += &format!("{} = ", Self::transpile_ident(var.ident));
|
||||||
if def.body.block.len() > 1 {
|
if def.body.block.len() > 1 {
|
||||||
let name = format!("instant_block_{}__", self.fresh_var_n);
|
let name = format!("instant_block_{}__", self.fresh_var_n);
|
||||||
self.fresh_var_n += 1;
|
self.fresh_var_n += 1;
|
||||||
|
@ -875,7 +891,7 @@ impl ScriptGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Signature::Subr(subr) => {
|
Signature::Subr(subr) => {
|
||||||
let mut code = format!(
|
code += &format!(
|
||||||
"def {}({}):\n",
|
"def {}({}):\n",
|
||||||
Self::transpile_ident(subr.ident),
|
Self::transpile_ident(subr.ident),
|
||||||
self.transpile_params(subr.params)
|
self.transpile_params(subr.params)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue