From 19fcd16b3602958328aeb76a31c3e860aa05928e Mon Sep 17 00:00:00 2001 From: s-ol Date: Sat, 15 Jun 2024 23:07:24 +0200 Subject: [PATCH] C API: add FOLK_ERROR, etc macros --- lib/c.tcl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/c.tcl b/lib/c.tcl index abc696b9..a4d9f684 100644 --- a/lib/c.tcl +++ b/lib/c.tcl @@ -51,9 +51,14 @@ namespace eval c { #include jmp_buf __onError; + Tcl_Interp* __interp; #define __ENSURE(EXPR) if (!(EXPR)) { Tcl_SetResult(interp, "failed to convert argument from Tcl to C in: " #EXPR, NULL); longjmp(__onError, 0); } #define __ENSURE_OK(EXPR) if ((EXPR) != TCL_OK) { longjmp(__onError, 0); } + + #define FOLK_ERROR(MSG) do { Tcl_SetResult(__interp, MSG, NULL); longjmp(__onError, 0); } while (0) + #define FOLK_ENSURE(EXPR) if (!(EXPR)) { Tcl_SetResult(__interp, "assertion failed: " #EXPR, NULL); longjmp(__onError, 0); } + #define FOLK_CHECK(EXPR, MSG) if (!(EXPR)) { FOLK_ERROR(MSG); } } variable code [list] variable objtypes [list] @@ -438,6 +443,7 @@ namespace eval c { Tcl_SetResult(interp, "Wrong number of arguments to $name", NULL); return TCL_ERROR; } + __interp = interp; int r = setjmp(__onError); if (r != 0) { return TCL_ERROR; }