From 735968e68543bb5141122f181608d0d7ada9a3be Mon Sep 17 00:00:00 2001 From: raysan5 Date: Wed, 3 Aug 2016 21:38:21 +0200 Subject: [PATCH] [rlua] new module: raylib Lua binding --- examples/core_basic_window.lua | 41 + examples/rlua_execute_file.c | 39 + src/external/lua/include/lauxlib.h | 256 ++ src/external/lua/include/lua.h | 486 ++++ src/external/lua/include/lua.hpp | 9 + src/external/lua/include/luaconf.h | 769 ++++++ src/external/lua/include/lualib.h | 58 + src/external/lua/lib/liblua53.a | Bin 0 -> 322424 bytes src/external/lua/lib/liblua53dll.a | Bin 0 -> 91416 bytes src/rlua.h | 3631 ++++++++++++++++++++++++++++ 10 files changed, 5289 insertions(+) create mode 100644 examples/core_basic_window.lua create mode 100644 examples/rlua_execute_file.c create mode 100644 src/external/lua/include/lauxlib.h create mode 100644 src/external/lua/include/lua.h create mode 100644 src/external/lua/include/lua.hpp create mode 100644 src/external/lua/include/luaconf.h create mode 100644 src/external/lua/include/lualib.h create mode 100644 src/external/lua/lib/liblua53.a create mode 100644 src/external/lua/lib/liblua53dll.a create mode 100644 src/rlua.h diff --git a/examples/core_basic_window.lua b/examples/core_basic_window.lua new file mode 100644 index 000000000..4f2880059 --- /dev/null +++ b/examples/core_basic_window.lua @@ -0,0 +1,41 @@ +-- Initialization +---------------------------------------------------------------------------------------- +local screenWidth = 800 +local screenHeight = 450 + +InitWindow(screenWidth, screenHeight, "raylib [rlua] example - basic window") + +InitAudioDevice() + +--local pause = false +--local texture = LoadTexture("resources/texture.png") + +SetTargetFPS(60) -- Set target frames-per-second +---------------------------------------------------------------------------------------- + +while not WindowShouldClose() do + -- Update + ------------------------------------------------------------------------------------ + --if (IsKeyPressed(KEY.SPACE)) then + -- pause = not pause + --end + ------------------------------------------------------------------------------------ + + -- Draw + ------------------------------------------------------------------------------------ + BeginDrawing() + + ClearBackground(RAYWHITE) + + DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY) + + EndDrawing() + ------------------------------------------------------------------------------------ +end + +-- De-Initialization +------------------------------------------------------------------------------------ +CloseAudioDevice() -- Close audio device + +CloseWindow() -- Close window and OpenGL context +------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/examples/rlua_execute_file.c b/examples/rlua_execute_file.c new file mode 100644 index 000000000..b21a44599 --- /dev/null +++ b/examples/rlua_execute_file.c @@ -0,0 +1,39 @@ +/******************************************************************************************* +* +* raylib [rlua] example - Lua file execution +* +* NOTE: This example requires Lua library (http://luabinaries.sourceforge.net/download.html) +* +* Compile example using: +* gcc -o $(NAME_PART).exe $(FILE_NAME) $(RAYLIB_DIR)\raylib_icon / +* -I../src -I../src/external/lua/include -L../src/external/lua/lib / +* -lraylib -lglfw3 -lopengl32 -lopenal32 -llua53 -lgdi32 -std=c99 +* +* This example has been created using raylib 1.6 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define RLUA_IMPLEMENTATION +#include "rlua.h" + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + InitLuaDevice(); + //-------------------------------------------------------------------------------------- + + ExecuteLuaFile("core_basic_window.lua"); + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseLuaDevice(); // Close Lua device and free resources + //-------------------------------------------------------------------------------------- + + return 0; +} \ No newline at end of file diff --git a/src/external/lua/include/lauxlib.h b/src/external/lua/include/lauxlib.h new file mode 100644 index 000000000..ddb7c2283 --- /dev/null +++ b/src/external/lua/include/lauxlib.h @@ -0,0 +1,256 @@ +/* +** $Id: lauxlib.h,v 1.129 2015/11/23 11:29:43 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + + +/* extra error code for 'luaL_load' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + +#define LUAL_NUMSIZES (sizeof(lua_Integer)*16 + sizeof(lua_Number)) + +LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver, size_t sz); +#define luaL_checkversion(L) \ + luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES) + +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); +LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int arg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int arg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int arg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int arg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int arg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int arg, + lua_Integer def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int arg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int arg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int arg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname); +LUALIB_API int (luaL_execresult) (lua_State *L, int stat); + +/* predefined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, + const char *mode); + +#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL) + +LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, + const char *name, const char *mode); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + +LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx); + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); + +LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); + +LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, + const char *msg, int level); + +LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, + lua_CFunction openf, int glb); + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + + +#define luaL_newlibtable(L,l) \ + lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) + +#define luaL_newlib(L,l) \ + (luaL_checkversion(L), luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) + +#define luaL_argcheck(L, cond,arg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (arg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + +typedef struct luaL_Buffer { + char *b; /* buffer address */ + size_t size; /* buffer size */ + size_t n; /* number of characters in buffer */ + lua_State *L; + char initb[LUAL_BUFFERSIZE]; /* initial buffer */ +} luaL_Buffer; + + +#define luaL_addchar(B,c) \ + ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ + ((B)->b[(B)->n++] = (c))) + +#define luaL_addsize(B,s) ((B)->n += (s)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); +LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); + +#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) + +/* }====================================================== */ + + + +/* +** {====================================================== +** File handles for IO library +** ======================================================= +*/ + +/* +** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and +** initial structure 'luaL_Stream' (it may contain other fields +** after that initial structure). +*/ + +#define LUA_FILEHANDLE "FILE*" + + +typedef struct luaL_Stream { + FILE *f; /* stream (NULL for incompletely created streams) */ + lua_CFunction closef; /* to close stream (NULL for closed streams) */ +} luaL_Stream; + +/* }====================================================== */ + + + +/* compatibility with old module system */ +#if defined(LUA_COMPAT_MODULE) + +LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, + int sizehint); +LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); + +#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0)) + +#endif + + +/* +** {================================================================== +** "Abstraction Layer" for basic report of messages and errors +** =================================================================== +*/ + +/* print a string */ +#if !defined(lua_writestring) +#define lua_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) +#endif + +/* print a newline and flush the output */ +#if !defined(lua_writeline) +#define lua_writeline() (lua_writestring("\n", 1), fflush(stdout)) +#endif + +/* print an error message */ +#if !defined(lua_writestringerror) +#define lua_writestringerror(s,p) \ + (fprintf(stderr, (s), (p)), fflush(stderr)) +#endif + +/* }================================================================== */ + + +/* +** {============================================================ +** Compatibility with deprecated conversions +** ============================================================= +*/ +#if defined(LUA_COMPAT_APIINTCASTS) + +#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))) + +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) + +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#endif +/* }============================================================ */ + + + +#endif + + diff --git a/src/external/lua/include/lua.h b/src/external/lua/include/lua.h new file mode 100644 index 000000000..f78899fc5 --- /dev/null +++ b/src/external/lua/include/lua.h @@ -0,0 +1,486 @@ +/* +** $Id: lua.h,v 1.331 2016/05/30 15:53:28 roberto Exp $ +** Lua - A Scripting Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION_MAJOR "5" +#define LUA_VERSION_MINOR "3" +#define LUA_VERSION_NUM 503 +#define LUA_VERSION_RELEASE "3" + +#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR +#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE +#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2016 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" + + +/* mark for precompiled code ('Lua') */ +#define LUA_SIGNATURE "\x1bLua" + +/* option for multiple returns in 'lua_pcall' and 'lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** Pseudo-indices +** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty +** space after that to help overflow detection) +*/ +#define LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000) +#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) + + +/* thread status */ +#define LUA_OK 0 +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRGCMM 5 +#define LUA_ERRERR 6 + + +typedef struct lua_State lua_State; + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + +#define LUA_NUMTAGS 9 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* predefined values in the registry */ +#define LUA_RIDX_MAINTHREAD 1 +#define LUA_RIDX_GLOBALS 2 +#define LUA_RIDX_LAST LUA_RIDX_GLOBALS + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + +/* unsigned integer type */ +typedef LUA_UNSIGNED lua_Unsigned; + +/* type for continuation-function contexts */ +typedef LUA_KCONTEXT lua_KContext; + + +/* +** Type for C functions registered with Lua +*/ +typedef int (*lua_CFunction) (lua_State *L); + +/* +** Type for continuation functions +*/ +typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx); + + +/* +** Type for functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud); + + +/* +** Type for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* +** RCS ident string +*/ +extern const char lua_ident[]; + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +LUA_API const lua_Number *(lua_version) (lua_State *L); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_absindex) (lua_State *L, int idx); +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_rotate) (lua_State *L, int idx, int n); +LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx); +LUA_API int (lua_checkstack) (lua_State *L, int n); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isinteger) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); +LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_rawlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** Comparison and arithmetic functions +*/ + +#define LUA_OPADD 0 /* ORDER TM, ORDER OP */ +#define LUA_OPSUB 1 +#define LUA_OPMUL 2 +#define LUA_OPMOD 3 +#define LUA_OPPOW 4 +#define LUA_OPDIV 5 +#define LUA_OPIDIV 6 +#define LUA_OPBAND 7 +#define LUA_OPBOR 8 +#define LUA_OPBXOR 9 +#define LUA_OPSHL 10 +#define LUA_OPSHR 11 +#define LUA_OPUNM 12 +#define LUA_OPBNOT 13 + +LUA_API void (lua_arith) (lua_State *L, int op); + +#define LUA_OPEQ 0 +#define LUA_OPLT 1 +#define LUA_OPLE 2 + +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t len); +LUA_API const char *(lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API int (lua_getglobal) (lua_State *L, const char *name); +LUA_API int (lua_gettable) (lua_State *L, int idx); +LUA_API int (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API int (lua_geti) (lua_State *L, int idx, lua_Integer n); +LUA_API int (lua_rawget) (lua_State *L, int idx); +LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n); +LUA_API int (lua_rawgetp) (lua_State *L, int idx, const void *p); + +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API int (lua_getuservalue) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_setglobal) (lua_State *L, const char *name); +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_seti) (lua_State *L, int idx, lua_Integer n); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, lua_Integer n); +LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API void (lua_setuservalue) (lua_State *L, int idx); + + +/* +** 'load' and 'call' functions (load and run Lua code) +*/ +LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, + lua_KContext ctx, lua_KFunction k); +#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) + +LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, + lua_KContext ctx, lua_KFunction k); +#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) + +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname, const char *mode); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yieldk) (lua_State *L, int nresults, lua_KContext ctx, + lua_KFunction k); +LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg); +LUA_API int (lua_status) (lua_State *L); +LUA_API int (lua_isyieldable) (lua_State *L); + +#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) + + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 +#define LUA_GCISRUNNING 9 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); +LUA_API void (lua_len) (lua_State *L, int idx); + +LUA_API size_t (lua_stringtonumber) (lua_State *L, const char *s); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** {============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_getextraspace(L) ((void *)((char *)(L) - LUA_EXTRASPACE)) + +#define lua_tonumber(L,i) lua_tonumberx(L,(i),NULL) +#define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL) + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) lua_pushstring(L, "" s) + +#define lua_pushglobaltable(L) \ + ((void)lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + +#define lua_insert(L,idx) lua_rotate(L, (idx), 1) + +#define lua_remove(L,idx) (lua_rotate(L, (idx), -1), lua_pop(L, 1)) + +#define lua_replace(L,idx) (lua_copy(L, -1, (idx)), lua_pop(L, 1)) + +/* }============================================================== */ + + +/* +** {============================================================== +** compatibility macros for unsigned conversions +** =============================================================== +*/ +#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) + +#endif +/* }============================================================== */ + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILCALL 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debugger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar); +LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n); +LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); + +LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n); +LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1, + int fidx2, int n2); + +LUA_API void (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook (lua_gethook) (lua_State *L); +LUA_API int (lua_gethookmask) (lua_State *L); +LUA_API int (lua_gethookcount) (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */ + const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + unsigned char nups; /* (u) number of upvalues */ + unsigned char nparams;/* (u) number of parameters */ + char isvararg; /* (u) */ + char istailcall; /* (t) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + struct CallInfo *i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2016 Lua.org, PUC-Rio. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/src/external/lua/include/lua.hpp b/src/external/lua/include/lua.hpp new file mode 100644 index 000000000..ec417f594 --- /dev/null +++ b/src/external/lua/include/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/src/external/lua/include/luaconf.h b/src/external/lua/include/luaconf.h new file mode 100644 index 000000000..867e9cb18 --- /dev/null +++ b/src/external/lua/include/luaconf.h @@ -0,0 +1,769 @@ +/* +** $Id: luaconf.h,v 1.255 2016/05/01 20:06:09 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef luaconf_h +#define luaconf_h + +#include +#include + + +/* +** =================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +** {==================================================================== +** System Configuration: macros to adapt (if needed) Lua to some +** particular platform, for instance compiling it with 32-bit numbers or +** restricting it to C89. +** ===================================================================== +*/ + +/* +@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats. You +** can also define LUA_32BITS in the make file, but changing here you +** ensure that all software connected to Lua will be compiled with the +** same configuration. +*/ +/* #define LUA_32BITS */ + + +/* +@@ LUA_USE_C89 controls the use of non-ISO-C89 features. +** Define it if you want Lua to avoid the use of a few C99 features +** or Windows-specific features on Windows. +*/ +/* #define LUA_USE_C89 */ + + +/* +** By default, Lua on Windows use (some) specific Windows features +*/ +#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE) +#define LUA_USE_WINDOWS /* enable goodies for regular Windows */ +#endif + + +#if defined(LUA_USE_WINDOWS) +#define LUA_DL_DLL /* enable support for DLL */ +#define LUA_USE_C89 /* broadly, Windows is C89 */ +#endif + + +#if defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#endif + + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* MacOS does not need -ldl */ +#define LUA_USE_READLINE /* needs an extra library: -lreadline */ +#endif + + +/* +@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for +** C89 ('long' and 'double'); Windows always has '__int64', so it does +** not need to use this case. +*/ +#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS) +#define LUA_C89_NUMBERS +#endif + + + +/* +@@ LUAI_BITSINT defines the (minimum) number of bits in an 'int'. +*/ +/* avoid undefined shifts */ +#if ((INT_MAX >> 15) >> 15) >= 1 +#define LUAI_BITSINT 32 +#else +/* 'int' always must have at least 16 bits */ +#define LUAI_BITSINT 16 +#endif + + +/* +@@ LUA_INT_TYPE defines the type for Lua integers. +@@ LUA_FLOAT_TYPE defines the type for Lua floats. +** Lua should work fine with any mix of these options (if supported +** by your C compiler). The usual configurations are 64-bit integers +** and 'double' (the default), 32-bit integers and 'float' (for +** restricted platforms), and 'long'/'double' (for C compilers not +** compliant with C99, which may not have support for 'long long'). +*/ + +/* predefined options for LUA_INT_TYPE */ +#define LUA_INT_INT 1 +#define LUA_INT_LONG 2 +#define LUA_INT_LONGLONG 3 + +/* predefined options for LUA_FLOAT_TYPE */ +#define LUA_FLOAT_FLOAT 1 +#define LUA_FLOAT_DOUBLE 2 +#define LUA_FLOAT_LONGDOUBLE 3 + +#if defined(LUA_32BITS) /* { */ +/* +** 32-bit integers and 'float' +*/ +#if LUAI_BITSINT >= 32 /* use 'int' if big enough */ +#define LUA_INT_TYPE LUA_INT_INT +#else /* otherwise use 'long' */ +#define LUA_INT_TYPE LUA_INT_LONG +#endif +#define LUA_FLOAT_TYPE LUA_FLOAT_FLOAT + +#elif defined(LUA_C89_NUMBERS) /* }{ */ +/* +** largest types available for C89 ('long' and 'double') +*/ +#define LUA_INT_TYPE LUA_INT_LONG +#define LUA_FLOAT_TYPE LUA_FLOAT_DOUBLE + +#endif /* } */ + + +/* +** default configuration for 64-bit Lua ('long long' and 'double') +*/ +#if !defined(LUA_INT_TYPE) +#define LUA_INT_TYPE LUA_INT_LONGLONG +#endif + +#if !defined(LUA_FLOAT_TYPE) +#define LUA_FLOAT_TYPE LUA_FLOAT_DOUBLE +#endif + +/* }================================================================== */ + + + + +/* +** {================================================================== +** Configuration for Paths. +** =================================================================== +*/ + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +** Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +** C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR +#if defined(_WIN32) /* { */ +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_SHRDIR "!\\..\\share\\lua\\" LUA_VDIR "\\" +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" \ + LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \ + ".\\?.lua;" ".\\?\\init.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.dll;" \ + LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \ + LUA_CDIR"loadall.dll;" ".\\?.dll;" \ + LUA_CDIR"?53.dll;" ".\\?53.dll" + +#else /* }{ */ + +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" +#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ + "./?.lua;" "./?/init.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so;" \ + LUA_CDIR"lib?53.so;" "./lib?53.so" +#endif /* } */ + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Marks for exported symbols in the C code +** =================================================================== +*/ + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all auxiliary library functions. +@@ LUAMOD_API is a mark for all standard library opening functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) /* { */ + +#if defined(LUA_CORE) || defined(LUA_LIB) /* { */ +#define LUA_API __declspec(dllexport) +#else /* }{ */ +#define LUA_API __declspec(dllimport) +#endif /* } */ + +#else /* }{ */ + +#define LUA_API extern + +#endif /* } */ + + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API +#define LUAMOD_API LUALIB_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +** exported to outside modules. +@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables +** that are not to be exported to outside modules (LUAI_DDEF for +** definitions and LUAI_DDEC for declarations). +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. Not all elf targets support +** this attribute. Unfortunately, gcc does not offer a way to check +** whether the target offers that support, and those without support +** give a warning about it. To avoid these warnings, change to the +** default definition. +*/ +#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) /* { */ +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#else /* }{ */ +#define LUAI_FUNC extern +#endif /* } */ + +#define LUAI_DDEC LUAI_FUNC +#define LUAI_DDEF /* empty */ + +/* }================================================================== */ + + +/* +** {================================================================== +** Compatibility with previous versions +** =================================================================== +*/ + +/* +@@ LUA_COMPAT_5_2 controls other macros for compatibility with Lua 5.2. +@@ LUA_COMPAT_5_1 controls other macros for compatibility with Lua 5.1. +** You can define it to get all options, or change specific options +** to fit your specific needs. +*/ +#if defined(LUA_COMPAT_5_2) /* { */ + +/* +@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated +** functions in the mathematical library. +*/ +#define LUA_COMPAT_MATHLIB + +/* +@@ LUA_COMPAT_BITLIB controls the presence of library 'bit32'. +*/ +#define LUA_COMPAT_BITLIB + +/* +@@ LUA_COMPAT_IPAIRS controls the effectiveness of the __ipairs metamethod. +*/ +#define LUA_COMPAT_IPAIRS + +/* +@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for +** manipulating other integer types (lua_pushunsigned, lua_tounsigned, +** luaL_checkint, luaL_checklong, etc.) +*/ +#define LUA_COMPAT_APIINTCASTS + +#endif /* } */ + + +#if defined(LUA_COMPAT_5_1) /* { */ + +/* Incompatibilities from 5.2 -> 5.3 */ +#define LUA_COMPAT_MATHLIB +#define LUA_COMPAT_APIINTCASTS + +/* +@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. +** You can replace it with 'table.unpack'. +*/ +#define LUA_COMPAT_UNPACK + +/* +@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. +** You can replace it with 'package.searchers'. +*/ +#define LUA_COMPAT_LOADERS + +/* +@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. +** You can call your C function directly (with light C functions). +*/ +#define lua_cpcall(L,f,u) \ + (lua_pushcfunction(L, (f)), \ + lua_pushlightuserdata(L,(u)), \ + lua_pcall(L,1,0,0)) + + +/* +@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. +** You can rewrite 'log10(x)' as 'log(x, 10)'. +*/ +#define LUA_COMPAT_LOG10 + +/* +@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base +** library. You can rewrite 'loadstring(s)' as 'load(s)'. +*/ +#define LUA_COMPAT_LOADSTRING + +/* +@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. +*/ +#define LUA_COMPAT_MAXN + +/* +@@ The following macros supply trivial compatibility for some +** changes in the API. The macros themselves document how to +** change your code to avoid using them. +*/ +#define lua_strlen(L,i) lua_rawlen(L, (i)) + +#define lua_objlen(L,i) lua_rawlen(L, (i)) + +#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) +#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) + +/* +@@ LUA_COMPAT_MODULE controls compatibility with previous +** module functions 'module' (Lua) and 'luaL_register' (C). +*/ +#define LUA_COMPAT_MODULE + +#endif /* } */ + + +/* +@@ LUA_COMPAT_FLOATSTRING makes Lua format integral floats without a +@@ a float mark ('.0'). +** This macro is not on by default even in compatibility mode, +** because this is not really an incompatibility. +*/ +/* #define LUA_COMPAT_FLOATSTRING */ + +/* }================================================================== */ + + + +/* +** {================================================================== +** Configuration for Numbers. +** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_* +** satisfy your needs. +** =================================================================== +*/ + +/* +@@ LUA_NUMBER is the floating-point type used by Lua. +@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +@@ over a floating number. +@@ l_mathlim(x) corrects limit name 'x' to the proper float type +** by prefixing it with one of FLT/DBL/LDBL. +@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats. +@@ LUA_NUMBER_FMT is the format for writing floats. +@@ lua_number2str converts a float to a string. +@@ l_mathop allows the addition of an 'l' or 'f' to all math operations. +@@ l_floor takes the floor of a float. +@@ lua_str2number converts a decimal numeric string to a number. +*/ + + +/* The following definitions are good for most cases here */ + +#define l_floor(x) (l_mathop(floor)(x)) + +#define lua_number2str(s,sz,n) l_sprintf((s), sz, LUA_NUMBER_FMT, (n)) + +/* +@@ lua_numbertointeger converts a float number to an integer, or +** returns 0 if float is not within the range of a lua_Integer. +** (The range comparisons are tricky because of rounding. The tests +** here assume a two-complement representation, where MININTEGER always +** has an exact representation as a float; MAXINTEGER may not have one, +** and therefore its conversion to float may have an ill-defined value.) +*/ +#define lua_numbertointeger(n,p) \ + ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \ + (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \ + (*(p) = (LUA_INTEGER)(n), 1)) + + +/* now the variable definitions */ + +#if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT /* { single float */ + +#define LUA_NUMBER float + +#define l_mathlim(n) (FLT_##n) + +#define LUAI_UACNUMBER double + +#define LUA_NUMBER_FRMLEN "" +#define LUA_NUMBER_FMT "%.7g" + +#define l_mathop(op) op##f + +#define lua_str2number(s,p) strtof((s), (p)) + + +#elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE /* }{ long double */ + +#define LUA_NUMBER long double + +#define l_mathlim(n) (LDBL_##n) + +#define LUAI_UACNUMBER long double + +#define LUA_NUMBER_FRMLEN "L" +#define LUA_NUMBER_FMT "%.19Lg" + +#define l_mathop(op) op##l + +#define lua_str2number(s,p) strtold((s), (p)) + +#elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE /* }{ double */ + +#define LUA_NUMBER double + +#define l_mathlim(n) (DBL_##n) + +#define LUAI_UACNUMBER double + +#define LUA_NUMBER_FRMLEN "" +#define LUA_NUMBER_FMT "%.14g" + +#define l_mathop(op) op + +#define lua_str2number(s,p) strtod((s), (p)) + +#else /* }{ */ + +#error "numeric float type not defined" + +#endif /* } */ + + + +/* +@@ LUA_INTEGER is the integer type used by Lua. +** +@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER. +** +@@ LUAI_UACINT is the result of an 'usual argument conversion' +@@ over a lUA_INTEGER. +@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers. +@@ LUA_INTEGER_FMT is the format for writing integers. +@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER. +@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER. +@@ lua_integer2str converts an integer to a string. +*/ + + +/* The following definitions are good for most cases here */ + +#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" +#define lua_integer2str(s,sz,n) l_sprintf((s), sz, LUA_INTEGER_FMT, (n)) + +#define LUAI_UACINT LUA_INTEGER + +/* +** use LUAI_UACINT here to avoid problems with promotions (which +** can turn a comparison between unsigneds into a signed comparison) +*/ +#define LUA_UNSIGNED unsigned LUAI_UACINT + + +/* now the variable definitions */ + +#if LUA_INT_TYPE == LUA_INT_INT /* { int */ + +#define LUA_INTEGER int +#define LUA_INTEGER_FRMLEN "" + +#define LUA_MAXINTEGER INT_MAX +#define LUA_MININTEGER INT_MIN + +#elif LUA_INT_TYPE == LUA_INT_LONG /* }{ long */ + +#define LUA_INTEGER long +#define LUA_INTEGER_FRMLEN "l" + +#define LUA_MAXINTEGER LONG_MAX +#define LUA_MININTEGER LONG_MIN + +#elif LUA_INT_TYPE == LUA_INT_LONGLONG /* }{ long long */ + +/* use presence of macro LLONG_MAX as proxy for C99 compliance */ +#if defined(LLONG_MAX) /* { */ +/* use ISO C99 stuff */ + +#define LUA_INTEGER long long +#define LUA_INTEGER_FRMLEN "ll" + +#define LUA_MAXINTEGER LLONG_MAX +#define LUA_MININTEGER LLONG_MIN + +#elif defined(LUA_USE_WINDOWS) /* }{ */ +/* in Windows, can use specific Windows types */ + +#define LUA_INTEGER __int64 +#define LUA_INTEGER_FRMLEN "I64" + +#define LUA_MAXINTEGER _I64_MAX +#define LUA_MININTEGER _I64_MIN + +#else /* }{ */ + +#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \ + or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)" + +#endif /* } */ + +#else /* }{ */ + +#error "numeric integer type not defined" + +#endif /* } */ + +/* }================================================================== */ + + +/* +** {================================================================== +** Dependencies with C99 and other C details +** =================================================================== +*/ + +/* +@@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89. +** (All uses in Lua have only one format item.) +*/ +#if !defined(LUA_USE_C89) +#define l_sprintf(s,sz,f,i) snprintf(s,sz,f,i) +#else +#define l_sprintf(s,sz,f,i) ((void)(sz), sprintf(s,f,i)) +#endif + + +/* +@@ lua_strx2number converts an hexadecimal numeric string to a number. +** In C99, 'strtod' does that conversion. Otherwise, you can +** leave 'lua_strx2number' undefined and Lua will provide its own +** implementation. +*/ +#if !defined(LUA_USE_C89) +#define lua_strx2number(s,p) lua_str2number(s,p) +#endif + + +/* +@@ lua_number2strx converts a float to an hexadecimal numeric string. +** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that. +** Otherwise, you can leave 'lua_number2strx' undefined and Lua will +** provide its own implementation. +*/ +#if !defined(LUA_USE_C89) +#define lua_number2strx(L,b,sz,f,n) ((void)L, l_sprintf(b,sz,f,n)) +#endif + + +/* +** 'strtof' and 'opf' variants for math functions are not valid in +** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the +** availability of these variants. ('math.h' is already included in +** all files that use these macros.) +*/ +#if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF)) +#undef l_mathop /* variants not available */ +#undef lua_str2number +#define l_mathop(op) (lua_Number)op /* no variant */ +#define lua_str2number(s,p) ((lua_Number)strtod((s), (p))) +#endif + + +/* +@@ LUA_KCONTEXT is the type of the context ('ctx') for continuation +** functions. It must be a numerical type; Lua will use 'intptr_t' if +** available, otherwise it will use 'ptrdiff_t' (the nearest thing to +** 'intptr_t' in C89) +*/ +#define LUA_KCONTEXT ptrdiff_t + +#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \ + __STDC_VERSION__ >= 199901L +#include +#if defined(INTPTR_MAX) /* even in C99 this type is optional */ +#undef LUA_KCONTEXT +#define LUA_KCONTEXT intptr_t +#endif +#endif + + +/* +@@ lua_getlocaledecpoint gets the locale "radix character" (decimal point). +** Change that if you do not want to use C locales. (Code using this +** macro must include header 'locale.h'.) +*/ +#if !defined(lua_getlocaledecpoint) +#define lua_getlocaledecpoint() (localeconv()->decimal_point[0]) +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Language Variations +** ===================================================================== +*/ + +/* +@@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some +** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from +** numbers to strings. Define LUA_NOCVTS2N to turn off automatic +** coercion from strings to numbers. +*/ +/* #define LUA_NOCVTN2S */ +/* #define LUA_NOCVTS2N */ + + +/* +@@ LUA_USE_APICHECK turns on several consistency checks on the C API. +** Define it as a help when debugging C code. +*/ +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(l,e) assert(e) +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Macros that affect the API and must be stable (that is, must be the +** same when you compile Lua and when you compile code that links to +** Lua). You probably do not want/need to change them. +** ===================================================================== +*/ + +/* +@@ LUAI_MAXSTACK limits the size of the Lua stack. +** CHANGE it if you need a different limit. This limit is arbitrary; +** its only purpose is to stop Lua from consuming unlimited stack +** space (and to reserve some numbers for pseudo-indices). +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_MAXSTACK 1000000 +#else +#define LUAI_MAXSTACK 15000 +#endif + + +/* +@@ LUA_EXTRASPACE defines the size of a raw memory area associated with +** a Lua state with very fast access. +** CHANGE it if you need a different size. +*/ +#define LUA_EXTRASPACE (sizeof(void *)) + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@@ of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +** CHANGE it if it uses too much C-stack space. (For long double, +** 'string.format("%.99f", 1e4932)' needs ~5030 bytes, so a +** smaller buffer would force a memory allocation for each call to +** 'string.format'.) +*/ +#if defined(LUA_FLOAT_LONGDOUBLE) +#define LUAL_BUFFERSIZE 8192 +#else +#define LUAL_BUFFERSIZE ((int)(0x80 * sizeof(void*) * sizeof(lua_Integer))) +#endif + +/* }================================================================== */ + + +/* +@@ LUA_QL describes how error messages quote program elements. +** Lua does not use these macros anymore; they are here for +** compatibility only. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + + + +#endif + diff --git a/src/external/lua/include/lualib.h b/src/external/lua/include/lualib.h new file mode 100644 index 000000000..5165c0fb3 --- /dev/null +++ b/src/external/lua/include/lualib.h @@ -0,0 +1,58 @@ +/* +** $Id: lualib.h,v 1.44 2014/02/06 17:32:33 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + + +LUAMOD_API int (luaopen_base) (lua_State *L); + +#define LUA_COLIBNAME "coroutine" +LUAMOD_API int (luaopen_coroutine) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUAMOD_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUAMOD_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUAMOD_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUAMOD_API int (luaopen_string) (lua_State *L); + +#define LUA_UTF8LIBNAME "utf8" +LUAMOD_API int (luaopen_utf8) (lua_State *L); + +#define LUA_BITLIBNAME "bit32" +LUAMOD_API int (luaopen_bit32) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUAMOD_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUAMOD_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUAMOD_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#if !defined(lua_assert) +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/src/external/lua/lib/liblua53.a b/src/external/lua/lib/liblua53.a new file mode 100644 index 0000000000000000000000000000000000000000..e51c0c805537bb7611ee9a5066d73c59a5670450 GIT binary patch literal 322424 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