stage1 修复类型体内部函数前向引用时 CALL 地址错误
This commit is contained in:
@@ -390,6 +390,15 @@ int spl_prog_add_func_simple(spl_prog_t *prog, const char *name, spl_val_t nargs
|
||||
return (int)vec_size(prog->funcs) - 1;
|
||||
}
|
||||
|
||||
int spl_prog_update_func(spl_prog_t *prog, int func_idx, const char *name, spl_val_t nargs) {
|
||||
if (!prog || func_idx < 0 || func_idx >= (int)vec_size(prog->funcs))
|
||||
return spl_prog_add_func_simple(prog, name, nargs);
|
||||
spl_func_t *func = &vec_at(prog->funcs, func_idx);
|
||||
func->address = vec_size(prog->insns);
|
||||
func->nargs = nargs;
|
||||
return func_idx;
|
||||
}
|
||||
|
||||
void spl_prog_end_func(spl_prog_t *prog, int func_idx) {
|
||||
if (!prog || func_idx < 0 || func_idx >= (int)vec_size(prog->funcs))
|
||||
return;
|
||||
|
||||
@@ -210,6 +210,7 @@ spl_native_t *spl_prog_get_native(spl_prog_t *prog, const char *name);
|
||||
/* High-level program construction helpers */
|
||||
spl_val_t spl_prog_emit(spl_prog_t *prog, uint16_t opcode, uint16_t type, spl_val_t imm);
|
||||
int spl_prog_add_func_simple(spl_prog_t *prog, const char *name, spl_val_t nargs);
|
||||
int spl_prog_update_func(spl_prog_t *prog, int func_idx, const char *name, spl_val_t nargs);
|
||||
void spl_prog_end_func(spl_prog_t *prog, int func_idx);
|
||||
int spl_prog_add_str(spl_prog_t *prog, const char *str);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user