From e80c3cc60b61a969865dcb0ca0f516f869d80d47 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Wed, 19 Mar 2014 19:41:24 +0900 Subject: [PATCH] move irep dump function definitions to irep.h --- include/picrin/irep.h | 133 +++++++++++++++++++++++++++++++++++++++++- src/codegen.c | 133 ------------------------------------------ src/vm.c | 4 +- 3 files changed, 133 insertions(+), 137 deletions(-) diff --git a/include/picrin/irep.h b/include/picrin/irep.h index 7aa52965..3494e320 100644 --- a/include/picrin/irep.h +++ b/include/picrin/irep.h @@ -72,7 +72,138 @@ struct pic_irep { pic_value pic_analyze(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) } diff --git a/src/codegen.c b/src/codegen.c index 214b271c..2c9230be 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1473,136 +1473,3 @@ pic_compile(pic_state *pic, pic_value obj) 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]); - } -} diff --git a/src/vm.c b/src/vm.c index 8fd5cc8f..31b4028b 100644 --- a/src/vm.c +++ b/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); } -void print_code(pic_state *, pic_code); - #if VM_DEBUG -# define OPCODE_EXEC_HOOK print_code(pic, c) +# define OPCODE_EXEC_HOOK pic_dump_code(pic, c) #else # define OPCODE_EXEC_HOOK ((void)0) #endif