summaryrefslogtreecommitdiff
path: root/pit/src/native.c
diff options
context:
space:
mode:
Diffstat (limited to 'pit/src/native.c')
-rw-r--r--pit/src/native.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/pit/src/native.c b/pit/src/native.c
index 89d9c9b..2ffba0a 100644
--- a/pit/src/native.c
+++ b/pit/src/native.c
@@ -23,9 +23,9 @@ 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;
+static pit_dump_condition 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 PIT_DUMP_CONDITION_FULL;
+ return PIT_DUMP_CONDITION_NORMAL;
}
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);
@@ -33,16 +33,19 @@ void pit_dump_to_file(pit_runtime *rt, void *vf, pit_value v, bool readable) {
bool pit_runtime_print_error(pit_runtime *rt) {
if (!pit_value_eq(rt->error, PIT_NIL)) {
- // 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);
+ for (i64 i = 0; i < rt->backtrace->next; ++i) {
+ pit_backtrace_entry *a = pit_vec_get(pit_backtrace_entry)(rt->backtrace, i);
+ if (a == NULL) continue;
+ fprintf(stderr, "on line %ld, column %ld (call to ", a->ann.line, a->ann.column);
+ pit_dump_to_file(rt, stderr, a->val, false);
+ fprintf(stderr, "):\n");
+ }
+ 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;
}
+ pit_vec_reset(pit_backtrace_entry)(rt->backtrace);
return false;
}