add sexp_user_exception_ls variadic convenience

This commit is contained in:
Alex Shinn 2021-04-16 10:06:03 +09:00
parent fc6e5da915
commit af43c3214f
2 changed files with 17 additions and 0 deletions

View file

@ -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_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_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 (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_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_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); SEXP_API sexp sexp_xtype_exception (sexp ctx, sexp self, const char *msg, sexp x);

16
sexp.c
View file

@ -758,6 +758,22 @@ sexp sexp_user_exception (sexp ctx, sexp self, const char *ms, sexp ir) {
return res; 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 sexp_file_exception (sexp ctx, sexp self, const char *ms, sexp ir) {
sexp_gc_var1(res); sexp_gc_var1(res);
sexp_gc_preserve1(ctx, res); sexp_gc_preserve1(ctx, res);