summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--unwind.c22
-rw-r--r--unwind.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/unwind.c b/unwind.c
index 3495213d..93b09fe1 100644
--- a/unwind.c
+++ b/unwind.c
@@ -793,6 +793,28 @@ val uw_errorfv(val fmt, struct args *args)
abort();
}
+val uw_warningf(val fmt, ...)
+{
+ va_list vl;
+
+ val stream = make_string_output_stream();
+ va_start (vl, fmt);
+ (void) vformat(stream, fmt, vl);
+ va_end (vl);
+
+ uw_catch_begin (cons(continue_s, nil), exsym, exvals);
+
+ uw_throw(warning_s, get_string_from_stream(stream));
+
+ uw_catch(exsym, exvals) { (void) exsym; (void) exvals; }
+
+ uw_unwind;
+
+ uw_catch_end;
+
+ return nil;
+}
+
val type_mismatch(val fmt, ...)
{
va_list vl;
diff --git a/unwind.h b/unwind.h
index 30ab70c2..64f21a02 100644
--- a/unwind.h
+++ b/unwind.h
@@ -154,6 +154,7 @@ noreturn val uw_throwf(val sym, val fmt, ...);
noreturn val uw_throwfv(val sym, val fmt, struct args *);
noreturn val uw_errorf(val fmt, ...);
noreturn val uw_errorfv(val fmt, struct args *args);
+val uw_warningf(val fmt, ...);
val uw_defer_warning(val args);
val uw_warning_exists(val tag);
val uw_dump_deferred_warnings(val stream);