mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 20:34:44 +00:00
Update codegen.rs
This commit is contained in:
parent
d0456ec1ee
commit
eadfe9794a
1 changed files with 14 additions and 0 deletions
|
@ -831,6 +831,17 @@ impl CodeGenerator {
|
||||||
let name = sig.ident.inspect().clone();
|
let name = sig.ident.inspect().clone();
|
||||||
let mut make_function_flag = 0u8;
|
let mut make_function_flag = 0u8;
|
||||||
let params = self.gen_param_names(&sig.params);
|
let params = self.gen_param_names(&sig.params);
|
||||||
|
if !sig.params.defaults.is_empty() {
|
||||||
|
let defaults_len = sig.params.defaults.len();
|
||||||
|
sig.params
|
||||||
|
.defaults
|
||||||
|
.into_iter()
|
||||||
|
.for_each(|default| self.emit_expr(default.default_val));
|
||||||
|
self.write_instr(BUILD_TUPLE);
|
||||||
|
self.write_arg(defaults_len as u8);
|
||||||
|
self.stack_dec_n(defaults_len - 1);
|
||||||
|
make_function_flag += MakeFunctionFlags::Defaults as u8;
|
||||||
|
}
|
||||||
let code = self.emit_block(body.block, Some(name.clone()), params);
|
let code = self.emit_block(body.block, Some(name.clone()), params);
|
||||||
if !self.cur_block_codeobj().cellvars.is_empty() {
|
if !self.cur_block_codeobj().cellvars.is_empty() {
|
||||||
let cellvars_len = self.cur_block_codeobj().cellvars.len() as u8;
|
let cellvars_len = self.cur_block_codeobj().cellvars.len() as u8;
|
||||||
|
@ -852,6 +863,9 @@ impl CodeGenerator {
|
||||||
self.write_arg(make_function_flag);
|
self.write_arg(make_function_flag);
|
||||||
// stack_dec: <code obj> + <name> -> <function>
|
// stack_dec: <code obj> + <name> -> <function>
|
||||||
self.stack_dec();
|
self.stack_dec();
|
||||||
|
if make_function_flag & MakeFunctionFlags::Defaults as u8 != 0 {
|
||||||
|
self.stack_dec();
|
||||||
|
}
|
||||||
self.emit_store_instr(sig.ident, Name);
|
self.emit_store_instr(sig.ident, Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue