summaryrefslogtreecommitdiffstats
path: root/src/diag.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/diag.h')
-rw-r--r--src/diag.h67
1 files changed, 31 insertions, 36 deletions
diff --git a/src/diag.h b/src/diag.h
index f2498b5..3bea9b2 100644
--- a/src/diag.h
+++ b/src/diag.h
@@ -8,18 +8,10 @@
#ifndef BFS_DIAG_H
#define BFS_DIAG_H
-#include "prelude.h"
-#include <stdarg.h>
+#include "bfs.h"
+#include "bfstd.h"
-/**
- * static_assert() with an optional second argument.
- */
-#if __STDC_VERSION__ >= C23
-# define bfs_static_assert static_assert
-#else
-# define bfs_static_assert(...) bfs_static_assert_(__VA_ARGS__, #__VA_ARGS__, )
-# define bfs_static_assert_(expr, msg, ...) _Static_assert(expr, msg)
-#endif
+#include <stdarg.h>
/**
* A source code location.
@@ -46,7 +38,7 @@ struct bfs_loc {
*
* bfs: func@src/file.c:0: Message
*/
-attr(printf(2, 3))
+_printf(2, 3)
void bfs_diagf(const struct bfs_loc *loc, const char *format, ...);
/**
@@ -55,15 +47,10 @@ void bfs_diagf(const struct bfs_loc *loc, const char *format, ...);
#define bfs_diag(...) bfs_diagf(bfs_location(), __VA_ARGS__)
/**
- * Get the last error message.
- */
-const char *bfs_errstr(void);
-
-/**
* Print a diagnostic message including the last error.
*/
#define bfs_ediag(...) \
- bfs_ediag_("" __VA_ARGS__, bfs_errstr())
+ bfs_ediag_("" __VA_ARGS__, errstr())
#define bfs_ediag_(format, ...) \
bfs_diag(sizeof(format) > 1 ? format ": %s" : "%s", __VA_ARGS__)
@@ -71,8 +58,10 @@ const char *bfs_errstr(void);
/**
* Print a message to standard error and abort.
*/
-attr(cold, printf(2, 3))
-noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...);
+_cold
+_printf(2, 3)
+_noreturn
+void bfs_abortf(const struct bfs_loc *loc, const char *format, ...);
/**
* Unconditional abort with a message.
@@ -84,7 +73,7 @@ noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...);
* Abort with a message including the last error.
*/
#define bfs_eabort(...) \
- bfs_eabort_("" __VA_ARGS__, bfs_errstr())
+ bfs_eabort_("" __VA_ARGS__, errstr())
#define bfs_eabort_(format, ...) \
bfs_abort(sizeof(format) > 1 ? format ": %s" : "%s", __VA_ARGS__)
@@ -117,7 +106,7 @@ noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...);
* Unconditional assert, including the last error.
*/
#define bfs_everify(...) \
- bfs_everify_(#__VA_ARGS__, __VA_ARGS__, "", bfs_errstr())
+ bfs_everify_(#__VA_ARGS__, __VA_ARGS__, "", errstr())
#define bfs_everify_(str, cond, format, ...) \
((cond) ? (void)0 : bfs_abort( \
@@ -170,13 +159,14 @@ const char *debug_flag_name(enum debug_flags flag);
/**
* Like perror(), but decorated like bfs_error().
*/
-attr(cold)
+_cold
void bfs_perror(const struct bfs_ctx *ctx, const char *str);
/**
* Shorthand for printing error messages.
*/
-attr(cold, printf(2, 3))
+_cold
+_printf(2, 3)
void bfs_error(const struct bfs_ctx *ctx, const char *format, ...);
/**
@@ -184,7 +174,8 @@ void bfs_error(const struct bfs_ctx *ctx, const char *format, ...);
*
* @return Whether a warning was printed.
*/
-attr(cold, printf(2, 3))
+_cold
+_printf(2, 3)
bool bfs_warning(const struct bfs_ctx *ctx, const char *format, ...);
/**
@@ -192,67 +183,71 @@ bool bfs_warning(const struct bfs_ctx *ctx, const char *format, ...);
*
* @return Whether a debug message was printed.
*/
-attr(cold, printf(3, 4))
+_cold
+_printf(3, 4)
bool bfs_debug(const struct bfs_ctx *ctx, enum debug_flags flag, const char *format, ...);
/**
* bfs_error() variant that takes a va_list.
*/
-attr(cold, printf(2, 0))
+_cold
+_printf(2, 0)
void bfs_verror(const struct bfs_ctx *ctx, const char *format, va_list args);
/**
* bfs_warning() variant that takes a va_list.
*/
-attr(cold, printf(2, 0))
+_cold
+_printf(2, 0)
bool bfs_vwarning(const struct bfs_ctx *ctx, const char *format, va_list args);
/**
* bfs_debug() variant that takes a va_list.
*/
-attr(cold, printf(3, 0))
+_cold
+_printf(3, 0)
bool bfs_vdebug(const struct bfs_ctx *ctx, enum debug_flags flag, const char *format, va_list args);
/**
* Print the error message prefix.
*/
-attr(cold)
+_cold
void bfs_error_prefix(const struct bfs_ctx *ctx);
/**
* Print the warning message prefix.
*/
-attr(cold)
+_cold
bool bfs_warning_prefix(const struct bfs_ctx *ctx);
/**
* Print the debug message prefix.
*/
-attr(cold)
+_cold
bool bfs_debug_prefix(const struct bfs_ctx *ctx, enum debug_flags flag);
/**
* Highlight parts of the command line in an error message.
*/
-attr(cold)
+_cold
void bfs_argv_error(const struct bfs_ctx *ctx, const bool args[]);
/**
* Highlight parts of an expression in an error message.
*/
-attr(cold)
+_cold
void bfs_expr_error(const struct bfs_ctx *ctx, const struct bfs_expr *expr);
/**
* Highlight parts of the command line in a warning message.
*/
-attr(cold)
+_cold
bool bfs_argv_warning(const struct bfs_ctx *ctx, const bool args[]);
/**
* Highlight parts of an expression in a warning message.
*/
-attr(cold)
+_cold
bool bfs_expr_warning(const struct bfs_ctx *ctx, const struct bfs_expr *expr);
#endif // BFS_DIAG_H