diff --git a/Makefile b/Makefile index 59f3ada0..677a3673 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ build: cd src; \ yacc -d parse.y; \ lex scan.l - $(CC) -Wall -o bin/picrin -I./include -lreadline src/main.c src/state.c src/gc.c src/pair.c src/port.c src/symbol.c src/value.c src/y.tab.c src/lex.yy.c src/bool.c src/vm.c src/init.c src/number.c src/time.c src/codegen.c + $(CC) -Wall -o bin/picrin -I./include -lreadline src/main.c src/state.c src/gc.c src/pair.c src/port.c src/symbol.c src/value.c src/y.tab.c src/lex.yy.c src/bool.c src/vm.c src/init.c src/number.c src/time.c src/codegen.c src/error.c clean: rm -f src/y.tab.c src/y.tab.h src/lex.yy.c diff --git a/src/error.c b/src/error.c new file mode 100644 index 00000000..9efcea1d --- /dev/null +++ b/src/error.c @@ -0,0 +1,11 @@ +#include +#include + +#include "picrin.h" + +void +pic_raise(pic_state *pic, const char *str) +{ + puts(str); + abort(); +} diff --git a/src/vm.c b/src/vm.c index 01ba27cd..bbe0c4ea 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1,4 +1,3 @@ -#include #include #include @@ -64,7 +63,6 @@ pic_value pic_run(pic_state *pic, struct pic_proc *proc, pic_value args) { struct pic_code *pc; - pic_value val; int ai = pic_gc_arena_preserve(pic); #if PIC_DIRECT_THREADED_VM @@ -232,33 +230,25 @@ pic_run(pic_state *pic, struct pic_proc *proc, pic_value args) NEXT; } CASE(OP_STOP) { - goto STOP; - } - } VM_LOOP_END; + pic_value val; - STOP: - val = POP(); + val = POP(); #if VM_DEBUG - puts("**VM END STATE**"); - printf("stbase = %p\nsp = %p\n", pic->stbase, pic->sp); - printf("cibase = %p\nci = %p\n", pic->cibase, pic->ci); - if (pic->stbase != pic->sp) { - pic_value *sp; - printf("* stack trace:"); - for (sp = pic->stbase; pic->sp != sp; ++sp) { - pic_debug(pic, *sp); - puts(""); - } - } + puts("**VM END STATE**"); + printf("stbase = %p\nsp = %p\n", pic->stbase, pic->sp); + printf("cibase = %p\nci = %p\n", pic->cibase, pic->ci); + if (pic->stbase != pic->sp) { + pic_value *sp; + printf("* stack trace:"); + for (sp = pic->stbase; pic->sp != sp; ++sp) { + pic_debug(pic, *sp); + puts(""); + } + } #endif - return val; -} - -void -pic_raise(pic_state *pic, const char *str) -{ - puts(str); - abort(); + return val; + } + } VM_LOOP_END; }