diff --git a/.dir-locals.el b/.dir-locals.el index 15bf7da..08ca051 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -1,5 +1,5 @@ ;;; Directory Local Variables -*- no-byte-compile: t -*- ;;; For more information see (info "(emacs) Directory Variables") -((nil . ((my/project-run-command . "build/simple-lisp") - (compile-command . "make -C build")))) +((nil . ((compile-command . "make -kC build/") + (my/project-run-command . "build/simple-lisp")))) diff --git a/src/lisp.c b/src/lisp.c index f72ee53..13bb577 100644 --- a/src/lisp.c +++ b/src/lisp.c @@ -975,7 +975,7 @@ STATIC_DEFUN(set_for_return, "set-for-return", (LispVal * entry, LispVal *dest), static inline void setup_return_handler(LispVal *tag, LispVal *dest) { LispVal *err_var = INTERN_STATIC("e", system_package); - LispVal *quoted_dest = const_list(false, 2, Qquote, dest); + LispVal *quoted_dest = const_list(true, 2, Qquote, dest); LispVal *handler = const_list(true, 4, err_var, Qset_for_return, err_var, quoted_dest); refcount_unref(quoted_dest); @@ -3019,7 +3019,7 @@ static void rehash_to(LispHashtable *self, size_t new_size) { lisp_malloc0(sizeof(struct HashtableEntry) * new_size); struct HashtableDataArray data_arr = {.size = new_size, .entries = new_data}; - void *cl_handler; + void *cl_handler = NULL; // silence warning if (the_stack) { cl_handler = register_cleanup(&free_hash_table_data_array, &data_arr); } diff --git a/src/main.c b/src/main.c index 8ee4c86..968f5b6 100644 --- a/src/main.c +++ b/src/main.c @@ -26,7 +26,7 @@ STATIC_DEFUN(toplevel_error_handler, "toplevel-error-handler", LispVal *stream = make_lisp_integer(fileno(stderr)); if (!NILP(detail)) { fprintf(stderr, "Details: "); - Fprintln(detail, Qt, stream); + refcount_unref(Fprintln(detail, Qt, stream)); } fprintf(stderr, "\nBacktrace (toplevel comes last):\n"); FOREACH(frame, backtrace) { @@ -44,13 +44,14 @@ STATIC_DEFUN(toplevel_error_handler, "toplevel-error-handler", LispVal *name = NILP(fobj->name) ? LISPVAL(fobj) : fobj->name; LispVal *to_print = Fpair(name, TAIL(frame)); fprintf(stderr, " "); - Fprint(to_print, Qt, stream); + refcount_unref(Fprint(to_print, Qt, stream)); refcount_unref(to_print); if (!fobj->is_builtin && fobj->is_macro) { fprintf(stderr, " ;; macro"); } fputc('\n', stderr); } + refcount_unref(stream); exit_status = 1; return Qnil; }