aboutsummaryrefslogtreecommitdiff
path: root/src/primitives.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/primitives.c
parentdab2284cd5aae14bb166c90105a8e7b1bd290dcd (diff)
add stacktracec
Diffstat (limited to 'src/primitives.c')
-rw-r--r--src/primitives.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/primitives.c b/src/primitives.c
index e5e65e3..971aa87 100644
--- a/src/primitives.c
+++ b/src/primitives.c
@@ -15,7 +15,10 @@ SExpRef primitive_assert_exception(Interp *interp, SExpRef args, bool istail) {
SExpRef primitive_assert_error(Interp *interp, SExpRef args, bool istail) {
SExpRef eargs = lisp_eval_args(interp, args);
- if (VALTYPE(eargs) == kErrSignal) return interp->t;
+ if (VALTYPE(eargs) == kErrSignal) {
+ interp->stacktrace = NIL;
+ return interp->t;
+ }
const char *expstr = lisp_to_string(interp, CAR(args));
SExpRef ret = new_error(interp, "assert-error failed, no error: %s.\n", expstr);
@@ -37,6 +40,7 @@ SExpRef primitive_try(Interp *interp, SExpRef args, bool istail) {
return new_error(interp, "try: syntax error, catch is not a function.\n");
}
if (VALTYPE(ret) == kExceptionSignal) {
+ interp->stacktrace = NIL;
PUSH_REG(catch_func);
ret = lisp_apply(interp, catch_func, CONS(REF(ret)->ret, NIL), istail);
POP_REG();