diff options
| author | Mistivia <i@mistivia.com> | 2025-07-15 13:22:41 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-07-15 13:23:35 +0800 |
| commit | 4fdde0172948dfd875f58779b91cfa8e517acedf (patch) | |
| tree | 34cacc524d878cf8dd54c44cd1c1302983e5f5a9 /src/main.c | |
| parent | dab2284cd5aae14bb166c90105a8e7b1bd290dcd (diff) | |
add stacktracec
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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 |
