sexp sexp_make_exception (sexp ctx, sexp kind, sexp message, sexp irritants,
sexp procedure, sexp source) {
sexp exn = sexp_alloc_type(ctx, exception, SEXP_EXCEPTION);
sexp_exception_kind(exn) = kind;
sexp_exception_message(exn) = message;
sexp_exception_irritants(exn) = irritants;
sexp_exception_procedure(exn) = procedure;
sexp_exception_source(exn) = source;
sexp_exception_stack_trace(exn) = SEXP_FALSE;
return exn;
}
What happens if
sexp_alloc_typereturnsSEXP_G_OOM_ERROR? Now you're mutating the singleton before you return it.