summaryrefslogtreecommitdiff
path: root/pit/src/native.c
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-09-04 16:29:31 -0400
committerLLLL Colonq <llll@colonq>2026-09-04 16:29:31 -0400
commit843ea34efc2c5ea10edc4d534304f8287f97fbbc (patch)
tree65c2b676b650413a6154ffa7b319d4d0b6f9cff4 /pit/src/native.c
parentc01f847b68a7fcd48eb0f3d456aa993a6f69ea8d (diff)
pit: printf
Diffstat (limited to 'pit/src/native.c')
-rw-r--r--pit/src/native.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/pit/src/native.c b/pit/src/native.c
index dbb461d..2d28679 100644
--- a/pit/src/native.c
+++ b/pit/src/native.c
@@ -31,6 +31,20 @@ 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);
}
+i64 pit_fprintf(pit_runtime *rt, void *vf, char *format, ...) {
+ FILE *f = (FILE *) vf;
+ va_list ap;
+ va_start(ap, format);
+ char buf[8192];
+ pit_printf_handler h[1];
+ 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);
+ buf[ret] = 0;
+ va_end(ap);
+ fputs(buf, f);
+ return ret;
+}
+
bool pit_runtime_print_error(pit_runtime *rt) {
if (!pit_value_eq(rt->error, PIT_NIL)) {
for (i64 i = 0; i < rt->callstack->next; ++i) {
@@ -54,7 +68,7 @@ void pit_debug_trace_(pit_runtime *rt, char *format, pit_value v) {
char buf[1024] = {0};
i64 end = pit_dump(rt, buf, sizeof(buf) - 1, v, true);
buf[end] = 0;
- fprintf(stderr, format, buf);
+ pit_fprintf(rt, stderr, format, buf);
}
pit_value pit_value_bytes_new_file(pit_runtime *rt, char *path) {