diff options
author | sfan5 <sfan5@live.de> | 2020-04-10 22:06:24 +0200 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2020-04-11 13:12:51 +0200 |
commit | 054c5dfaa35dd79560a465ccc0ef214cb5f34c88 (patch) | |
tree | 7f9e2feefbee0708f3dc7371d3615767deba0048 /src/script/lua_api/l_internal.h | |
parent | f105bc8dc2444d98a9cd74a2caa0013ce2e07008 (diff) | |
download | minetest-054c5dfaa35dd79560a465ccc0ef214cb5f34c88.tar.gz minetest-054c5dfaa35dd79560a465ccc0ef214cb5f34c88.tar.bz2 minetest-054c5dfaa35dd79560a465ccc0ef214cb5f34c88.zip |
scriptapi: Sort out ServerEnvironment / Environment distinction properly
The API implementation is shared between CSM and SSM.
Functions should retrieve a plain env when they do not
need any server-specific functions.
Diffstat (limited to 'src/script/lua_api/l_internal.h')
-rw-r--r-- | src/script/lua_api/l_internal.h | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h index bbedfe46e..a86eeaf79 100644 --- a/src/script/lua_api/l_internal.h +++ b/src/script/lua_api/l_internal.h @@ -32,14 +32,39 @@ with this program; if not, write to the Free Software Foundation, Inc., #define luamethod_aliased(class, name, alias) {#name, class::l_##name}, {#alias, class::l_##name} #define API_FCT(name) registerFunction(L, #name, l_##name, top) -#define MAP_LOCK_REQUIRED -#define NO_MAP_LOCK_REQUIRED +// For future use +#define MAP_LOCK_REQUIRED ((void)0) +#define NO_MAP_LOCK_REQUIRED ((void)0) +/* In debug mode ensure no code tries to retrieve the server env when it isn't + * actually available (in CSM) */ +#if !defined(SERVER) && !defined(NDEBUG) +#define DEBUG_ASSERT_NO_CLIENTAPI \ + FATAL_ERROR_IF(getClient(L) != nullptr, "Tried " \ + "to retrieve ServerEnvironment on client") +#else +#define DEBUG_ASSERT_NO_CLIENTAPI ((void)0) +#endif + +// Retrieve ServerEnvironment pointer as `env` (no map lock) #define GET_ENV_PTR_NO_MAP_LOCK \ + DEBUG_ASSERT_NO_CLIENTAPI; \ ServerEnvironment *env = (ServerEnvironment *)getEnv(L); \ if (env == NULL) \ return 0 +// Retrieve ServerEnvironment pointer as `env` #define GET_ENV_PTR \ MAP_LOCK_REQUIRED; \ GET_ENV_PTR_NO_MAP_LOCK + +// Retrieve Environment pointer as `env` (no map lock) +#define GET_PLAIN_ENV_PTR_NO_MAP_LOCK \ + Environment *env = (Environment *)getEnv(L); \ + if (env == NULL) \ + return 0 + +// Retrieve Environment pointer as `env` +#define GET_PLAIN_ENV_PTR \ + MAP_LOCK_REQUIRED; \ + GET_PLAIN_ENV_PTR_NO_MAP_LOCK |