aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api/l_internal.h
blob: 378d19cd0e0437314a964700ffd542f1d1195196 (plain)
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
69
70
71
72
73
74
75
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

/******************************************************************************/
/******************************************************************************/
/* WARNING!!!! do NOT add this header in any include file or any code file    */
/*             not being a modapi file!!!!!!!!                                */
/******************************************************************************/
/******************************************************************************/

#pragma once

#include "common/c_internal.h"

#define luamethod(class, name)                                                           \
	{                                                                                \
#name, class ::l_##name                                                  \
	}
#define luamethod_aliased(class, name, alias)                                            \
	{#name, class ::l_##name}, { #alias, class ::l_##name }
#define API_FCT(name) registerFunction(L, #name, l_##name, top)

// 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