diff options
| author | LLLL Colonq <llll@colonq> | 2026-07-21 19:40:45 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-07-21 19:40:45 -0400 |
| commit | 88f0059c7e8e7680e39611e865b0356bc510adc8 (patch) | |
| tree | 1328b80cf74069e5aac114a6a041e0ccfe9cb189 /pit/src/native.c | |
| parent | ca8daa96caed9d53db95336bad917d2e03e7b00f (diff) | |
pit: Hash table annotations, better dumper
Diffstat (limited to 'pit/src/native.c')
| -rw-r--r-- | pit/src/native.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/pit/src/native.c b/pit/src/native.c index a62f82e..89d9c9b 100644 --- a/pit/src/native.c +++ b/pit/src/native.c @@ -23,16 +23,24 @@ i64 pit_lex_file(pit_lexer *ret, char *path) { return 0; } +static i64 pit_dump_to_file_callback(u8 *buf, i64 len, void *data) { + if (fwrite(buf, sizeof(u8), (size_t) len, (FILE *) data) != (size_t) len) return -1; + return 0; +} +void pit_dump_to_file(pit_runtime *rt, void *vf, pit_value v, bool readable) { + pit_dump_with_callback(rt, v, readable, pit_dump_to_file_callback, vf); +} + bool pit_runtime_print_error(pit_runtime *rt) { if (!pit_value_eq(rt->error, PIT_NIL)) { - char buf[1024] = {0}; - for (i64 i = 0; i < rt->backtrace->next; ++i) { - pit_annotated_ref *a = pit_vec_get(pit_annotated_ref)(rt->backtrace, i); - if (a == NULL) continue; - fprintf(stderr, "on line %ld, column %ld\n", a->annotation.line, a->annotation.column); - } - i64 end = pit_dump(rt, buf, sizeof(buf) - 1, rt->error, false); buf[end] = 0; - fprintf(stderr, "error at line %ld, column %ld: %s\n", rt->error_line, rt->error_column, buf); + // for (i64 i = 0; i < rt->backtrace->next; ++i) { + // pit_annotated_ref *a = pit_vec_get(pit_annotated_ref)(rt->backtrace, i); + // if (a == NULL) continue; + // fprintf(stderr, "on line %ld, column %ld\n", a->annotation.line, a->annotation.column); + // } + fprintf(stderr, "error at line %ld, column %ld:", rt->error_line, rt->error_column); + pit_dump_to_file(rt, stderr, rt->error, false); + fprintf(stderr, "\n"); return true; } return false; @@ -149,10 +157,9 @@ void pit_repl(pit_runtime *rt) { rt->error = PIT_NIL; printf("> "); } else { - char dumpbuf[1024] = {0}; - pit_dump(rt, dumpbuf, sizeof(dumpbuf) - 1, res, true); + pit_dump_to_file(rt, stdout, res, true); pit_gc(rt); - printf("%s\n> ", dumpbuf); + printf("\n> "); } len = 0; } @@ -173,19 +180,15 @@ static pit_value impl_diagnostics(pit_runtime *rt, pit_value args, void *data) { static pit_value impl_print(pit_runtime *rt, pit_value args, void *data) { (void) data; pit_value x = pit_value_cons_car(rt, args); - char buf[1024] = {0}; - pit_dump(rt, buf, sizeof(buf), x, true); - buf[1023] = 0; - puts(buf); + pit_dump_to_file(rt, stdout, x, true); + printf("\n"); return x; } static pit_value impl_princ(pit_runtime *rt, pit_value args, void *data) { (void) data; pit_value x = pit_value_cons_car(rt, args); - char buf[1024] = {0}; - pit_dump(rt, buf, sizeof(buf), x, false); - buf[1023] = 0; - puts(buf); + pit_dump_to_file(rt, stdout, x, false); + printf("\n"); return x; } static pit_value impl_load(pit_runtime *rt, pit_value args, void *data) { |
