master ohmu/fastfetch-openbsd / src / common / lua.h
ohmu  ·  2026-10-15
  1#pragma once
  2
  3#include "fastfetch.h"
  4
  5#if FF_HAVE_LUA
  6    #if !FF_DISABLE_DLOPEN
  7        // Hack. LUA_API is defined as extern which prevents us from implementing the functions ourselves.
  8        #include <luaconf.h>
  9        #undef LUA_API
 10        #undef LUALIB_API
 11        #undef LUAMOD_API
 12        #define LUA_API static inline
 13        #define LUALIB_API LUA_API
 14        #define LUAMOD_API LUA_API
 15
 16        // Note: `#pragma GCC diagnostic push` is intentionally omitted here.
 17        #pragma GCC diagnostic ignored "-Wunused-function"
 18    #endif
 19
 20    #include <lua.h>
 21    #include <lauxlib.h>
 22    #include <lualib.h>
 23
 24    #ifndef LUA_GNAME
 25        #define LUA_GNAME "_G"
 26    #endif
 27
 28    #include "common/library.h"
 29
 30extern struct FFLuaData {
 31    #if !FF_DISABLE_DLOPEN
 32    FF_LIBRARY_SYMBOL(luaL_checkany)
 33    FF_LIBRARY_SYMBOL(luaL_loadbufferx)
 34    FF_LIBRARY_SYMBOL(luaL_tolstring)
 35    FF_LIBRARY_SYMBOL(lua_callk)
 36    FF_LIBRARY_SYMBOL(lua_createtable)
 37    FF_LIBRARY_SYMBOL(lua_error)
 38    FF_LIBRARY_SYMBOL(lua_gettop)
 39    FF_LIBRARY_SYMBOL(lua_isinteger)
 40    FF_LIBRARY_SYMBOL(lua_next)
 41    FF_LIBRARY_SYMBOL(lua_pcallk)
 42    FF_LIBRARY_SYMBOL(lua_pushboolean)
 43    FF_LIBRARY_SYMBOL(lua_pushcclosure)
 44    FF_LIBRARY_SYMBOL(lua_pushinteger)
 45    FF_LIBRARY_SYMBOL(lua_pushlstring)
 46    FF_LIBRARY_SYMBOL(lua_pushnil)
 47    FF_LIBRARY_SYMBOL(lua_pushnumber)
 48    FF_LIBRARY_SYMBOL(lua_pushvalue)
 49    FF_LIBRARY_SYMBOL(lua_rawgeti)
 50    FF_LIBRARY_SYMBOL(lua_rawlen)
 51    FF_LIBRARY_SYMBOL(lua_setfield)
 52    FF_LIBRARY_SYMBOL(lua_setglobal)
 53    FF_LIBRARY_SYMBOL(lua_seti)
 54    FF_LIBRARY_SYMBOL(lua_settop)
 55    FF_LIBRARY_SYMBOL(lua_toboolean)
 56    FF_LIBRARY_SYMBOL(lua_tointegerx)
 57    FF_LIBRARY_SYMBOL(lua_tolstring)
 58    FF_LIBRARY_SYMBOL(lua_tonumberx)
 59    FF_LIBRARY_SYMBOL(lua_type)
 60    #endif
 61
 62    lua_State* L;
 63    bool inited;
 64} luaData;
 65
 66    #if !FF_DISABLE_DLOPEN
 67[[gnu::always_inline]] void(lua_settop)(lua_State* L, int idx) {
 68    return luaData.fflua_settop(L, idx);
 69}
 70
 71[[gnu::always_inline]] int(luaL_loadbufferx)(lua_State* L, const char* buff, size_t sz, const char* name, const char* mode) {
 72    return luaData.ffluaL_loadbufferx(L, buff, sz, name, mode);
 73}
 74
 75[[gnu::always_inline]] const char*(lua_tolstring) (lua_State * L, int idx, size_t* len) {
 76    return luaData.fflua_tolstring(L, idx, len);
 77}
 78
 79[[gnu::always_inline]] void(lua_createtable)(lua_State* L, int narr, int nrec) {
 80    return luaData.fflua_createtable(L, narr, nrec);
 81}
 82
 83[[gnu::always_inline]] void(lua_pushinteger)(lua_State* L, lua_Integer n) {
 84    return luaData.fflua_pushinteger(L, n);
 85}
 86
 87[[gnu::always_inline]] void(lua_pushnumber)(lua_State* L, lua_Number n) {
 88    return luaData.fflua_pushnumber(L, n);
 89}
 90
 91[[gnu::always_inline]] void(lua_pushboolean)(lua_State* L, int b) {
 92    return luaData.fflua_pushboolean(L, b);
 93}
 94
 95[[gnu::always_inline]] const char*(lua_pushlstring) (lua_State * L, const char* s, size_t len) {
 96    return luaData.fflua_pushlstring(L, s, len);
 97}
 98
 99[[gnu::always_inline]] void(lua_pushvalue)(lua_State* L, int idx) {
100    return luaData.fflua_pushvalue(L, idx);
101}
102
103[[gnu::always_inline]] void(lua_seti)(lua_State* L, int idx, lua_Integer n) {
104    return luaData.fflua_seti(L, idx, n);
105}
106
107[[gnu::always_inline]] void(lua_pushnil)(lua_State* L) {
108    return luaData.fflua_pushnil(L);
109}
110
111[[gnu::always_inline]] void(lua_setfield)(lua_State* L, int idx, const char* k) {
112    return luaData.fflua_setfield(L, idx, k);
113}
114
115[[gnu::always_inline]] int(lua_pcallk)(lua_State* L, int nargs, int nresults, int errfunc, lua_KContext ctx, lua_KFunction k) {
116    return luaData.fflua_pcallk(L, nargs, nresults, errfunc, ctx, k);
117}
118
119[[gnu::always_inline]] int(lua_gettop)(lua_State* L) {
120    return luaData.fflua_gettop(L);
121}
122
123[[gnu::always_inline]] const char*(luaL_tolstring) (lua_State * L, int idx, size_t* len) {
124    return luaData.ffluaL_tolstring(L, idx, len);
125}
126
127[[gnu::always_inline]] int(lua_error)(lua_State* L) {
128    return luaData.fflua_error(L);
129}
130
131[[gnu::always_inline]] void(lua_pushcclosure)(lua_State* L, lua_CFunction fn, int n) {
132    return luaData.fflua_pushcclosure(L, fn, n);
133}
134
135[[gnu::always_inline]] void(luaL_checkany)(lua_State* L, int idx) {
136    return luaData.ffluaL_checkany(L, idx);
137}
138
139[[gnu::always_inline]] void(lua_callk)(lua_State* L, int nargs, int nresults, lua_KContext ctx, lua_KFunction k) {
140    return luaData.fflua_callk(L, nargs, nresults, ctx, k);
141}
142
143[[gnu::always_inline]] int(lua_isinteger)(lua_State* L, int idx) {
144    return luaData.fflua_isinteger(L, idx);
145}
146
147[[gnu::always_inline]] int(lua_next)(lua_State* L, int idx) {
148    return luaData.fflua_next(L, idx);
149}
150
151[[gnu::always_inline]] int(lua_rawgeti)(lua_State* L, int idx, lua_Integer n) {
152    return luaData.fflua_rawgeti(L, idx, n);
153}
154
155[[gnu::always_inline]]
156        #if LUA_VERSION_NUM > 503
157lua_Unsigned
158        #else
159size_t
160        #endif
161    (lua_rawlen)(lua_State* L, int idx) {
162    return luaData.fflua_rawlen(L, idx);
163}
164
165[[gnu::always_inline]] void(lua_setglobal)(lua_State* L, const char* name) {
166    return luaData.fflua_setglobal(L, name);
167}
168
169[[gnu::always_inline]] int(lua_toboolean)(lua_State* L, int idx) {
170    return luaData.fflua_toboolean(L, idx);
171}
172
173[[gnu::always_inline]] lua_Integer(lua_tointegerx)(lua_State* L, int idx, int* isnum) {
174    return luaData.fflua_tointegerx(L, idx, isnum);
175}
176
177[[gnu::always_inline]] lua_Number(lua_tonumberx)(lua_State* L, int idx, int* isnum) {
178    return luaData.fflua_tonumberx(L, idx, isnum);
179}
180
181[[gnu::always_inline]] int(lua_type)(lua_State* L, int idx) {
182    return luaData.fflua_type(L, idx);
183}
184    #endif
185
186const char* ffLuaLoadState(void);
187
188#endif