1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Support PG18's pg_noreturn
PG18 renames pg_attribute_noreturn() to pg_noreturn. To support both, mark
definitions with both, and #define the other one away.
--- a/src/pllua.h
+++ b/src/pllua.h
@@ -54,10 +54,16 @@
#define FALLTHROUGH /* FALLTHROUGH */
#endif
-LUA_API int (lua_error) (lua_State *L) pg_attribute_noreturn();
-LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg) pg_attribute_noreturn();
-LUALIB_API int (luaL_typeerror) (lua_State *L, int arg, const char *tname) pg_attribute_noreturn();
-LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...) pg_attribute_noreturn();
+#if PG_VERSION_NUM >= 180000
+#define pg_attribute_noreturn()
+#else
+#define pg_noreturn
+#endif
+
+pg_noreturn LUA_API int (lua_error) (lua_State *L) pg_attribute_noreturn();
+pg_noreturn LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg) pg_attribute_noreturn();
+pg_noreturn LUALIB_API int (luaL_typeerror) (lua_State *L, int arg, const char *tname) pg_attribute_noreturn();
+pg_noreturn LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...) pg_attribute_noreturn();
/*
* Define how we want to handle int8 values.
@@ -115,7 +121,7 @@ extern bool pllua_pending_error;
#define ASSERT_PG_CONTEXT Assert(pllua_context == PLLUA_CONTEXT_PG)
#define ASSERT_LUA_CONTEXT Assert(pllua_context == PLLUA_CONTEXT_LUA)
-void pllua_pending_error_violation(lua_State *L) pg_attribute_noreturn();
+pg_noreturn void pllua_pending_error_violation(lua_State *L) pg_attribute_noreturn();
static inline pllua_context_type
pllua_setcontext(lua_State *L, pllua_context_type newctx)
@@ -621,7 +627,7 @@ int pllua_open_print(lua_State *L);
int pllua_p_print (lua_State *L);
void pllua_debug_lua(lua_State *L, const char *msg, ...) pg_attribute_printf(2, 3);
-void pllua_error(lua_State *L, const char *msg, ...) pg_attribute_noreturn();
+pg_noreturn void pllua_error(lua_State *L, const char *msg, ...) pg_attribute_noreturn();
void pllua_warning(lua_State *L, const char *msg, ...) pg_attribute_printf(2, 3);
void pllua_error_callback(void *arg);
int pllua_error_callback_location(lua_State *L);
@@ -638,10 +644,10 @@ int pllua_panic(lua_State *L);
int pllua_newerror(lua_State *L);
int pllua_register_error(lua_State *L);
void pllua_poperror(lua_State *L);
-void pllua_rethrow_from_lua(lua_State *L, int rc) pg_attribute_noreturn();
+pg_noreturn void pllua_rethrow_from_lua(lua_State *L, int rc) pg_attribute_noreturn();
/* These are DLLEXPORT so that transform modules can get at them */
-PGDLLEXPORT void pllua_rethrow_from_pg(lua_State *L, MemoryContext mcxt) pg_attribute_noreturn();
+pg_noreturn PGDLLEXPORT void pllua_rethrow_from_pg(lua_State *L, MemoryContext mcxt) pg_attribute_noreturn();
PGDLLEXPORT int pllua_pcall_nothrow(lua_State *L, int nargs, int nresults, int msgh);
PGDLLEXPORT int pllua_cpcall(lua_State *L, lua_CFunction func, void* arg);
PGDLLEXPORT void pllua_pcall(lua_State *L, int nargs, int nresults, int msgh);
@@ -688,7 +694,7 @@ void **pllua_newrefobject(lua_State *L,
void **pllua_torefobject(lua_State *L, int nd, char *objtype);
void *pllua_newobject(lua_State *L, char *objtype, size_t sz, bool uservalue);
void *pllua_toobject(lua_State *L, int nd, char *objtype);
-void pllua_type_error(lua_State *L, char *expected) pg_attribute_noreturn();
+pg_noreturn void pllua_type_error(lua_State *L, char *expected) pg_attribute_noreturn();
void **pllua_checkrefobject(lua_State *L, int nd, char *objtype);
void *pllua_checkobject(lua_State *L, int nd, char *objtype);
|