aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-07-15 13:22:41 +0800
committerMistivia <i@mistivia.com>2025-07-15 13:23:35 +0800
commit4fdde0172948dfd875f58779b91cfa8e517acedf (patch)
tree34cacc524d878cf8dd54c44cd1c1302983e5f5a9 /src/main.c
parentdab2284cd5aae14bb166c90105a8e7b1bd290dcd (diff)
add stacktracec
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 334f761..250e3d3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -15,12 +15,20 @@ int main(int argc, char **argv) {
SExpRef ret = Interp_load_file(&interp, filename);
if (Interp_ref(&interp, ret)->type == kErrSignal) {
fprintf(stderr, "Error: %s", Interp_ref(&interp, ret)->str);
+ const char *stacktrace = lisp_stacktrace_to_string(&interp, interp.stacktrace);
+ fprintf(stderr, "%s", stacktrace);
+ free((void*)stacktrace);
+ interp.stacktrace = interp.nil;
mainret = -1; goto end;
}
if (Interp_ref(&interp, ret)->type == kExceptionSignal) {
const char *exception_str = lisp_to_string(&interp, Interp_ref(&interp, ret)->ret);
fprintf(stderr, "Uncatched exception: %s\n", exception_str);
free((void*)exception_str);
+ const char *stacktrace = lisp_stacktrace_to_string(&interp, interp.stacktrace);
+ fprintf(stderr, "%s", stacktrace);
+ free((void*)stacktrace);
+ interp.stacktrace = interp.nil;
mainret = -1; goto end;
}
if (Interp_ref(&interp, ret)->type == kBreakSignal