diff --git a/src/rt/rust.cpp b/src/rt/rust.cpp index 37398655190..2200df11067 100644 --- a/src/rt/rust.cpp +++ b/src/rt/rust.cpp @@ -94,6 +94,16 @@ rust_srv::fatal(char const *expr, char const *file, size_t line) exit(1); } +void +rust_srv::warning(char const *expr, char const *file, size_t line) +{ + char buf[1024]; + snprintf(buf, sizeof(buf), + "warning: '%s', at: %s:%d", + expr, file, (int)line); + log(buf); +} + rust_srv * rust_srv::clone() { diff --git a/src/rt/rust.h b/src/rt/rust.h index c65d0eb1e96..9a61dca71fe 100644 --- a/src/rt/rust.h +++ b/src/rt/rust.h @@ -25,6 +25,7 @@ struct rust_srv { virtual void log(char const *); virtual void fatal(char const *, char const *, size_t); + virtual void warning(char const *, char const *, size_t); virtual void *malloc(size_t); virtual void *realloc(void *, size_t); virtual void free(void *); diff --git a/src/rt/rust_internal.h b/src/rt/rust_internal.h index 78ba85e8859..bd9be504244 100644 --- a/src/rt/rust_internal.h +++ b/src/rt/rust_internal.h @@ -44,10 +44,12 @@ extern "C" { #error "Target CPU not supported." #endif -#define I(dom, e) ((e) ? (void)0 : \ +#define I(dom, e) ((e) ? (void)0 : \ (dom)->srv->fatal(#e, __FILE__, __LINE__)) +#define W(dom, e, s) ((e) ? (void)0 : \ + (dom)->srv->warning(#e " : " #s, __FILE__, __LINE__)) -#define A(dom, e, s) ((e) ? (void)0 : \ +#define A(dom, e, s) ((e) ? (void)0 : \ (dom)->srv->fatal(#e " : " #s, __FILE__, __LINE__)) struct rust_task;