| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- #ifndef KEPLER_PROJECT_COMPAT53_H_
- #define KEPLER_PROJECT_COMPAT53_H_
- #include <stddef.h>
- #include <limits.h>
- #include <string.h>
- #if defined(__cplusplus) && !defined(COMPAT53_LUA_CPP)
- extern "C" {
- #endif
- #include <lua.h>
- #include <lauxlib.h>
- #include <lualib.h>
- #if defined(__cplusplus) && !defined(COMPAT53_LUA_CPP)
- }
- #endif
- #ifndef COMPAT53_PREFIX
- /* we chose this name because many other lua bindings / libs have
- * their own compatibility layer, and that use the compat53 declaration
- * frequently, causing all kinds of linker / compiler issues
- */
- # define COMPAT53_PREFIX kp_compat53
- #endif // COMPAT53_PREFIX
- #ifndef COMPAT53_API
- # if defined(COMPAT53_INCLUDE_SOURCE) && COMPAT53_INCLUDE_SOURCE
- # if defined(__GNUC__) || defined(__clang__)
- # define COMPAT53_API __attribute__((__unused__)) static inline
- # else
- # define COMPAT53_API static inline
- # endif /* Clang/GCC */
- # else /* COMPAT53_INCLUDE_SOURCE */
- /* we are not including source, so everything is extern */
- # define COMPAT53_API extern
- # endif /* COMPAT53_INCLUDE_SOURCE */
- #endif /* COMPAT53_PREFIX */
- #define COMPAT53_CONCAT_HELPER(a, b) a##b
- #define COMPAT53_CONCAT(a, b) COMPAT53_CONCAT_HELPER(a, b)
- /* declarations for Lua 5.1 */
- #if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM == 501
- /* XXX not implemented:
- * lua_arith (new operators)
- * lua_upvalueid
- * lua_upvaluejoin
- * lua_version
- * lua_yieldk
- */
- #ifndef LUA_OK
- # define LUA_OK 0
- #endif
- #ifndef LUA_OPADD
- # define LUA_OPADD 0
- #endif
- #ifndef LUA_OPSUB
- # define LUA_OPSUB 1
- #endif
- #ifndef LUA_OPMUL
- # define LUA_OPMUL 2
- #endif
- #ifndef LUA_OPDIV
- # define LUA_OPDIV 3
- #endif
- #ifndef LUA_OPMOD
- # define LUA_OPMOD 4
- #endif
- #ifndef LUA_OPPOW
- # define LUA_OPPOW 5
- #endif
- #ifndef LUA_OPUNM
- # define LUA_OPUNM 6
- #endif
- #ifndef LUA_OPEQ
- # define LUA_OPEQ 0
- #endif
- #ifndef LUA_OPLT
- # define LUA_OPLT 1
- #endif
- #ifndef LUA_OPLE
- # define LUA_OPLE 2
- #endif
- /* LuaJIT/Lua 5.1 does not have the updated
- * error codes for thread status/function returns (but some patched versions do)
- * define it only if it's not found
- */
- #if !defined(LUA_ERRGCMM)
- /* Use + 2 because in some versions of Lua (Lua 5.1)
- * LUA_ERRFILE is defined as (LUA_ERRERR+1)
- * so we need to avoid it (LuaJIT might have something at this
- * integer value too)
- */
- # define LUA_ERRGCMM (LUA_ERRERR + 2)
- #endif /* LUA_ERRGCMM define */
- #if !defined(MOONJIT_VERSION)
- typedef size_t lua_Unsigned;
- #endif
- typedef struct luaL_Buffer_53 {
- luaL_Buffer b; /* make incorrect code crash! */
- char *ptr;
- size_t nelems;
- size_t capacity;
- lua_State *L2;
- } luaL_Buffer_53;
- #define luaL_Buffer luaL_Buffer_53
- /* In PUC-Rio 5.1, userdata is a simple FILE*
- * In LuaJIT, it's a struct where the first member is a FILE*
- * We can't support the `closef` member
- */
- typedef struct luaL_Stream {
- FILE *f;
- } luaL_Stream;
- #define lua_absindex COMPAT53_CONCAT(COMPAT53_PREFIX, _absindex)
- COMPAT53_API int lua_absindex(lua_State *L, int i);
- #define lua_arith COMPAT53_CONCAT(COMPAT53_PREFIX, _arith)
- COMPAT53_API void lua_arith(lua_State *L, int op);
- #define lua_compare COMPAT53_CONCAT(COMPAT53_PREFIX, _compare)
- COMPAT53_API int lua_compare(lua_State *L, int idx1, int idx2, int op);
- #define lua_copy COMPAT53_CONCAT(COMPAT53_PREFIX, _copy)
- COMPAT53_API void lua_copy(lua_State *L, int from, int to);
- #define lua_getuservalue(L, i) \
- (lua_getfenv((L), (i)), lua_type((L), -1))
- #define lua_setuservalue(L, i) \
- (luaL_checktype((L), -1, LUA_TTABLE), lua_setfenv((L), (i)))
- #define lua_len COMPAT53_CONCAT(COMPAT53_PREFIX, _len)
- COMPAT53_API void lua_len(lua_State *L, int i);
- #define lua_pushstring(L, s) \
- (lua_pushstring((L), (s)), lua_tostring((L), -1))
- #define lua_pushlstring(L, s, len) \
- ((((len) == 0) ? lua_pushlstring((L), "", 0) : lua_pushlstring((L), (s), (len))), lua_tostring((L), -1))
- #ifndef luaL_newlibtable
- # define luaL_newlibtable(L, l) \
- (lua_createtable((L), 0, sizeof((l))/sizeof(*(l))-1))
- #endif
- #ifndef luaL_newlib
- # define luaL_newlib(L, l) \
- (luaL_newlibtable((L), (l)), luaL_register((L), NULL, (l)))
- #endif
- #ifndef lua_pushglobaltable
- # define lua_pushglobaltable(L) \
- lua_pushvalue((L), LUA_GLOBALSINDEX)
- #endif
- #define lua_rawgetp COMPAT53_CONCAT(COMPAT53_PREFIX, _rawgetp)
- COMPAT53_API int lua_rawgetp(lua_State *L, int i, const void *p);
- #define lua_rawsetp COMPAT53_CONCAT(COMPAT53_PREFIX, _rawsetp)
- COMPAT53_API void lua_rawsetp(lua_State *L, int i, const void *p);
- #define lua_rawlen(L, i) lua_objlen((L), (i))
- #define lua_tointeger(L, i) lua_tointegerx((L), (i), NULL)
- #define lua_tonumberx COMPAT53_CONCAT(COMPAT53_PREFIX, _tonumberx)
- COMPAT53_API lua_Number lua_tonumberx(lua_State *L, int i, int *isnum);
- #define luaL_checkversion COMPAT53_CONCAT(COMPAT53_PREFIX, L_checkversion)
- COMPAT53_API void luaL_checkversion(lua_State *L);
- #define lua_load COMPAT53_CONCAT(COMPAT53_PREFIX, _load_53)
- COMPAT53_API int lua_load(lua_State *L, lua_Reader reader, void *data, const char* source, const char* mode);
- #define luaL_loadfilex COMPAT53_CONCAT(COMPAT53_PREFIX, L_loadfilex)
- COMPAT53_API int luaL_loadfilex(lua_State *L, const char *filename, const char *mode);
- #define luaL_loadbufferx COMPAT53_CONCAT(COMPAT53_PREFIX, L_loadbufferx)
- COMPAT53_API int luaL_loadbufferx(lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
- #define luaL_checkstack COMPAT53_CONCAT(COMPAT53_PREFIX, L_checkstack_53)
- COMPAT53_API void luaL_checkstack(lua_State *L, int sp, const char *msg);
- #define luaL_getsubtable COMPAT53_CONCAT(COMPAT53_PREFIX, L_getsubtable)
- COMPAT53_API int luaL_getsubtable(lua_State* L, int i, const char *name);
- #define luaL_len COMPAT53_CONCAT(COMPAT53_PREFIX, L_len)
- COMPAT53_API lua_Integer luaL_len(lua_State *L, int i);
- #define luaL_setfuncs COMPAT53_CONCAT(COMPAT53_PREFIX, L_setfuncs)
- COMPAT53_API void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup);
- #define luaL_setmetatable COMPAT53_CONCAT(COMPAT53_PREFIX, L_setmetatable)
- COMPAT53_API void luaL_setmetatable(lua_State *L, const char *tname);
- #define luaL_testudata COMPAT53_CONCAT(COMPAT53_PREFIX, L_testudata)
- COMPAT53_API void *luaL_testudata(lua_State *L, int i, const char *tname);
- #define luaL_traceback COMPAT53_CONCAT(COMPAT53_PREFIX, L_traceback)
- COMPAT53_API void luaL_traceback(lua_State *L, lua_State *L1, const char *msg, int level);
- #define luaL_fileresult COMPAT53_CONCAT(COMPAT53_PREFIX, L_fileresult)
- COMPAT53_API int luaL_fileresult(lua_State *L, int stat, const char *fname);
- #define luaL_execresult COMPAT53_CONCAT(COMPAT53_PREFIX, L_execresult)
- COMPAT53_API int luaL_execresult(lua_State *L, int stat);
- #define lua_callk(L, na, nr, ctx, cont) \
- ((void)(ctx), (void)(cont), lua_call((L), (na), (nr)))
- #define lua_pcallk(L, na, nr, err, ctx, cont) \
- ((void)(ctx), (void)(cont), lua_pcall((L), (na), (nr), (err)))
- #define lua_resume(L, from, nargs) \
- ((void)(from), lua_resume((L), (nargs)))
- #define luaL_buffinit COMPAT53_CONCAT(COMPAT53_PREFIX, _buffinit_53)
- COMPAT53_API void luaL_buffinit(lua_State *L, luaL_Buffer_53 *B);
- #define luaL_prepbuffsize COMPAT53_CONCAT(COMPAT53_PREFIX, _prepbufsize_53)
- COMPAT53_API char *luaL_prepbuffsize(luaL_Buffer_53 *B, size_t s);
- #define luaL_addlstring COMPAT53_CONCAT(COMPAT53_PREFIX, _addlstring_53)
- COMPAT53_API void luaL_addlstring(luaL_Buffer_53 *B, const char *s, size_t l);
- #define luaL_addvalue COMPAT53_CONCAT(COMPAT53_PREFIX, _addvalue_53)
- COMPAT53_API void luaL_addvalue(luaL_Buffer_53 *B);
- #define luaL_pushresult COMPAT53_CONCAT(COMPAT53_PREFIX, _pushresult_53)
- COMPAT53_API void luaL_pushresult(luaL_Buffer_53 *B);
- #undef luaL_buffinitsize
- #define luaL_buffinitsize(L, B, s) \
- (luaL_buffinit((L), (B)), luaL_prepbuffsize((B), (s)))
- #undef luaL_prepbuffer
- #define luaL_prepbuffer(B) \
- luaL_prepbuffsize((B), LUAL_BUFFERSIZE)
- #undef luaL_addchar
- #define luaL_addchar(B, c) \
- ((void)((B)->nelems < (B)->capacity || luaL_prepbuffsize((B), 1)), \
- ((B)->ptr[(B)->nelems++] = (c)))
- #undef luaL_addsize
- #define luaL_addsize(B, s) \
- ((B)->nelems += (s))
- #undef luaL_addstring
- #define luaL_addstring(B, s) \
- luaL_addlstring((B), (s), strlen((s)))
- #undef luaL_pushresultsize
- #define luaL_pushresultsize(B, s) \
- (luaL_addsize((B), (s)), luaL_pushresult((B)))
- #if defined(LUA_COMPAT_APIINTCASTS)
- #define lua_pushunsigned(L, n) \
- lua_pushinteger((L), (lua_Integer)(n))
- #define lua_tounsignedx(L, i, is) \
- ((lua_Unsigned)lua_tointegerx((L), (i), (is)))
- #define lua_tounsigned(L, i) \
- lua_tounsignedx((L), (i), NULL)
- #define luaL_checkunsigned(L, a) \
- ((lua_Unsigned)luaL_checkinteger((L), (a)))
- #define luaL_optunsigned(L, a, d) \
- ((lua_Unsigned)luaL_optinteger((L), (a), (lua_Integer)(d)))
- #endif
- #endif /* Lua 5.1 only */
- /* declarations for Lua 5.1 and 5.2 */
- #if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM <= 502
- typedef int lua_KContext;
- typedef int(*lua_KFunction)(lua_State *L, int status, lua_KContext ctx);
- #define lua_dump(L, w, d, s) \
- ((void)(s), lua_dump((L), (w), (d)))
- #define lua_getfield(L, i, k) \
- (lua_getfield((L), (i), (k)), lua_type((L), -1))
- #define lua_gettable(L, i) \
- (lua_gettable((L), (i)), lua_type((L), -1))
- #define lua_geti COMPAT53_CONCAT(COMPAT53_PREFIX, _geti)
- COMPAT53_API int lua_geti(lua_State *L, int index, lua_Integer i);
- #define lua_isinteger COMPAT53_CONCAT(COMPAT53_PREFIX, _isinteger)
- COMPAT53_API int lua_isinteger(lua_State *L, int index);
- #define lua_tointegerx COMPAT53_CONCAT(COMPAT53_PREFIX, _tointegerx_53)
- COMPAT53_API lua_Integer lua_tointegerx(lua_State *L, int i, int *isnum);
- #define lua_numbertointeger(n, p) \
- ((*(p) = (lua_Integer)(n)), 1)
- #define lua_rawget(L, i) \
- (lua_rawget((L), (i)), lua_type((L), -1))
- #define lua_rawgeti(L, i, n) \
- (lua_rawgeti((L), (i), (n)), lua_type((L), -1))
- #define lua_rotate COMPAT53_CONCAT(COMPAT53_PREFIX, _rotate)
- COMPAT53_API void lua_rotate(lua_State *L, int idx, int n);
- #define lua_seti COMPAT53_CONCAT(COMPAT53_PREFIX, _seti)
- COMPAT53_API void lua_seti(lua_State *L, int index, lua_Integer i);
- #define lua_stringtonumber COMPAT53_CONCAT(COMPAT53_PREFIX, _stringtonumber)
- COMPAT53_API size_t lua_stringtonumber(lua_State *L, const char *s);
- #define luaL_tolstring COMPAT53_CONCAT(COMPAT53_PREFIX, L_tolstring)
- COMPAT53_API const char *luaL_tolstring(lua_State *L, int idx, size_t *len);
- #define luaL_getmetafield(L, o, e) \
- (luaL_getmetafield((L), (o), (e)) ? lua_type((L), -1) : LUA_TNIL)
- #define luaL_newmetatable(L, tn) \
- (luaL_newmetatable((L), (tn)) ? (lua_pushstring((L), (tn)), lua_setfield((L), -2, "__name"), 1) : 0)
- #define luaL_requiref COMPAT53_CONCAT(COMPAT53_PREFIX, L_requiref_53)
- COMPAT53_API void luaL_requiref(lua_State *L, const char *modname,
- lua_CFunction openf, int glb);
- #endif /* Lua 5.1 and Lua 5.2 */
- /* declarations for Lua 5.2 */
- #if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM == 502
- /* XXX not implemented:
- * lua_isyieldable
- * lua_getextraspace
- * lua_arith (new operators)
- * lua_pushfstring (new formats)
- */
- #define lua_getglobal(L, n) \
- (lua_getglobal((L), (n)), lua_type((L), -1))
- #define lua_getuservalue(L, i) \
- (lua_getuservalue((L), (i)), lua_type((L), -1))
- #define lua_pushlstring(L, s, len) \
- (((len) == 0) ? lua_pushlstring((L), "", 0) : lua_pushlstring((L), (s), (len)))
- #define lua_rawgetp(L, i, p) \
- (lua_rawgetp((L), (i), (p)), lua_type((L), -1))
- #define LUA_KFUNCTION(_name) \
- static int (_name)(lua_State *L, int status, lua_KContext ctx); \
- static int (_name ## _52)(lua_State *L) { \
- lua_KContext ctx; \
- int status = lua_getctx(L, &ctx); \
- return (_name)(L, status, ctx); \
- } \
- static int (_name)(lua_State *L, int status, lua_KContext ctx)
- #define lua_pcallk(L, na, nr, err, ctx, cont) \
- lua_pcallk((L), (na), (nr), (err), (ctx), cont ## _52)
- #define lua_callk(L, na, nr, ctx, cont) \
- lua_callk((L), (na), (nr), (ctx), cont ## _52)
- #define lua_yieldk(L, nr, ctx, cont) \
- lua_yieldk((L), (nr), (ctx), cont ## _52)
- #ifdef lua_call
- # undef lua_call
- # define lua_call(L, na, nr) \
- (lua_callk)((L), (na), (nr), 0, NULL)
- #endif
- #ifdef lua_pcall
- # undef lua_pcall
- # define lua_pcall(L, na, nr, err) \
- (lua_pcallk)((L), (na), (nr), (err), 0, NULL)
- #endif
- #ifdef lua_yield
- # undef lua_yield
- # define lua_yield(L, nr) \
- (lua_yieldk)((L), (nr), 0, NULL)
- #endif
- #endif /* Lua 5.2 only */
- /* other Lua versions */
- #if !defined(LUA_VERSION_NUM) || LUA_VERSION_NUM < 501 || LUA_VERSION_NUM > 504
- # error "unsupported Lua version (i.e. not Lua 5.1, 5.2, 5.3, or 5.4)"
- #endif /* other Lua versions except 5.1, 5.2, 5.3, and 5.4 */
- /* helper macro for defining continuation functions (for every version
- * *except* Lua 5.2) */
- #ifndef LUA_KFUNCTION
- #define LUA_KFUNCTION(_name) \
- static int (_name)(lua_State *L, int status, lua_KContext ctx)
- #endif
- #if defined(COMPAT53_INCLUDE_SOURCE) && COMPAT53_INCLUDE_SOURCE == 1
- # include "compat-5.3.c.h"
- #endif
- #endif /* KEPLER_PROJECT_COMPAT53_H_ */
|