Pioneer
Loading...
Searching...
No Matches
LuaUtils.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _LUAUTILS_H
5#define _LUAUTILS_H
6
7#include "utils.h"
8#include <lua.hpp>
9#include <string>
10
11namespace FileSystem {
12 class FileData;
13}
14
15inline void pi_lua_settable(lua_State *l, const char *key, bool value)
16{
17 lua_pushstring(l, key);
18 lua_pushboolean(l, value);
19 lua_rawset(l, -3);
20}
21
22inline void pi_lua_settable(lua_State *l, const char *key, int value)
23{
24 lua_pushstring(l, key);
25 lua_pushinteger(l, value);
26 lua_rawset(l, -3);
27}
28
29inline void pi_lua_settable(lua_State *l, int key, int value)
30{
31 lua_pushinteger(l, key);
32 lua_pushinteger(l, value);
33 lua_rawset(l, -3);
34}
35
36inline void pi_lua_settable(lua_State *l, const char *key, double value)
37{
38 lua_pushstring(l, key);
39 lua_pushnumber(l, value);
40 lua_rawset(l, -3);
41}
42
43inline void pi_lua_settable(lua_State *l, int key, double value)
44{
45 lua_pushinteger(l, key);
46 lua_pushnumber(l, value);
47 lua_rawset(l, -3);
48}
49
50inline void pi_lua_settable(lua_State *l, int key, const char *value)
51{
52 lua_pushinteger(l, key);
53 lua_pushstring(l, value);
54 lua_rawset(l, -3);
55}
56
57inline void pi_lua_settable(lua_State *l, const char *key, const char *value)
58{
59 lua_pushstring(l, key);
60 lua_pushstring(l, value);
61 lua_rawset(l, -3);
62}
63
64void pi_lua_open_standard_base(lua_State *l);
65
66// pushes a read-only proxy table that points at the table at <index>
67void pi_lua_readonly_table_proxy(lua_State *l, int index);
68// pushes the underlying (read-write) table pointed to by the proxy at <index>
69void pi_lua_readonly_table_original(lua_State *l, int index);
70
71bool pi_lua_import(lua_State *l, const std::string &importName, bool popImported = false);
72void pi_lua_import_recursive(lua_State *L, const std::string &importName);
73
74int pi_lua_panic(lua_State *l) __attribute((noreturn));
75void pi_lua_protected_call(lua_State *state, int nargs, int nresults);
76int pi_lua_loadfile(lua_State *l, const FileSystem::FileData &code);
77void pi_lua_dofile(lua_State *l, const std::string &path);
78void pi_lua_dofile_recursive(lua_State *l, const std::string &basepath);
79
80void pi_lua_warn(lua_State *l, const char *format, ...) __attribute((format(printf, 2, 3)));
81
82bool pi_lua_split_table_path(lua_State *l, const std::string &path);
83
84int secure_trampoline(lua_State *l);
85
86std::string pi_lua_traceback(lua_State *l, int top);
87std::string pi_lua_dumpstack(lua_State *l, int top);
88void pi_lua_printvalue(lua_State *l, int idx);
89void pi_lua_stacktrace(lua_State *l);
90
91#ifdef DEBUG
92#define LUA_DEBUG_START(luaptr) const int __luaStartStackDepth = lua_gettop(luaptr)
93#define LUA_DEBUG_END(luaptr, expectedStackDiff) \
94 do { \
95 const int __luaEndStackDepth = lua_gettop(luaptr); \
96 if (__luaEndStackDepth - expectedStackDiff != __luaStartStackDepth) { \
97 Error("%s:%d: lua stack difference is %d, expected %d", \
98 __FILE__, __LINE__, __luaEndStackDepth - __luaStartStackDepth, expectedStackDiff); \
99 } \
100 } while (0)
101#define LUA_DEBUG_CHECK(luaptr, expectedStackDiff) LUA_DEBUG_END(luaptr, expectedStackDiff)
102#else
103#define LUA_DEBUG_START(luaptr)
104#define LUA_DEBUG_END(luaptr, expectedStackDiff)
105#define LUA_DEBUG_CHECK(luaptr, expectedStackDiff)
106#endif
107
108#endif
void pi_lua_open_standard_base(lua_State *l)
Definition Sandbox.cpp:144
int pi_lua_loadfile(lua_State *l, const FileSystem::FileData &code)
Definition Sandbox.cpp:262
void pi_lua_warn(lua_State *l, const char *format,...) __attribute((format(printf
std::string pi_lua_dumpstack(lua_State *l, int top)
Definition Debug.cpp:84
bool pi_lua_import(lua_State *l, const std::string &importName, bool popImported=false)
Definition Import.cpp:373
int pi_lua_panic(lua_State *l) __attribute((noreturn))
Definition Sandbox.cpp:226
void pi_lua_protected_call(lua_State *state, int nargs, int nresults)
Definition Sandbox.cpp:248
void bool pi_lua_split_table_path(lua_State *l, const std::string &path)
Definition Sandbox.cpp:390
void pi_lua_readonly_table_original(lua_State *l, int index)
Definition LuaUtils.cpp:242
void pi_lua_dofile_recursive(lua_State *l, const std::string &basepath)
Definition Sandbox.cpp:342
void pi_lua_dofile(lua_State *l, const std::string &path)
Definition Sandbox.cpp:326
void pi_lua_readonly_table_proxy(lua_State *l, int index)
Definition LuaUtils.cpp:209
void pi_lua_printvalue(lua_State *l, int idx)
Definition Debug.cpp:240
void pi_lua_import_recursive(lua_State *L, const std::string &importName)
Definition Import.cpp:389
void pi_lua_stacktrace(lua_State *l)
Definition Debug.cpp:246
int secure_trampoline(lua_State *l)
Definition Sandbox.cpp:441
std::string pi_lua_traceback(lua_State *l, int top)
Definition Debug.cpp:61
void pi_lua_settable(lua_State *l, const char *key, bool value)
Definition LuaUtils.h:15
Definition FileSystem.h:158
Definition CityOnPlanet.h:27
#define __attribute(x)
Definition utils.h:20