stage1 实现部分ast2ir内容并重构stage0 引入并重构ir2vm 构建系统修改部分
This commit is contained in:
1 parent
3d57260f3f
commit
34df303b56
17 files changed
+636
-1800
No files matched your search
@@ -43,6 +43,61 @@ void spl_prog_drop(spl_prog_t *prog) {
|
||||
prog->debug = NULL;
|
||||
}
|
||||
|
||||
void spl_prog_dump(spl_prog_t *prog) {
|
||||
printf(";; SPL bytecode dump: \n");
|
||||
printf(";; ninsns=%zu nfuncs=%zu nnatives=%zu nstrs=%zu\n\n", vec_size(prog->insns),
|
||||
vec_size(prog->funcs), vec_size(prog->natives), vec_size(prog->strtab));
|
||||
|
||||
if (vec_size(prog->funcs) > 0) {
|
||||
printf(";; --- functions ---\n");
|
||||
for (usize i = 0; i < vec_size(prog->funcs); i++) {
|
||||
spl_vm_func_t *f = &vec_at(prog->funcs, i);
|
||||
printf(" %s nargs=%zu ninsns=%zu addr=%zu\n", f->name ? f->name : "(anon)", f->nargs,
|
||||
f->ninsns, f->address);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (vec_size(prog->natives) > 0) {
|
||||
printf(";; --- natives ---\n");
|
||||
for (int i = 0; i < (int)vec_size(prog->natives); i++) {
|
||||
spl_vm_native_t *n = &vec_at(prog->natives, i);
|
||||
printf(" %s\n", n->name ? n->name : "(anon)");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (vec_size(prog->strtab) > 0) {
|
||||
printf(";; --- string table ---\n");
|
||||
for (int i = 0; i < (int)vec_size(prog->strtab); i++) {
|
||||
printf(" %d: \"%s\"\n", i, vec_at(prog->strtab, i));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf(";; --- instructions ---\n");
|
||||
for (usize i = 0; i < vec_size(prog->insns); i++) {
|
||||
spl_vm_ins_t *ins = &vec_at(prog->insns, i);
|
||||
printf("%4zd: %s", i, spl_vm_opcode_name((spl_vm_opcode_t)ins->opcode));
|
||||
if (ins->type != SPL_VOID)
|
||||
printf(" %s", spl_vm_type_kind_name((spl_vm_kind_t)ins->type));
|
||||
printf(" %zd", ins->imm);
|
||||
|
||||
/* annotate jumps / calls */
|
||||
if (ins->opcode == SPL_JMP || ins->opcode == SPL_BZ || ins->opcode == SPL_BNZ) {
|
||||
spl_vm_val_t target = i + 1 + ins->imm;
|
||||
printf(" ; -> %zu", target);
|
||||
} else if (ins->opcode == SPL_CALL) {
|
||||
printf(" ; nargs=%zu, from stack", ins->imm);
|
||||
} else if (ins->opcode == SPL_CALLI) {
|
||||
printf(" ; indirect call");
|
||||
} else if (ins->opcode == SPL_GADDR) {
|
||||
printf(" ; gdata[%zu]", ins->imm);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- LE read/write helpers ---- */
|
||||
|
||||
static inline spl_vm_val_t rd64(const unsigned char **p) {
|
||||
|
||||
Reference in new issue
Block a user