stage1 重构代码
This commit is contained in:
@@ -370,49 +370,6 @@ int spl_prog_add_data(spl_prog_t *prog, void *ptr, usize size) {
|
||||
return vec_size(prog->gdata);
|
||||
}
|
||||
|
||||
spl_val_t spl_prog_emit(spl_prog_t *prog, uint16_t opcode, uint16_t type, spl_val_t imm) {
|
||||
spl_ins_t ins = {opcode, type, imm};
|
||||
spl_val_t addr = vec_size(prog->insns);
|
||||
vec_push(prog->insns, ins);
|
||||
return addr;
|
||||
}
|
||||
|
||||
int spl_prog_add_func_simple(spl_prog_t *prog, const char *name, spl_val_t nargs) {
|
||||
spl_func_t func = {0};
|
||||
if (!prog || !name)
|
||||
return -1;
|
||||
func.name = strdup(name);
|
||||
func.idx_of_strtab = 0;
|
||||
func.nargs = nargs;
|
||||
func.ninsns = 0;
|
||||
func.address = vec_size(prog->insns);
|
||||
vec_push(prog->funcs, func);
|
||||
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;
|
||||
spl_func_t *func = &vec_at(prog->funcs, func_idx);
|
||||
func->ninsns = vec_size(prog->insns) - func->address;
|
||||
}
|
||||
|
||||
int spl_prog_add_str(spl_prog_t *prog, const char *str) {
|
||||
if (!prog || !str)
|
||||
return -1;
|
||||
vec_push(prog->strtab, strdup(str));
|
||||
return (int)vec_size(prog->strtab) - 1;
|
||||
}
|
||||
|
||||
spl_func_t *spl_prog_get_func(spl_prog_t *prog, const char *name) {
|
||||
if (!prog || !name)
|
||||
return NULL;
|
||||
@@ -445,10 +402,14 @@ const char *opcode_name[] = {
|
||||
const char *spl_opcode_name(spl_opcode_t opcode) { return opcode_name[opcode]; }
|
||||
const char *spl_type_tag_name(spl_type_t type) {
|
||||
switch (type) {
|
||||
case SPL_VOID: return "void";
|
||||
case SPL_BOOL: return "bool";
|
||||
case SPL_I8: return "i8";
|
||||
case SPL_U8: return "u8";
|
||||
case SPL_VOID:
|
||||
return "void";
|
||||
case SPL_BOOL:
|
||||
return "bool";
|
||||
case SPL_I8:
|
||||
return "i8";
|
||||
case SPL_U8:
|
||||
return "u8";
|
||||
case SPL_I16:
|
||||
return "i16";
|
||||
case SPL_U16:
|
||||
|
||||
Reference in New Issue
Block a user