diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 28d2a62e..07929066 100644 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -1749,6 +1749,7 @@ SEXP_API sexp sexp_open_output_string_op (sexp ctx, sexp self, sexp_sint_t n); SEXP_API sexp sexp_get_output_string_op (sexp ctx, sexp self, sexp_sint_t n, sexp port); SEXP_API sexp sexp_make_exception (sexp ctx, sexp kind, sexp message, sexp irritants, sexp procedure, sexp source); SEXP_API sexp sexp_user_exception (sexp ctx, sexp self, const char *msg, sexp x); +SEXP_API sexp sexp_user_exception_ls (sexp ctx, sexp self, const char *msg, int n, ...); SEXP_API sexp sexp_file_exception (sexp ctx, sexp self, const char *msg, sexp x); SEXP_API sexp sexp_type_exception (sexp ctx, sexp self, sexp_uint_t type_id, sexp x); SEXP_API sexp sexp_xtype_exception (sexp ctx, sexp self, const char *msg, sexp x); diff --git a/sexp.c b/sexp.c index e5283ab4..f87056d1 100644 --- a/sexp.c +++ b/sexp.c @@ -758,6 +758,22 @@ sexp sexp_user_exception (sexp ctx, sexp self, const char *ms, sexp ir) { return res; } +sexp sexp_user_exception_ls (sexp ctx, sexp self, const char *msg, int n, ...) { + int i; + va_list ap; + sexp_gc_var2(res, ir); + sexp_gc_preserve2(ctx, res, ir); + va_start(ap, n); + for (i=0, ir=SEXP_NULL; i < n; ++i) { + ir = sexp_cons(ctx, va_arg(ap, sexp), ir); + } + ir = sexp_nreverse(ctx, ir); + res = sexp_user_exception(ctx, self, msg, ir); + sexp_gc_release2(ctx); + va_end(ap); + return res; +} + sexp sexp_file_exception (sexp ctx, sexp self, const char *ms, sexp ir) { sexp_gc_var1(res); sexp_gc_preserve1(ctx, res);