diff --git a/src/codegen.c b/src/codegen.c index 67b2f09d..812dd357 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -709,6 +709,7 @@ print_irep(pic_state *pic, struct pic_irep *irep) printf("## irep %p\n", irep); printf("[clen = %zd, ccapa = %zd, argc = %d, localc = %d]\n", irep->clen, irep->ccapa, irep->argc, irep->localc); for (i = 0; i < irep->clen; ++i) { + printf("[%2d] ", irep->code[i].insn); switch (irep->code[i].insn) { case OP_POP: puts("OP_POP"); diff --git a/src/expand.c b/src/expand.c index ed498362..5095ddee 100644 --- a/src/expand.c +++ b/src/expand.c @@ -44,6 +44,12 @@ expand(pic_state *pic, pic_value obj, struct syntactic_env *env) { int ai = pic_gc_arena_preserve(pic); +#if DEBUG + printf("expanding..."); + pic_debug(pic, obj); + puts(""); +#endif + switch (pic_type(obj)) { case PIC_TT_SYMBOL: { return obj; @@ -147,14 +153,21 @@ pic_expand(pic_state *pic, pic_value obj) env.tbl = pic->global_tbl; +#if DEBUG + puts("before expand:"); + pic_debug(pic, obj); + puts(""); +#endif + v = expand(pic, obj, &env); pic_gc_arena_restore(pic, ai); pic_gc_protect(pic, v); #if DEBUG - puts("expanded:"); + puts("after expand:"); pic_debug(pic, v); + puts(""); #endif return v; diff --git a/src/vm.c b/src/vm.c index a4ec93f4..c52eb707 100644 --- a/src/vm.c +++ b/src/vm.c @@ -157,9 +157,15 @@ pic_get_args(pic_state *pic, const char *format, ...) return i; } +#if VM_DEBUG +# define OPCODE_EXEC_HOOK printf("OP = %d\n", c.insn) +#else +# define OPCODE_EXEC_HOOK ((void)0) +#endif + #if PIC_DIRECT_THREADED_VM # define VM_LOOP JUMP; -# define CASE(x) L_##x: +# define CASE(x) L_##x: OPCODE_EXEC_HOOK; # define NEXT c = *++pc; JUMP; # define JUMP c = *pc; goto *oplabels[pc->insn]; # define VM_LOOP_END @@ -207,6 +213,19 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv) argc = pic_length(pic, argv) + 1; +#if VM_DEBUG + puts("== booting VM..."); + printf(" proc = "); + pic_debug(pic, pic_obj_value(proc)); + puts(""); + printf(" argv = "); + pic_debug(pic, argv); + puts(""); + printf(" irep = "); + print_irep(pic, proc->u.irep); + puts("\nLet's go!"); +#endif + PUSH(pic_obj_value(proc)); for (i = 1; i < argc; ++i) { PUSH(pic_car(pic, argv));