diff options
Diffstat (limited to 'pit/src/native.c')
| -rw-r--r-- | pit/src/native.c | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/pit/src/native.c b/pit/src/native.c index 8ef886d..7d61a50 100644 --- a/pit/src/native.c +++ b/pit/src/native.c @@ -39,9 +39,10 @@ i64 pit_fprintf(pit_runtime *rt, void *vf, char *format, ...) { va_list ap; va_start(ap, format); char buf[8192]; - pit_printf_handler h[1]; + pit_printf_handler h[2]; h[0].specifier = 'v'; h[0].callback = pit_dump_printf_callback; - int ret = pit_vsnprintf_helper(buf, sizeof(buf) - 1, format, ap, h, 1, rt); + h[1].specifier = 'V'; h[1].callback = pit_dump_readable_printf_callback; + int ret = pit_vsnprintf_helper(buf, sizeof(buf) - 1, format, ap, h, 2, rt); buf[ret] = 0; va_end(ap); fputs(buf, f); @@ -101,27 +102,6 @@ pit_value pit_value_bytes_new_file(pit_runtime *rt, char *path) { return ret; } -/* check invariants - these should always hold between top-level evaluations! */ -static void check_invariants(pit_runtime *rt) { - if (rt->saved_bindings->next != 0) { - pit_error(rt, "leaked saved_bindings memory! %ld", rt->saved_bindings->next); - } - if (rt->expr_stack->next != 0) { - pit_error(rt, "leaked expr_stack memory! %ld", rt->expr_stack->next); - } - if (rt->result_stack->next != 0) { - pit_error(rt, "leaked result_stack memory! %ld", rt->result_stack->next); - } - if (rt->compilation_stack->next != 0) { - pit_error(rt, "leaked compilation_stack memory! %ld", rt->compilation_stack->next); - } - if (rt->traversal->next != 0) { - pit_error(rt, "leaked traversal memory! %ld", rt->traversal->next); - } - if (rt->callstack->next != 0) { - pit_error(rt, "leaked callstack memory! %ld", rt->result_stack->next); - } -} pit_value pit_load_file(pit_runtime *rt, char *path) { pit_lexer lex; pit_parser parse; @@ -135,13 +115,13 @@ pit_value pit_load_file(pit_runtime *rt, char *path) { } pit_parser_from_lexer(&parse, &lex); while (p = pit_parse(rt, &parse, &eof), !eof) { - check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; + pit_check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; compiled = pit_compile(rt, p); - check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; + pit_check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; ret = pit_vm_eval(rt, compiled); - check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; + pit_check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; } - check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; + pit_check_invariants(rt); if (pit_runtime_print_error(rt)) return PIT_NIL; return ret; } @@ -149,7 +129,7 @@ void pit_repl(pit_runtime *rt) { size_t bufcap = 8; char *buf = malloc(bufcap); i64 len = 0; - check_invariants(rt); if (pit_runtime_print_error(rt)) exit(1); + pit_check_invariants(rt); if (pit_runtime_print_error(rt)) exit(1); setbuf(stdout, NULL); printf("> "); while ((buf[len++] = (char) getchar()) != EOF) { @@ -180,9 +160,9 @@ void pit_repl(pit_runtime *rt) { pit_lex_bytes(&lex, buf, len); pit_parser_from_lexer(&parse, &lex); while (p = pit_parse(rt, &parse, &eof), !eof) { - check_invariants(rt); + pit_check_invariants(rt); res = pit_vm_eval(rt, pit_compile(rt, pit_macroexpand(rt, p))); - check_invariants(rt); + pit_check_invariants(rt); } if (pit_runtime_print_error(rt)) { rt->error = PIT_NIL; |
