diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-12-06 06:15:49 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-12-06 06:15:49 -0800 |
commit | 45412f6aef55df4f83f54b2b5445f673bfeee691 (patch) | |
tree | 8e2ee888a5c370c96a2afe011d74236fb2d57284 | |
parent | eec7b1fdc2fa0d53bef990d6cc2339354d57067a (diff) | |
download | txr-45412f6aef55df4f83f54b2b5445f673bfeee691.tar.gz txr-45412f6aef55df4f83f54b2b5445f673bfeee691.tar.bz2 txr-45412f6aef55df4f83f54b2b5445f673bfeee691.zip |
unwind: new function uw_warningf.
Convenience function for throwing warnings.
* unwind.c (uw_warningf): New function.
* unwind.h (uw_warningf): Declared.
-rw-r--r-- | unwind.c | 22 | ||||
-rw-r--r-- | unwind.h | 1 |
2 files changed, 23 insertions, 0 deletions
@@ -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; @@ -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); |