summaryrefslogtreecommitdiff
path: root/src/script/lua_api/l_internal.h
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2020-04-10 22:06:24 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2020-04-11 13:12:51 +0200
commit054c5dfaa35dd79560a465ccc0ef214cb5f34c88 (patch)
tree7f9e2feefbee0708f3dc7371d3615767deba0048 /src/script/lua_api/l_internal.h
parentf105bc8dc2444d98a9cd74a2caa0013ce2e07008 (diff)
downloadminetest-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.h29
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