move irep dump function definitions to irep.h
This commit is contained in:
parent
fc5ea838ab
commit
e80c3cc60b
|
@ -72,7 +72,138 @@ struct pic_irep {
|
||||||
pic_value pic_analyze(pic_state *, pic_value);
|
pic_value pic_analyze(pic_state *, pic_value);
|
||||||
struct pic_irep *pic_codegen(pic_state *, pic_value);
|
struct pic_irep *pic_codegen(pic_state *, pic_value);
|
||||||
|
|
||||||
void pic_dump_irep(pic_state *, struct pic_irep *);
|
inline void
|
||||||
|
pic_dump_code(pic_state *pic, pic_code c)
|
||||||
|
{
|
||||||
|
UNUSED(pic);
|
||||||
|
|
||||||
|
printf("[%2d] ", c.insn);
|
||||||
|
switch (c.insn) {
|
||||||
|
case OP_NOP:
|
||||||
|
puts("OP_NOP");
|
||||||
|
break;
|
||||||
|
case OP_POP:
|
||||||
|
puts("OP_POP");
|
||||||
|
break;
|
||||||
|
case OP_PUSHNIL:
|
||||||
|
puts("OP_PUSHNIL");
|
||||||
|
break;
|
||||||
|
case OP_PUSHTRUE:
|
||||||
|
puts("OP_PUSHTRUE");
|
||||||
|
break;
|
||||||
|
case OP_PUSHFALSE:
|
||||||
|
puts("OP_PUSHFALSE");
|
||||||
|
break;
|
||||||
|
case OP_PUSHINT:
|
||||||
|
printf("OP_PUSHINT\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_PUSHCHAR:
|
||||||
|
printf("OP_PUSHCHAR\t%c\n", c.u.c);
|
||||||
|
break;
|
||||||
|
case OP_PUSHCONST:
|
||||||
|
printf("OP_PUSHCONST\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_GREF:
|
||||||
|
printf("OP_GREF\t%i\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_GSET:
|
||||||
|
printf("OP_GSET\t%i\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_LREF:
|
||||||
|
printf("OP_LREF\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_LSET:
|
||||||
|
printf("OP_LSET\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_CREF:
|
||||||
|
printf("OP_CREF\t%d\t%d\n", c.u.r.depth, c.u.r.idx);
|
||||||
|
break;
|
||||||
|
case OP_CSET:
|
||||||
|
printf("OP_CSET\t%d\t%d\n", c.u.r.depth, c.u.r.idx);
|
||||||
|
break;
|
||||||
|
case OP_JMP:
|
||||||
|
printf("OP_JMP\t%x\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_JMPIF:
|
||||||
|
printf("OP_JMPIF\t%x\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_NOT:
|
||||||
|
puts("OP_NOT");
|
||||||
|
break;
|
||||||
|
case OP_CALL:
|
||||||
|
printf("OP_CALL\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_TAILCALL:
|
||||||
|
printf("OP_TAILCALL\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_RET:
|
||||||
|
printf("OP_RET\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_LAMBDA:
|
||||||
|
printf("OP_LAMBDA\t%d\n", c.u.i);
|
||||||
|
break;
|
||||||
|
case OP_CONS:
|
||||||
|
puts("OP_CONS");
|
||||||
|
break;
|
||||||
|
case OP_CAR:
|
||||||
|
puts("OP_CAR");
|
||||||
|
break;
|
||||||
|
case OP_NILP:
|
||||||
|
puts("OP_NILP");
|
||||||
|
break;
|
||||||
|
case OP_CDR:
|
||||||
|
puts("OP_CDR");
|
||||||
|
break;
|
||||||
|
case OP_ADD:
|
||||||
|
puts("OP_ADD");
|
||||||
|
break;
|
||||||
|
case OP_SUB:
|
||||||
|
puts("OP_SUB");
|
||||||
|
break;
|
||||||
|
case OP_MUL:
|
||||||
|
puts("OP_MUL");
|
||||||
|
break;
|
||||||
|
case OP_DIV:
|
||||||
|
puts("OP_DIV");
|
||||||
|
break;
|
||||||
|
case OP_MINUS:
|
||||||
|
puts("OP_MINUS");
|
||||||
|
break;
|
||||||
|
case OP_EQ:
|
||||||
|
puts("OP_EQ");
|
||||||
|
break;
|
||||||
|
case OP_LT:
|
||||||
|
puts("OP_LT");
|
||||||
|
break;
|
||||||
|
case OP_LE:
|
||||||
|
puts("OP_LE");
|
||||||
|
break;
|
||||||
|
case OP_STOP:
|
||||||
|
puts("OP_STOP");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
pic_dump_irep(pic_state *pic, struct pic_irep *irep)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
printf("## irep %p\n", (void *)irep);
|
||||||
|
printf("[clen = %zd, argc = %d, localc = %d]\n", irep->clen, irep->argc, irep->localc);
|
||||||
|
printf(":: cv_num = %d\n", irep->cv_num);
|
||||||
|
for (i = 0; i < irep->cv_num; ++i) {
|
||||||
|
printf(": %d -> %d\n", irep->cv_tbl[i], i);
|
||||||
|
}
|
||||||
|
for (i = 0; i < irep->clen; ++i) {
|
||||||
|
printf("%02x ", i);
|
||||||
|
pic_dump_code(pic, irep->code[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < irep->ilen; ++i) {
|
||||||
|
pic_dump_irep(pic, irep->irep[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
|
133
src/codegen.c
133
src/codegen.c
|
@ -1473,136 +1473,3 @@ pic_compile(pic_state *pic, pic_value obj)
|
||||||
|
|
||||||
return pic_proc_new_irep(pic, irep, NULL);
|
return pic_proc_new_irep(pic, irep, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
print_code(pic_state *pic, pic_code c)
|
|
||||||
{
|
|
||||||
UNUSED(pic);
|
|
||||||
|
|
||||||
printf("[%2d] ", c.insn);
|
|
||||||
switch (c.insn) {
|
|
||||||
case OP_NOP:
|
|
||||||
puts("OP_NOP");
|
|
||||||
break;
|
|
||||||
case OP_POP:
|
|
||||||
puts("OP_POP");
|
|
||||||
break;
|
|
||||||
case OP_PUSHNIL:
|
|
||||||
puts("OP_PUSHNIL");
|
|
||||||
break;
|
|
||||||
case OP_PUSHTRUE:
|
|
||||||
puts("OP_PUSHTRUE");
|
|
||||||
break;
|
|
||||||
case OP_PUSHFALSE:
|
|
||||||
puts("OP_PUSHFALSE");
|
|
||||||
break;
|
|
||||||
case OP_PUSHINT:
|
|
||||||
printf("OP_PUSHINT\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_PUSHCHAR:
|
|
||||||
printf("OP_PUSHCHAR\t%c\n", c.u.c);
|
|
||||||
break;
|
|
||||||
case OP_PUSHCONST:
|
|
||||||
printf("OP_PUSHCONST\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_GREF:
|
|
||||||
printf("OP_GREF\t%i\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_GSET:
|
|
||||||
printf("OP_GSET\t%i\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_LREF:
|
|
||||||
printf("OP_LREF\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_LSET:
|
|
||||||
printf("OP_LSET\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_CREF:
|
|
||||||
printf("OP_CREF\t%d\t%d\n", c.u.r.depth, c.u.r.idx);
|
|
||||||
break;
|
|
||||||
case OP_CSET:
|
|
||||||
printf("OP_CSET\t%d\t%d\n", c.u.r.depth, c.u.r.idx);
|
|
||||||
break;
|
|
||||||
case OP_JMP:
|
|
||||||
printf("OP_JMP\t%x\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_JMPIF:
|
|
||||||
printf("OP_JMPIF\t%x\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_NOT:
|
|
||||||
puts("OP_NOT");
|
|
||||||
break;
|
|
||||||
case OP_CALL:
|
|
||||||
printf("OP_CALL\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_TAILCALL:
|
|
||||||
printf("OP_TAILCALL\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_RET:
|
|
||||||
printf("OP_RET\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_LAMBDA:
|
|
||||||
printf("OP_LAMBDA\t%d\n", c.u.i);
|
|
||||||
break;
|
|
||||||
case OP_CONS:
|
|
||||||
puts("OP_CONS");
|
|
||||||
break;
|
|
||||||
case OP_CAR:
|
|
||||||
puts("OP_CAR");
|
|
||||||
break;
|
|
||||||
case OP_NILP:
|
|
||||||
puts("OP_NILP");
|
|
||||||
break;
|
|
||||||
case OP_CDR:
|
|
||||||
puts("OP_CDR");
|
|
||||||
break;
|
|
||||||
case OP_ADD:
|
|
||||||
puts("OP_ADD");
|
|
||||||
break;
|
|
||||||
case OP_SUB:
|
|
||||||
puts("OP_SUB");
|
|
||||||
break;
|
|
||||||
case OP_MUL:
|
|
||||||
puts("OP_MUL");
|
|
||||||
break;
|
|
||||||
case OP_DIV:
|
|
||||||
puts("OP_DIV");
|
|
||||||
break;
|
|
||||||
case OP_MINUS:
|
|
||||||
puts("OP_MINUS");
|
|
||||||
break;
|
|
||||||
case OP_EQ:
|
|
||||||
puts("OP_EQ");
|
|
||||||
break;
|
|
||||||
case OP_LT:
|
|
||||||
puts("OP_LT");
|
|
||||||
break;
|
|
||||||
case OP_LE:
|
|
||||||
puts("OP_LE");
|
|
||||||
break;
|
|
||||||
case OP_STOP:
|
|
||||||
puts("OP_STOP");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
pic_dump_irep(pic_state *pic, struct pic_irep *irep)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
printf("## irep %p\n", (void *)irep);
|
|
||||||
printf("[clen = %zd, argc = %d, localc = %d]\n", irep->clen, irep->argc, irep->localc);
|
|
||||||
printf(":: cv_num = %d\n", irep->cv_num);
|
|
||||||
for (i = 0; i < irep->cv_num; ++i) {
|
|
||||||
printf(": %d -> %d\n", irep->cv_tbl[i], i);
|
|
||||||
}
|
|
||||||
for (i = 0; i < irep->clen; ++i) {
|
|
||||||
printf("%02x ", i);
|
|
||||||
print_code(pic, irep->code[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < irep->ilen; ++i) {
|
|
||||||
pic_dump_irep(pic, irep->irep[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
4
src/vm.c
4
src/vm.c
|
@ -442,10 +442,8 @@ pic_apply_argv(pic_state *pic, struct pic_proc *proc, size_t argc, ...)
|
||||||
return pic_apply(pic, proc, v);
|
return pic_apply(pic, proc, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_code(pic_state *, pic_code);
|
|
||||||
|
|
||||||
#if VM_DEBUG
|
#if VM_DEBUG
|
||||||
# define OPCODE_EXEC_HOOK print_code(pic, c)
|
# define OPCODE_EXEC_HOOK pic_dump_code(pic, c)
|
||||||
#else
|
#else
|
||||||
# define OPCODE_EXEC_HOOK ((void)0)
|
# define OPCODE_EXEC_HOOK ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue