From 656842ceebc68b597944f70316504e2ea1533a2c Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 28 Sep 2006 23:32:13 +0000 Subject: [PATCH] remove lua 5.0 --- stepmania/src/lua-5.0/COPYRIGHT | 34 - stepmania/src/lua-5.0/Lua.dsw | 41 - stepmania/src/lua-5.0/LuaXbox.sln | 29 - stepmania/src/lua-5.0/include/lauxlib.h | 145 -- stepmania/src/lua-5.0/include/lua.h | 391 ----- stepmania/src/lua-5.0/include/lualib.h | 56 - stepmania/src/lua-5.0/lib/LibLua.lib | Bin 216244 -> 0 bytes stepmania/src/lua-5.0/lib/LibLuaLib.lib | Bin 171830 -> 0 bytes stepmania/src/lua-5.0/src/LibLua-2003.vcproj | 321 ---- stepmania/src/lua-5.0/src/LibLua.dsp | 249 --- stepmania/src/lua-5.0/src/LibLua.vcproj | 321 ---- stepmania/src/lua-5.0/src/lapi.c | 922 ------------ stepmania/src/lua-5.0/src/lapi.h | 16 - stepmania/src/lua-5.0/src/lcode.c | 714 --------- stepmania/src/lua-5.0/src/lcode.h | 74 - stepmania/src/lua-5.0/src/ldebug.c | 585 -------- stepmania/src/lua-5.0/src/ldebug.h | 31 - stepmania/src/lua-5.0/src/ldo.c | 471 ------ stepmania/src/lua-5.0/src/ldo.h | 60 - stepmania/src/lua-5.0/src/ldump.c | 170 --- stepmania/src/lua-5.0/src/lfunc.c | 135 -- stepmania/src/lua-5.0/src/lfunc.h | 25 - stepmania/src/lua-5.0/src/lgc.c | 498 ------ stepmania/src/lua-5.0/src/lgc.h | 25 - .../src/lua-5.0/src/lib/LibLuaLib-2003.vcproj | 254 ---- stepmania/src/lua-5.0/src/lib/LibLuaLib.dsp | 127 -- .../src/lua-5.0/src/lib/LibLuaLib.vcproj | 254 ---- stepmania/src/lua-5.0/src/lib/lauxlib.c | 591 -------- stepmania/src/lua-5.0/src/lib/lbaselib.c | 677 --------- stepmania/src/lua-5.0/src/lib/ldblib.c | 299 ---- stepmania/src/lua-5.0/src/lib/liolib.c | 750 ---------- stepmania/src/lua-5.0/src/lib/lmathlib.c | 246 --- stepmania/src/lua-5.0/src/lib/loadlib.c | 209 --- stepmania/src/lua-5.0/src/lib/lstrlib.c | 770 ---------- stepmania/src/lua-5.0/src/lib/ltablib.c | 250 ---- stepmania/src/lua-5.0/src/llex.c | 417 ------ stepmania/src/lua-5.0/src/llex.h | 75 - stepmania/src/lua-5.0/src/llimits.h | 185 --- stepmania/src/lua-5.0/src/lmem.c | 91 -- stepmania/src/lua-5.0/src/lmem.h | 44 - stepmania/src/lua-5.0/src/lobject.c | 195 --- stepmania/src/lua-5.0/src/lobject.h | 336 ----- stepmania/src/lua-5.0/src/lopcodes.c | 102 -- stepmania/src/lua-5.0/src/lopcodes.h | 238 --- stepmania/src/lua-5.0/src/lparser.c | 1333 ----------------- stepmania/src/lua-5.0/src/lparser.h | 71 - stepmania/src/lua-5.0/src/lstate.c | 220 --- stepmania/src/lua-5.0/src/lstate.h | 195 --- stepmania/src/lua-5.0/src/lstring.c | 102 -- stepmania/src/lua-5.0/src/lstring.h | 33 - stepmania/src/lua-5.0/src/ltable.c | 509 ------- stepmania/src/lua-5.0/src/ltable.h | 31 - stepmania/src/lua-5.0/src/ltests.c | 852 ----------- stepmania/src/lua-5.0/src/ltm.c | 70 - stepmania/src/lua-5.0/src/ltm.h | 51 - stepmania/src/lua-5.0/src/lundump.c | 286 ---- stepmania/src/lua-5.0/src/lundump.h | 34 - stepmania/src/lua-5.0/src/lvm.c | 781 ---------- stepmania/src/lua-5.0/src/lvm.h | 35 - stepmania/src/lua-5.0/src/lzio.c | 81 - stepmania/src/lua-5.0/src/lzio.h | 64 - 61 files changed, 16171 deletions(-) delete mode 100644 stepmania/src/lua-5.0/COPYRIGHT delete mode 100644 stepmania/src/lua-5.0/Lua.dsw delete mode 100644 stepmania/src/lua-5.0/LuaXbox.sln delete mode 100644 stepmania/src/lua-5.0/include/lauxlib.h delete mode 100644 stepmania/src/lua-5.0/include/lua.h delete mode 100644 stepmania/src/lua-5.0/include/lualib.h delete mode 100644 stepmania/src/lua-5.0/lib/LibLua.lib delete mode 100644 stepmania/src/lua-5.0/lib/LibLuaLib.lib delete mode 100644 stepmania/src/lua-5.0/src/LibLua-2003.vcproj delete mode 100644 stepmania/src/lua-5.0/src/LibLua.dsp delete mode 100644 stepmania/src/lua-5.0/src/LibLua.vcproj delete mode 100644 stepmania/src/lua-5.0/src/lapi.c delete mode 100644 stepmania/src/lua-5.0/src/lapi.h delete mode 100644 stepmania/src/lua-5.0/src/lcode.c delete mode 100644 stepmania/src/lua-5.0/src/lcode.h delete mode 100644 stepmania/src/lua-5.0/src/ldebug.c delete mode 100644 stepmania/src/lua-5.0/src/ldebug.h delete mode 100644 stepmania/src/lua-5.0/src/ldo.c delete mode 100644 stepmania/src/lua-5.0/src/ldo.h delete mode 100644 stepmania/src/lua-5.0/src/ldump.c delete mode 100644 stepmania/src/lua-5.0/src/lfunc.c delete mode 100644 stepmania/src/lua-5.0/src/lfunc.h delete mode 100644 stepmania/src/lua-5.0/src/lgc.c delete mode 100644 stepmania/src/lua-5.0/src/lgc.h delete mode 100644 stepmania/src/lua-5.0/src/lib/LibLuaLib-2003.vcproj delete mode 100644 stepmania/src/lua-5.0/src/lib/LibLuaLib.dsp delete mode 100644 stepmania/src/lua-5.0/src/lib/LibLuaLib.vcproj delete mode 100644 stepmania/src/lua-5.0/src/lib/lauxlib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/lbaselib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/ldblib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/liolib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/lmathlib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/loadlib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/lstrlib.c delete mode 100644 stepmania/src/lua-5.0/src/lib/ltablib.c delete mode 100644 stepmania/src/lua-5.0/src/llex.c delete mode 100644 stepmania/src/lua-5.0/src/llex.h delete mode 100644 stepmania/src/lua-5.0/src/llimits.h delete mode 100644 stepmania/src/lua-5.0/src/lmem.c delete mode 100644 stepmania/src/lua-5.0/src/lmem.h delete mode 100644 stepmania/src/lua-5.0/src/lobject.c delete mode 100644 stepmania/src/lua-5.0/src/lobject.h delete mode 100644 stepmania/src/lua-5.0/src/lopcodes.c delete mode 100644 stepmania/src/lua-5.0/src/lopcodes.h delete mode 100644 stepmania/src/lua-5.0/src/lparser.c delete mode 100644 stepmania/src/lua-5.0/src/lparser.h delete mode 100644 stepmania/src/lua-5.0/src/lstate.c delete mode 100644 stepmania/src/lua-5.0/src/lstate.h delete mode 100644 stepmania/src/lua-5.0/src/lstring.c delete mode 100644 stepmania/src/lua-5.0/src/lstring.h delete mode 100644 stepmania/src/lua-5.0/src/ltable.c delete mode 100644 stepmania/src/lua-5.0/src/ltable.h delete mode 100644 stepmania/src/lua-5.0/src/ltests.c delete mode 100644 stepmania/src/lua-5.0/src/ltm.c delete mode 100644 stepmania/src/lua-5.0/src/ltm.h delete mode 100644 stepmania/src/lua-5.0/src/lundump.c delete mode 100644 stepmania/src/lua-5.0/src/lundump.h delete mode 100644 stepmania/src/lua-5.0/src/lvm.c delete mode 100644 stepmania/src/lua-5.0/src/lvm.h delete mode 100644 stepmania/src/lua-5.0/src/lzio.c delete mode 100644 stepmania/src/lua-5.0/src/lzio.h diff --git a/stepmania/src/lua-5.0/COPYRIGHT b/stepmania/src/lua-5.0/COPYRIGHT deleted file mode 100644 index 16321abf6b..0000000000 --- a/stepmania/src/lua-5.0/COPYRIGHT +++ /dev/null @@ -1,34 +0,0 @@ -Lua License ------------ - -Lua is licensed under the terms of the MIT license reproduced below. -This means that Lua is free software and can be used for both academic -and commercial purposes at absolutely no cost. - -For details and rationale, see http://www.lua.org/license.html . - -=============================================================================== - -Copyright (C) 2003-2004 Tecgraf, 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. - -=============================================================================== - -(end of COPYRIGHT) diff --git a/stepmania/src/lua-5.0/Lua.dsw b/stepmania/src/lua-5.0/Lua.dsw deleted file mode 100644 index 7370515299..0000000000 --- a/stepmania/src/lua-5.0/Lua.dsw +++ /dev/null @@ -1,41 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "LibLua"=".\src\LibLua.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "LibLuaLib"=".\src\lib\LibLuaLib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/stepmania/src/lua-5.0/LuaXbox.sln b/stepmania/src/lua-5.0/LuaXbox.sln deleted file mode 100644 index 15fb8f3734..0000000000 --- a/stepmania/src/lua-5.0/LuaXbox.sln +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibLua", "src\LibLua.vcproj", "{A893088C-3E2D-43A7-B106-BBBC9DF6D0EF}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibLuaLib", "src\lib\LibLuaLib.vcproj", "{DD432F26-496E-451C-93E2-2CE19A748AF8}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A893088C-3E2D-43A7-B106-BBBC9DF6D0EF}.Debug.ActiveCfg = DebugXbox|Xbox - {A893088C-3E2D-43A7-B106-BBBC9DF6D0EF}.Debug.Build.0 = DebugXbox|Xbox - {A893088C-3E2D-43A7-B106-BBBC9DF6D0EF}.Release.ActiveCfg = Release|Xbox - {A893088C-3E2D-43A7-B106-BBBC9DF6D0EF}.Release.Build.0 = Release|Xbox - {DD432F26-496E-451C-93E2-2CE19A748AF8}.Debug.ActiveCfg = DebugXbox|Xbox - {DD432F26-496E-451C-93E2-2CE19A748AF8}.Debug.Build.0 = DebugXbox|Xbox - {DD432F26-496E-451C-93E2-2CE19A748AF8}.Release.ActiveCfg = Release|Xbox - {DD432F26-496E-451C-93E2-2CE19A748AF8}.Release.Build.0 = Release|Xbox - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/stepmania/src/lua-5.0/include/lauxlib.h b/stepmania/src/lua-5.0/include/lauxlib.h deleted file mode 100644 index ce9b0bceab..0000000000 --- a/stepmania/src/lua-5.0/include/lauxlib.h +++ /dev/null @@ -1,145 +0,0 @@ -/* -** $Id$ -** Auxiliary functions for building Lua libraries -** See Copyright Notice in lua.h -*/ - - -#ifndef lauxlib_h -#define lauxlib_h - - -#include -#include - -#include "lua.h" - - -#ifndef LUALIB_API -#define LUALIB_API LUA_API -#endif - - - -typedef struct luaL_reg { - const char *name; - lua_CFunction func; -} luaL_reg; - - -LUALIB_API void luaL_openlib (lua_State *L, const char *libname, - const luaL_reg *l, int nup); -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 int luaL_typerror (lua_State *L, int narg, const char *tname); -LUALIB_API int luaL_argerror (lua_State *L, int numarg, const char *extramsg); -LUALIB_API const char *luaL_checklstring (lua_State *L, int numArg, size_t *l); -LUALIB_API const char *luaL_optlstring (lua_State *L, int numArg, - const char *def, size_t *l); -LUALIB_API lua_Number luaL_checknumber (lua_State *L, int numArg); -LUALIB_API lua_Number luaL_optnumber (lua_State *L, int nArg, lua_Number def); - -LUALIB_API void luaL_checkstack (lua_State *L, int sz, const char *msg); -LUALIB_API void luaL_checktype (lua_State *L, int narg, int t); -LUALIB_API void luaL_checkany (lua_State *L, int narg); - -LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname); -LUALIB_API void luaL_getmetatable (lua_State *L, 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_findstring (const char *st, const char *const lst[]); - -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_getn (lua_State *L, int t); -LUALIB_API void luaL_setn (lua_State *L, int t, int n); - -LUALIB_API int luaL_loadfile (lua_State *L, const char *filename); -LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t sz, - const char *name); - - - -/* -** =============================================================== -** some useful macros -** =============================================================== -*/ - -#define luaL_argcheck(L, cond,numarg,extramsg) if (!(cond)) \ - luaL_argerror(L, numarg,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_checkint(L,n) ((int)luaL_checknumber(L, n)) -#define luaL_checklong(L,n) ((long)luaL_checknumber(L, n)) -#define luaL_optint(L,n,d) ((int)luaL_optnumber(L, n,(lua_Number)(d))) -#define luaL_optlong(L,n,d) ((long)luaL_optnumber(L, n,(lua_Number)(d))) - - -/* -** {====================================================== -** Generic Buffer manipulation -** ======================================================= -*/ - - -#ifndef LUAL_BUFFERSIZE -#define LUAL_BUFFERSIZE BUFSIZ -#endif - - -typedef struct luaL_Buffer { - char *p; /* current position in buffer */ - int lvl; /* number of strings in the stack (level) */ - lua_State *L; - char buffer[LUAL_BUFFERSIZE]; -} luaL_Buffer; - -#define luaL_putchar(B,c) \ - ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ - (*(B)->p++ = (char)(c))) - -#define luaL_addsize(B,n) ((B)->p += (n)) - -LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B); -LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B); -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); - - -/* }====================================================== */ - - - -/* -** Compatibility macros and functions -*/ - -LUALIB_API int lua_dofile (lua_State *L, const char *filename); -LUALIB_API int lua_dostring (lua_State *L, const char *str); -LUALIB_API int lua_dobuffer (lua_State *L, const char *buff, size_t sz, - const char *n); - - -#define luaL_check_lstr luaL_checklstring -#define luaL_opt_lstr luaL_optlstring -#define luaL_check_number luaL_checknumber -#define luaL_opt_number luaL_optnumber -#define luaL_arg_check luaL_argcheck -#define luaL_check_string luaL_checkstring -#define luaL_opt_string luaL_optstring -#define luaL_check_int luaL_checkint -#define luaL_check_long luaL_checklong -#define luaL_opt_int luaL_optint -#define luaL_opt_long luaL_optlong - - -#endif - - diff --git a/stepmania/src/lua-5.0/include/lua.h b/stepmania/src/lua-5.0/include/lua.h deleted file mode 100644 index 449efeb2f0..0000000000 --- a/stepmania/src/lua-5.0/include/lua.h +++ /dev/null @@ -1,391 +0,0 @@ -/* -** $Id$ -** Lua - An Extensible Extension Language -** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil -** http://www.lua.org mailto:info@lua.org -** See Copyright Notice at the end of this file -*/ - - -#ifndef lua_h -#define lua_h - -#include -#include - - -#define LUA_VERSION "Lua 5.0.2" -#define LUA_COPYRIGHT "Copyright (C) 1994-2004 Tecgraf, PUC-Rio" -#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" - - - -/* option for multiple returns in `lua_pcall' and `lua_call' */ -#define LUA_MULTRET (-1) - - -/* -** pseudo-indices -*/ -#define LUA_REGISTRYINDEX (-10000) -#define LUA_GLOBALSINDEX (-10001) -#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) - - -/* error codes for `lua_load' and `lua_pcall' */ -#define LUA_ERRRUN 1 -#define LUA_ERRFILE 2 -#define LUA_ERRSYNTAX 3 -#define LUA_ERRMEM 4 -#define LUA_ERRERR 5 - - -typedef struct lua_State lua_State; - -typedef int (*lua_CFunction) (lua_State *L); - - -/* -** functions that read/write blocks when loading/dumping Lua chunks -*/ -typedef const char * (*lua_Chunkreader) (lua_State *L, void *ud, size_t *sz); - -typedef int (*lua_Chunkwriter) (lua_State *L, const void* p, - size_t sz, void* ud); - - -/* -** 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 - - -/* minimum Lua stack available to a C function */ -#define LUA_MINSTACK 20 - - -/* -** generic extra include file -*/ -#ifdef LUA_USER_H -#include LUA_USER_H -#endif - - -/* type of numbers in Lua */ -#ifndef LUA_NUMBER -typedef double lua_Number; -#else -typedef LUA_NUMBER lua_Number; -#endif - - -/* mark for all API functions */ -#ifndef LUA_API -#define LUA_API extern -#endif - - -/* -** state manipulation -*/ -LUA_API lua_State *lua_open (void); -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); - - -/* -** basic stack manipulation -*/ -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_remove (lua_State *L, int idx); -LUA_API void lua_insert (lua_State *L, int idx); -LUA_API void lua_replace (lua_State *L, int idx); -LUA_API int lua_checkstack (lua_State *L, int sz); - -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_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 int lua_equal (lua_State *L, int idx1, int idx2); -LUA_API int lua_rawequal (lua_State *L, int idx1, int idx2); -LUA_API int lua_lessthan (lua_State *L, int idx1, int idx2); - -LUA_API lua_Number lua_tonumber (lua_State *L, int idx); -LUA_API int lua_toboolean (lua_State *L, int idx); -LUA_API const char *lua_tostring (lua_State *L, int idx); -LUA_API size_t lua_strlen (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); - - -/* -** 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_pushlstring (lua_State *L, const char *s, size_t l); -LUA_API void 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); - - -/* -** get functions (Lua -> stack) -*/ -LUA_API void lua_gettable (lua_State *L, int idx); -LUA_API void lua_rawget (lua_State *L, int idx); -LUA_API void lua_rawgeti (lua_State *L, int idx, int n); -LUA_API void lua_newtable (lua_State *L); -LUA_API void *lua_newuserdata (lua_State *L, size_t sz); -LUA_API int lua_getmetatable (lua_State *L, int objindex); -LUA_API void lua_getfenv (lua_State *L, int idx); - - -/* -** set functions (stack -> Lua) -*/ -LUA_API void lua_settable (lua_State *L, int idx); -LUA_API void lua_rawset (lua_State *L, int idx); -LUA_API void lua_rawseti (lua_State *L, int idx, int n); -LUA_API int lua_setmetatable (lua_State *L, int objindex); -LUA_API int lua_setfenv (lua_State *L, int idx); - - -/* -** `load' and `call' functions (load and run Lua code) -*/ -LUA_API void lua_call (lua_State *L, int nargs, int nresults); -LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc); -LUA_API int lua_cpcall (lua_State *L, lua_CFunction func, void *ud); -LUA_API int lua_load (lua_State *L, lua_Chunkreader reader, void *dt, - const char *chunkname); - -LUA_API int lua_dump (lua_State *L, lua_Chunkwriter writer, void *data); - - -/* -** coroutine functions -*/ -LUA_API int lua_yield (lua_State *L, int nresults); -LUA_API int lua_resume (lua_State *L, int narg); - -/* -** garbage-collection functions -*/ -LUA_API int lua_getgcthreshold (lua_State *L); -LUA_API int lua_getgccount (lua_State *L); -LUA_API void lua_setgcthreshold (lua_State *L, int newthreshold); - -/* -** miscellaneous functions -*/ - -LUA_API const char *lua_version (void); - -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); - - - -/* -** =============================================================== -** some useful macros -** =============================================================== -*/ - -#define lua_boxpointer(L,u) \ - (*(void **)(lua_newuserdata(L, sizeof(void *))) = (u)) - -#define lua_unboxpointer(L,i) (*(void **)(lua_touserdata(L, i))) - -#define lua_pop(L,n) lua_settop(L, -(n)-1) - -#define lua_register(L,n,f) \ - (lua_pushstring(L, n), \ - lua_pushcfunction(L, f), \ - lua_settable(L, LUA_GLOBALSINDEX)) - -#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_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_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) - - - -/* -** compatibility macros and functions -*/ - - -LUA_API int lua_pushupvalues (lua_State *L); - -#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) -#define lua_setglobal(L,s) \ - (lua_pushstring(L, s), lua_insert(L, -2), lua_settable(L, LUA_GLOBALSINDEX)) - -#define lua_getglobal(L,s) \ - (lua_pushstring(L, s), lua_gettable(L, LUA_GLOBALSINDEX)) - - -/* compatibility with ref system */ - -/* pre-defined references */ -#define LUA_NOREF (-2) -#define LUA_REFNIL (-1) - -#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ - (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) - -#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) - -#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, ref) - - - -/* -** {====================================================================== -** useful definitions for Lua kernel and libraries -** ======================================================================= -*/ - -/* formats for Lua numbers */ -#ifndef LUA_NUMBER_SCAN -#define LUA_NUMBER_SCAN "%lf" -#endif - -#ifndef LUA_NUMBER_FMT -#define LUA_NUMBER_FMT "%.14g" -#endif - -/* }====================================================================== */ - - -/* -** {====================================================================== -** Debug API -** ======================================================================= -*/ - - -/* -** Event codes -*/ -#define LUA_HOOKCALL 0 -#define LUA_HOOKRET 1 -#define LUA_HOOKLINE 2 -#define LUA_HOOKCOUNT 3 -#define LUA_HOOKTAILRET 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 */ - -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 int 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); - - -#define LUA_IDSIZE 60 - -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 nups; /* (u) number of upvalues */ - int linedefined; /* (S) */ - char short_src[LUA_IDSIZE]; /* (S) */ - /* private part */ - int i_ci; /* active function */ -}; - -/* }====================================================================== */ - - -/****************************************************************************** -* Copyright (C) 1994-2004 Tecgraf, PUC-Rio. All rights reserved. -* -* 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/stepmania/src/lua-5.0/include/lualib.h b/stepmania/src/lua-5.0/include/lualib.h deleted file mode 100644 index 8a82d58fa7..0000000000 --- a/stepmania/src/lua-5.0/include/lualib.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -** $Id$ -** Lua standard libraries -** See Copyright Notice in lua.h -*/ - - -#ifndef lualib_h -#define lualib_h - -#include "lua.h" - - -#ifndef LUALIB_API -#define LUALIB_API LUA_API -#endif - - -#define LUA_COLIBNAME "coroutine" -LUALIB_API int luaopen_base (lua_State *L); - -#define LUA_TABLIBNAME "table" -LUALIB_API int luaopen_table (lua_State *L); - -#define LUA_IOLIBNAME "io" -#define LUA_OSLIBNAME "os" -LUALIB_API int luaopen_io (lua_State *L); - -#define LUA_STRLIBNAME "string" -LUALIB_API int luaopen_string (lua_State *L); - -#define LUA_MATHLIBNAME "math" -LUALIB_API int luaopen_math (lua_State *L); - -#define LUA_DBLIBNAME "debug" -LUALIB_API int luaopen_debug (lua_State *L); - - -LUALIB_API int luaopen_loadlib (lua_State *L); - - -/* to help testing the libraries */ -#ifndef lua_assert -#define lua_assert(c) /* empty */ -#endif - - -/* compatibility code */ -#define lua_baselibopen luaopen_base -#define lua_tablibopen luaopen_table -#define lua_iolibopen luaopen_io -#define lua_strlibopen luaopen_string -#define lua_mathlibopen luaopen_math -#define lua_dblibopen luaopen_debug - -#endif diff --git a/stepmania/src/lua-5.0/lib/LibLua.lib b/stepmania/src/lua-5.0/lib/LibLua.lib deleted file mode 100644 index 433a2fa1a3c2a59a5ad9ab498b758669d0a7ae35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216244 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 MTpYIj#XA5006ul8;{X5v diff --git a/stepmania/src/lua-5.0/lib/LibLuaLib.lib b/stepmania/src/lua-5.0/lib/LibLuaLib.lib deleted file mode 100644 index e954c6adb83fa3f031ffe14b4461cd9f5ce0412e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171830 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 SHyz>%Ue;=-kKP%T_J0A9rW8Q{ diff --git a/stepmania/src/lua-5.0/src/LibLua-2003.vcproj b/stepmania/src/lua-5.0/src/LibLua-2003.vcproj deleted file mode 100644 index 5763725ada..0000000000 --- a/stepmania/src/lua-5.0/src/LibLua-2003.vcproj +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stepmania/src/lua-5.0/src/LibLua.dsp b/stepmania/src/lua-5.0/src/LibLua.dsp deleted file mode 100644 index 6ce2b182d5..0000000000 --- a/stepmania/src/lua-5.0/src/LibLua.dsp +++ /dev/null @@ -1,249 +0,0 @@ -# Microsoft Developer Studio Project File - Name="LibLua" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=LibLua - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "LibLua.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "LibLua.mak" CFG="LibLua - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "LibLua - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "LibLua - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "LibLua - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\obj" -# PROP Intermediate_Dir "..\obj" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MD /W4 /GX /O2 /I "..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x40c /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\lib\LibLua.lib" - -!ELSEIF "$(CFG)" == "LibLua - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\dobj" -# PROP Intermediate_Dir "..\dobj" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MD /W4 /Gm /GX /Zi /Od /I "..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /c -# ADD BASE RSC /l 0x40c /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\lib\LibLua.lib" - -!ENDIF - -# Begin Target - -# Name "LibLua - Win32 Release" -# Name "LibLua - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c" -# Begin Source File - -SOURCE=.\lapi.c -# End Source File -# Begin Source File - -SOURCE=.\lcode.c -# End Source File -# Begin Source File - -SOURCE=.\ldebug.c -# End Source File -# Begin Source File - -SOURCE=.\ldo.c -# End Source File -# Begin Source File - -SOURCE=.\ldump.c -# End Source File -# Begin Source File - -SOURCE=.\lfunc.c -# End Source File -# Begin Source File - -SOURCE=.\lgc.c -# End Source File -# Begin Source File - -SOURCE=.\llex.c -# End Source File -# Begin Source File - -SOURCE=.\lmem.c -# End Source File -# Begin Source File - -SOURCE=.\lobject.c -# End Source File -# Begin Source File - -SOURCE=.\lopcodes.c -# End Source File -# Begin Source File - -SOURCE=.\lparser.c -# End Source File -# Begin Source File - -SOURCE=.\lstate.c -# End Source File -# Begin Source File - -SOURCE=.\lstring.c -# End Source File -# Begin Source File - -SOURCE=.\ltable.c -# End Source File -# Begin Source File - -SOURCE=.\ltests.c -# End Source File -# Begin Source File - -SOURCE=.\ltm.c -# End Source File -# Begin Source File - -SOURCE=.\lundump.c -# End Source File -# Begin Source File - -SOURCE=.\lvm.c -# End Source File -# Begin Source File - -SOURCE=.\lzio.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h" -# Begin Source File - -SOURCE=.\lapi.h -# End Source File -# Begin Source File - -SOURCE=.\lcode.h -# End Source File -# Begin Source File - -SOURCE=.\ldebug.h -# End Source File -# Begin Source File - -SOURCE=.\ldo.h -# End Source File -# Begin Source File - -SOURCE=.\lfunc.h -# End Source File -# Begin Source File - -SOURCE=.\lgc.h -# End Source File -# Begin Source File - -SOURCE=.\llex.h -# End Source File -# Begin Source File - -SOURCE=.\llimits.h -# End Source File -# Begin Source File - -SOURCE=.\lmem.h -# End Source File -# Begin Source File - -SOURCE=.\lobject.h -# End Source File -# Begin Source File - -SOURCE=.\lopcodes.h -# End Source File -# Begin Source File - -SOURCE=.\lparser.h -# End Source File -# Begin Source File - -SOURCE=.\lstate.h -# End Source File -# Begin Source File - -SOURCE=.\lstring.h -# End Source File -# Begin Source File - -SOURCE=.\ltable.h -# End Source File -# Begin Source File - -SOURCE=.\ltm.h -# End Source File -# Begin Source File - -SOURCE=.\lundump.h -# End Source File -# Begin Source File - -SOURCE=.\lvm.h -# End Source File -# Begin Source File - -SOURCE=.\lzio.h -# End Source File -# End Group -# End Target -# End Project diff --git a/stepmania/src/lua-5.0/src/LibLua.vcproj b/stepmania/src/lua-5.0/src/LibLua.vcproj deleted file mode 100644 index 5763725ada..0000000000 --- a/stepmania/src/lua-5.0/src/LibLua.vcproj +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stepmania/src/lua-5.0/src/lapi.c b/stepmania/src/lua-5.0/src/lapi.c deleted file mode 100644 index 71d3ba6305..0000000000 --- a/stepmania/src/lua-5.0/src/lapi.c +++ /dev/null @@ -1,922 +0,0 @@ -/* -** $Id$ -** Lua API -** See Copyright Notice in lua.h -*/ - - -#include -#include - -#define lapi_c - -#include "lua.h" - -#include "lapi.h" -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lgc.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" -#include "lundump.h" -#include "lvm.h" - - -const char lua_ident[] = - "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n" - "$Authors: " LUA_AUTHORS " $\n" - "$URL: www.lua.org $\n"; - - - -#ifndef api_check -#define api_check(L, o) /*{ assert(o); }*/ -#endif - -#define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->base)) - -#define api_incr_top(L) {api_check(L, L->top < L->ci->top); L->top++;} - - - - -static TObject *negindex (lua_State *L, int idx) { - if (idx > LUA_REGISTRYINDEX) { - api_check(L, idx != 0 && -idx <= L->top - L->base); - return L->top+idx; - } - else switch (idx) { /* pseudo-indices */ - case LUA_REGISTRYINDEX: return registry(L); - case LUA_GLOBALSINDEX: return gt(L); - default: { - TObject *func = (L->base - 1); - idx = LUA_GLOBALSINDEX - idx; - lua_assert(iscfunction(func)); - return (idx <= clvalue(func)->c.nupvalues) - ? &clvalue(func)->c.upvalue[idx-1] - : NULL; - } - } -} - - -static TObject *luaA_index (lua_State *L, int idx) { - if (idx > 0) { - api_check(L, idx <= L->top - L->base); - return L->base + idx - 1; - } - else { - TObject *o = negindex(L, idx); - api_check(L, o != NULL); - return o; - } -} - - -static TObject *luaA_indexAcceptable (lua_State *L, int idx) { - if (idx > 0) { - TObject *o = L->base+(idx-1); - api_check(L, idx <= L->stack_last - L->base); - if (o >= L->top) return NULL; - else return o; - } - else - return negindex(L, idx); -} - - -void luaA_pushobject (lua_State *L, const TObject *o) { - setobj2s(L->top, o); - incr_top(L); -} - - -LUA_API int lua_checkstack (lua_State *L, int size) { - int res; - lua_lock(L); - if ((L->top - L->base + size) > LUA_MAXCSTACK) - res = 0; /* stack overflow */ - else { - luaD_checkstack(L, size); - if (L->ci->top < L->top + size) - L->ci->top = L->top + size; - res = 1; - } - lua_unlock(L); - return res; -} - - -LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { - int i; - lua_lock(to); - api_checknelems(from, n); - from->top -= n; - for (i = 0; i < n; i++) { - setobj2s(to->top, from->top + i); - api_incr_top(to); - } - lua_unlock(to); -} - - -LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { - lua_CFunction old; - lua_lock(L); - old = G(L)->panic; - G(L)->panic = panicf; - lua_unlock(L); - return old; -} - - -LUA_API lua_State *lua_newthread (lua_State *L) { - lua_State *L1; - lua_lock(L); - luaC_checkGC(L); - L1 = luaE_newthread(L); - setthvalue(L->top, L1); - api_incr_top(L); - lua_unlock(L); - lua_userstateopen(L1); - return L1; -} - - - -/* -** basic stack manipulation -*/ - - -LUA_API int lua_gettop (lua_State *L) { - return (L->top - L->base); -} - - -LUA_API void lua_settop (lua_State *L, int idx) { - lua_lock(L); - if (idx >= 0) { - api_check(L, idx <= L->stack_last - L->base); - while (L->top < L->base + idx) - setnilvalue(L->top++); - L->top = L->base + idx; - } - else { - api_check(L, -(idx+1) <= (L->top - L->base)); - L->top += idx+1; /* `subtract' index (index is negative) */ - } - lua_unlock(L); -} - - -LUA_API void lua_remove (lua_State *L, int idx) { - StkId p; - lua_lock(L); - p = luaA_index(L, idx); - while (++p < L->top) setobjs2s(p-1, p); - L->top--; - lua_unlock(L); -} - - -LUA_API void lua_insert (lua_State *L, int idx) { - StkId p; - StkId q; - lua_lock(L); - p = luaA_index(L, idx); - for (q = L->top; q>p; q--) setobjs2s(q, q-1); - setobjs2s(p, L->top); - lua_unlock(L); -} - - -LUA_API void lua_replace (lua_State *L, int idx) { - lua_lock(L); - api_checknelems(L, 1); - setobj(luaA_index(L, idx), L->top - 1); /* write barrier */ - L->top--; - lua_unlock(L); -} - - -LUA_API void lua_pushvalue (lua_State *L, int idx) { - lua_lock(L); - setobj2s(L->top, luaA_index(L, idx)); - api_incr_top(L); - lua_unlock(L); -} - - - -/* -** access functions (stack -> C) -*/ - - -LUA_API int lua_type (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - return (o == NULL) ? LUA_TNONE : ttype(o); -} - - -LUA_API const char *lua_typename (lua_State *L, int t) { - UNUSED(L); - return (t == LUA_TNONE) ? "no value" : luaT_typenames[t]; -} - - -LUA_API int lua_iscfunction (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - return (o == NULL) ? 0 : iscfunction(o); -} - - -LUA_API int lua_isnumber (lua_State *L, int idx) { - TObject n; - const TObject *o = luaA_indexAcceptable(L, idx); - return (o != NULL && tonumber(o, &n)); -} - - -LUA_API int lua_isstring (lua_State *L, int idx) { - int t = lua_type(L, idx); - return (t == LUA_TSTRING || t == LUA_TNUMBER); -} - - -LUA_API int lua_isuserdata (lua_State *L, int idx) { - const TObject *o = luaA_indexAcceptable(L, idx); - return (o != NULL && (ttisuserdata(o) || ttislightuserdata(o))); -} - - -LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { - StkId o1 = luaA_indexAcceptable(L, index1); - StkId o2 = luaA_indexAcceptable(L, index2); - return (o1 == NULL || o2 == NULL) ? 0 /* index out of range */ - : luaO_rawequalObj(o1, o2); -} - - -LUA_API int lua_equal (lua_State *L, int index1, int index2) { - StkId o1, o2; - int i; - lua_lock(L); /* may call tag method */ - o1 = luaA_indexAcceptable(L, index1); - o2 = luaA_indexAcceptable(L, index2); - i = (o1 == NULL || o2 == NULL) ? 0 /* index out of range */ - : equalobj(L, o1, o2); - lua_unlock(L); - return i; -} - - -LUA_API int lua_lessthan (lua_State *L, int index1, int index2) { - StkId o1, o2; - int i; - lua_lock(L); /* may call tag method */ - o1 = luaA_indexAcceptable(L, index1); - o2 = luaA_indexAcceptable(L, index2); - i = (o1 == NULL || o2 == NULL) ? 0 /* index out-of-range */ - : luaV_lessthan(L, o1, o2); - lua_unlock(L); - return i; -} - - - -LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { - TObject n; - const TObject *o = luaA_indexAcceptable(L, idx); - if (o != NULL && tonumber(o, &n)) - return nvalue(o); - else - return 0; -} - - -LUA_API int lua_toboolean (lua_State *L, int idx) { - const TObject *o = luaA_indexAcceptable(L, idx); - return (o != NULL) && !l_isfalse(o); -} - - -LUA_API const char *lua_tostring (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - if (o == NULL) - return NULL; - else if (ttisstring(o)) - return svalue(o); - else { - const char *s; - lua_lock(L); /* `luaV_tostring' may create a new string */ - s = (luaV_tostring(L, o) ? svalue(o) : NULL); - luaC_checkGC(L); - lua_unlock(L); - return s; - } -} - - -LUA_API size_t lua_strlen (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - if (o == NULL) - return 0; - else if (ttisstring(o)) - return tsvalue(o)->tsv.len; - else { - size_t l; - lua_lock(L); /* `luaV_tostring' may create a new string */ - l = (luaV_tostring(L, o) ? tsvalue(o)->tsv.len : 0); - lua_unlock(L); - return l; - } -} - - -LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - return (o == NULL || !iscfunction(o)) ? NULL : clvalue(o)->c.f; -} - - -LUA_API void *lua_touserdata (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - if (o == NULL) return NULL; - switch (ttype(o)) { - case LUA_TUSERDATA: return (uvalue(o) + 1); - case LUA_TLIGHTUSERDATA: return pvalue(o); - default: return NULL; - } -} - - -LUA_API lua_State *lua_tothread (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - return (o == NULL || !ttisthread(o)) ? NULL : thvalue(o); -} - - -LUA_API const void *lua_topointer (lua_State *L, int idx) { - StkId o = luaA_indexAcceptable(L, idx); - if (o == NULL) return NULL; - else { - switch (ttype(o)) { - case LUA_TTABLE: return hvalue(o); - case LUA_TFUNCTION: return clvalue(o); - case LUA_TTHREAD: return thvalue(o); - case LUA_TUSERDATA: - case LUA_TLIGHTUSERDATA: - return lua_touserdata(L, idx); - default: return NULL; - } - } -} - - - -/* -** push functions (C -> stack) -*/ - - -LUA_API void lua_pushnil (lua_State *L) { - lua_lock(L); - setnilvalue(L->top); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { - lua_lock(L); - setnvalue(L->top, n); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) { - lua_lock(L); - luaC_checkGC(L); - setsvalue2s(L->top, luaS_newlstr(L, s, len)); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_pushstring (lua_State *L, const char *s) { - if (s == NULL) - lua_pushnil(L); - else - lua_pushlstring(L, s, strlen(s)); -} - - -LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, - va_list argp) { - const char *ret; - lua_lock(L); - luaC_checkGC(L); - ret = luaO_pushvfstring(L, fmt, argp); - lua_unlock(L); - return ret; -} - - -LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { - const char *ret; - va_list argp; - lua_lock(L); - luaC_checkGC(L); - va_start(argp, fmt); - ret = luaO_pushvfstring(L, fmt, argp); - va_end(argp); - lua_unlock(L); - return ret; -} - - -LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { - Closure *cl; - lua_lock(L); - luaC_checkGC(L); - api_checknelems(L, n); - cl = luaF_newCclosure(L, n); - cl->c.f = fn; - L->top -= n; - while (n--) - setobj2n(&cl->c.upvalue[n], L->top+n); - setclvalue(L->top, cl); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_pushboolean (lua_State *L, int b) { - lua_lock(L); - setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { - lua_lock(L); - setpvalue(L->top, p); - api_incr_top(L); - lua_unlock(L); -} - - - -/* -** get functions (Lua -> stack) -*/ - - -LUA_API void lua_gettable (lua_State *L, int idx) { - StkId t; - lua_lock(L); - t = luaA_index(L, idx); - setobj2s(L->top - 1, luaV_gettable(L, t, L->top - 1, 0)); - lua_unlock(L); -} - - -LUA_API void lua_rawget (lua_State *L, int idx) { - StkId t; - lua_lock(L); - t = luaA_index(L, idx); - api_check(L, ttistable(t)); - setobj2s(L->top - 1, luaH_get(hvalue(t), L->top - 1)); - lua_unlock(L); -} - - -LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { - StkId o; - lua_lock(L); - o = luaA_index(L, idx); - api_check(L, ttistable(o)); - setobj2s(L->top, luaH_getnum(hvalue(o), n)); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API void lua_newtable (lua_State *L) { - lua_lock(L); - luaC_checkGC(L); - sethvalue(L->top, luaH_new(L, 0, 0)); - api_incr_top(L); - lua_unlock(L); -} - - -LUA_API int lua_getmetatable (lua_State *L, int objindex) { - const TObject *obj; - Table *mt = NULL; - int res; - lua_lock(L); - obj = luaA_indexAcceptable(L, objindex); - if (obj != NULL) { - switch (ttype(obj)) { - case LUA_TTABLE: - mt = hvalue(obj)->metatable; - break; - case LUA_TUSERDATA: - mt = uvalue(obj)->uv.metatable; - break; - } - } - if (mt == NULL || mt == hvalue(defaultmeta(L))) - res = 0; - else { - sethvalue(L->top, mt); - api_incr_top(L); - res = 1; - } - lua_unlock(L); - return res; -} - - -LUA_API void lua_getfenv (lua_State *L, int idx) { - StkId o; - lua_lock(L); - o = luaA_index(L, idx); - setobj2s(L->top, isLfunction(o) ? &clvalue(o)->l.g : gt(L)); - api_incr_top(L); - lua_unlock(L); -} - - -/* -** set functions (stack -> Lua) -*/ - - -LUA_API void lua_settable (lua_State *L, int idx) { - StkId t; - lua_lock(L); - api_checknelems(L, 2); - t = luaA_index(L, idx); - luaV_settable(L, t, L->top - 2, L->top - 1); - L->top -= 2; /* pop index and value */ - lua_unlock(L); -} - - -LUA_API void lua_rawset (lua_State *L, int idx) { - StkId t; - lua_lock(L); - api_checknelems(L, 2); - t = luaA_index(L, idx); - api_check(L, ttistable(t)); - setobj2t(luaH_set(L, hvalue(t), L->top-2), L->top-1); /* write barrier */ - L->top -= 2; - lua_unlock(L); -} - - -LUA_API void lua_rawseti (lua_State *L, int idx, int n) { - StkId o; - lua_lock(L); - api_checknelems(L, 1); - o = luaA_index(L, idx); - api_check(L, ttistable(o)); - setobj2t(luaH_setnum(L, hvalue(o), n), L->top-1); /* write barrier */ - L->top--; - lua_unlock(L); -} - - -LUA_API int lua_setmetatable (lua_State *L, int objindex) { - TObject *obj, *mt; - int res = 1; - lua_lock(L); - api_checknelems(L, 1); - obj = luaA_index(L, objindex); - mt = (!ttisnil(L->top - 1)) ? L->top - 1 : defaultmeta(L); - api_check(L, ttistable(mt)); - switch (ttype(obj)) { - case LUA_TTABLE: { - hvalue(obj)->metatable = hvalue(mt); /* write barrier */ - break; - } - case LUA_TUSERDATA: { - uvalue(obj)->uv.metatable = hvalue(mt); /* write barrier */ - break; - } - default: { - res = 0; /* cannot set */ - break; - } - } - L->top--; - lua_unlock(L); - return res; -} - - -LUA_API int lua_setfenv (lua_State *L, int idx) { - StkId o; - int res = 0; - lua_lock(L); - api_checknelems(L, 1); - o = luaA_index(L, idx); - L->top--; - api_check(L, ttistable(L->top)); - if (isLfunction(o)) { - res = 1; - clvalue(o)->l.g = *(L->top); - } - lua_unlock(L); - return res; -} - - -/* -** `load' and `call' functions (run Lua code) -*/ - -LUA_API void lua_call (lua_State *L, int nargs, int nresults) { - StkId func; - lua_lock(L); - api_checknelems(L, nargs+1); - func = L->top - (nargs+1); - luaD_call(L, func, nresults); - lua_unlock(L); -} - - - -/* -** Execute a protected call. -*/ -struct CallS { /* data to `f_call' */ - StkId func; - int nresults; -}; - - -static void f_call (lua_State *L, void *ud) { - struct CallS *c = cast(struct CallS *, ud); - luaD_call(L, c->func, c->nresults); -} - - - -LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc) { - struct CallS c; - int status; - ptrdiff_t func; - lua_lock(L); - func = (errfunc == 0) ? 0 : savestack(L, luaA_index(L, errfunc)); - c.func = L->top - (nargs+1); /* function to be called */ - c.nresults = nresults; - status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); - lua_unlock(L); - return status; -} - - -/* -** Execute a protected C call. -*/ -struct CCallS { /* data to `f_Ccall' */ - lua_CFunction func; - void *ud; -}; - - -static void f_Ccall (lua_State *L, void *ud) { - struct CCallS *c = cast(struct CCallS *, ud); - Closure *cl; - cl = luaF_newCclosure(L, 0); - cl->c.f = c->func; - setclvalue(L->top, cl); /* push function */ - incr_top(L); - setpvalue(L->top, c->ud); /* push only argument */ - incr_top(L); - luaD_call(L, L->top - 2, 0); -} - - -LUA_API int lua_cpcall (lua_State *L, lua_CFunction func, void *ud) { - struct CCallS c; - int status; - lua_lock(L); - c.func = func; - c.ud = ud; - status = luaD_pcall(L, f_Ccall, &c, savestack(L, L->top), 0); - lua_unlock(L); - return status; -} - - -LUA_API int lua_load (lua_State *L, lua_Chunkreader reader, void *data, - const char *chunkname) { - ZIO z; - int status; - int c; - lua_lock(L); - if (!chunkname) chunkname = "?"; - luaZ_init(&z, reader, data, chunkname); - c = luaZ_lookahead(&z); - status = luaD_protectedparser(L, &z, (c == LUA_SIGNATURE[0])); - lua_unlock(L); - return status; -} - - -LUA_API int lua_dump (lua_State *L, lua_Chunkwriter writer, void *data) { - int status; - TObject *o; - lua_lock(L); - api_checknelems(L, 1); - o = L->top - 1; - if (isLfunction(o) && clvalue(o)->l.nupvalues == 0) { - luaU_dump(L, clvalue(o)->l.p, writer, data); - status = 1; - } - else - status = 0; - lua_unlock(L); - return status; -} - - -/* -** Garbage-collection functions -*/ - -/* GC values are expressed in Kbytes: #bytes/2^10 */ -#define GCscalel(x) ((x)>>10) -#define GCscale(x) (cast(int, GCscalel(x))) -#define GCunscale(x) (cast(lu_mem, x)<<10) - -LUA_API int lua_getgcthreshold (lua_State *L) { - int threshold; - lua_lock(L); - threshold = GCscale(G(L)->GCthreshold); - lua_unlock(L); - return threshold; -} - -LUA_API int lua_getgccount (lua_State *L) { - int count; - lua_lock(L); - count = GCscale(G(L)->nblocks); - lua_unlock(L); - return count; -} - -LUA_API void lua_setgcthreshold (lua_State *L, int newthreshold) { - lua_lock(L); - if (cast(lu_mem, newthreshold) > GCscalel(MAX_LUMEM)) - G(L)->GCthreshold = MAX_LUMEM; - else - G(L)->GCthreshold = GCunscale(newthreshold); - luaC_checkGC(L); - lua_unlock(L); -} - - -/* -** miscellaneous functions -*/ - - -LUA_API const char *lua_version (void) { - return LUA_VERSION; -} - - -LUA_API int lua_error (lua_State *L) { - lua_lock(L); - api_checknelems(L, 1); - luaG_errormsg(L); - lua_unlock(L); - return 0; /* to avoid warnings */ -} - - -LUA_API int lua_next (lua_State *L, int idx) { - StkId t; - int more; - lua_lock(L); - t = luaA_index(L, idx); - api_check(L, ttistable(t)); - more = luaH_next(L, hvalue(t), L->top - 1); - if (more) { - api_incr_top(L); - } - else /* no more elements */ - L->top -= 1; /* remove key */ - lua_unlock(L); - return more; -} - - -LUA_API void lua_concat (lua_State *L, int n) { - lua_lock(L); - luaC_checkGC(L); - api_checknelems(L, n); - if (n >= 2) { - luaV_concat(L, n, L->top - L->base - 1); - L->top -= (n-1); - } - else if (n == 0) { /* push empty string */ - setsvalue2s(L->top, luaS_newlstr(L, NULL, 0)); - api_incr_top(L); - } - /* else n == 1; nothing to do */ - lua_unlock(L); -} - - -LUA_API void *lua_newuserdata (lua_State *L, size_t size) { - Udata *u; - lua_lock(L); - luaC_checkGC(L); - u = luaS_newudata(L, size); - setuvalue(L->top, u); - api_incr_top(L); - lua_unlock(L); - return u + 1; -} - - -LUA_API int lua_pushupvalues (lua_State *L) { - Closure *func; - int n, i; - lua_lock(L); - api_check(L, iscfunction(L->base - 1)); - func = clvalue(L->base - 1); - n = func->c.nupvalues; - luaD_checkstack(L, n + LUA_MINSTACK); - for (i=0; itop, &func->c.upvalue[i]); - L->top++; - } - lua_unlock(L); - return n; -} - - -static const char *aux_upvalue (lua_State *L, int funcindex, int n, - TObject **val) { - Closure *f; - StkId fi = luaA_index(L, funcindex); - if (!ttisfunction(fi)) return NULL; - f = clvalue(fi); - if (f->c.isC) { - if (n > f->c.nupvalues) return NULL; - *val = &f->c.upvalue[n-1]; - return ""; - } - else { - Proto *p = f->l.p; - if (n > p->sizeupvalues) return NULL; - *val = f->l.upvals[n-1]->v; - return getstr(p->upvalues[n-1]); - } -} - - -LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { - const char *name; - TObject *val; - lua_lock(L); - name = aux_upvalue(L, funcindex, n, &val); - if (name) { - setobj2s(L->top, val); - api_incr_top(L); - } - lua_unlock(L); - return name; -} - - -LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { - const char *name; - TObject *val; - lua_lock(L); - api_checknelems(L, 1); - name = aux_upvalue(L, funcindex, n, &val); - if (name) { - L->top--; - setobj(val, L->top); /* write barrier */ - } - lua_unlock(L); - return name; -} - diff --git a/stepmania/src/lua-5.0/src/lapi.h b/stepmania/src/lua-5.0/src/lapi.h deleted file mode 100644 index b71328334a..0000000000 --- a/stepmania/src/lua-5.0/src/lapi.h +++ /dev/null @@ -1,16 +0,0 @@ -/* -** $Id$ -** Auxiliary functions from Lua API -** See Copyright Notice in lua.h -*/ - -#ifndef lapi_h -#define lapi_h - - -#include "lobject.h" - - -void luaA_pushobject (lua_State *L, const TObject *o); - -#endif diff --git a/stepmania/src/lua-5.0/src/lcode.c b/stepmania/src/lua-5.0/src/lcode.c deleted file mode 100644 index 29e3f12a9b..0000000000 --- a/stepmania/src/lua-5.0/src/lcode.c +++ /dev/null @@ -1,714 +0,0 @@ -/* -** $Id$ -** Code generator for Lua -** See Copyright Notice in lua.h -*/ - - -#include - -#define lcode_c - -#include "lua.h" - -#include "lcode.h" -#include "ldebug.h" -#include "ldo.h" -#include "llex.h" -#include "lmem.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lparser.h" -#include "ltable.h" - - -#define hasjumps(e) ((e)->t != (e)->f) - - -void luaK_nil (FuncState *fs, int from, int n) { - Instruction *previous; - if (fs->pc > fs->lasttarget && /* no jumps to current position? */ - GET_OPCODE(*(previous = &fs->f->code[fs->pc-1])) == OP_LOADNIL) { - int pfrom = GETARG_A(*previous); - int pto = GETARG_B(*previous); - if (pfrom <= from && from <= pto+1) { /* can connect both? */ - if (from+n-1 > pto) - SETARG_B(*previous, from+n-1); - return; - } - } - luaK_codeABC(fs, OP_LOADNIL, from, from+n-1, 0); /* else no optimization */ -} - - -int luaK_jump (FuncState *fs) { - int jpc = fs->jpc; /* save list of jumps to here */ - int j; - fs->jpc = NO_JUMP; - j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); - luaK_concat(fs, &j, jpc); /* keep them on hold */ - return j; -} - - -static int luaK_condjump (FuncState *fs, OpCode op, int A, int B, int C) { - luaK_codeABC(fs, op, A, B, C); - return luaK_jump(fs); -} - - -static void luaK_fixjump (FuncState *fs, int pc, int dest) { - Instruction *jmp = &fs->f->code[pc]; - int offset = dest-(pc+1); - lua_assert(dest != NO_JUMP); - if (abs(offset) > MAXARG_sBx) - luaX_syntaxerror(fs->ls, "control structure too long"); - SETARG_sBx(*jmp, offset); -} - - -/* -** returns current `pc' and marks it as a jump target (to avoid wrong -** optimizations with consecutive instructions not in the same basic block). -*/ -int luaK_getlabel (FuncState *fs) { - fs->lasttarget = fs->pc; - return fs->pc; -} - - -static int luaK_getjump (FuncState *fs, int pc) { - int offset = GETARG_sBx(fs->f->code[pc]); - if (offset == NO_JUMP) /* point to itself represents end of list */ - return NO_JUMP; /* end of list */ - else - return (pc+1)+offset; /* turn offset into absolute position */ -} - - -static Instruction *getjumpcontrol (FuncState *fs, int pc) { - Instruction *pi = &fs->f->code[pc]; - if (pc >= 1 && testOpMode(GET_OPCODE(*(pi-1)), OpModeT)) - return pi-1; - else - return pi; -} - - -/* -** check whether list has any jump that do not produce a value -** (or produce an inverted value) -*/ -static int need_value (FuncState *fs, int list, int cond) { - for (; list != NO_JUMP; list = luaK_getjump(fs, list)) { - Instruction i = *getjumpcontrol(fs, list); - if (GET_OPCODE(i) != OP_TEST || GETARG_C(i) != cond) return 1; - } - return 0; /* not found */ -} - - -static void patchtestreg (Instruction *i, int reg) { - if (reg == NO_REG) reg = GETARG_B(*i); - SETARG_A(*i, reg); -} - - -static void luaK_patchlistaux (FuncState *fs, int list, - int ttarget, int treg, int ftarget, int freg, int dtarget) { - while (list != NO_JUMP) { - int next = luaK_getjump(fs, list); - Instruction *i = getjumpcontrol(fs, list); - if (GET_OPCODE(*i) != OP_TEST) { - lua_assert(dtarget != NO_JUMP); - luaK_fixjump(fs, list, dtarget); /* jump to default target */ - } - else { - if (GETARG_C(*i)) { - lua_assert(ttarget != NO_JUMP); - patchtestreg(i, treg); - luaK_fixjump(fs, list, ttarget); - } - else { - lua_assert(ftarget != NO_JUMP); - patchtestreg(i, freg); - luaK_fixjump(fs, list, ftarget); - } - } - list = next; - } -} - - -static void luaK_dischargejpc (FuncState *fs) { - luaK_patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc, NO_REG, fs->pc); - fs->jpc = NO_JUMP; -} - - -void luaK_patchlist (FuncState *fs, int list, int target) { - if (target == fs->pc) - luaK_patchtohere(fs, list); - else { - lua_assert(target < fs->pc); - luaK_patchlistaux(fs, list, target, NO_REG, target, NO_REG, target); - } -} - - -void luaK_patchtohere (FuncState *fs, int list) { - luaK_getlabel(fs); - luaK_concat(fs, &fs->jpc, list); -} - - -void luaK_concat (FuncState *fs, int *l1, int l2) { - if (l2 == NO_JUMP) return; - else if (*l1 == NO_JUMP) - *l1 = l2; - else { - int list = *l1; - int next; - while ((next = luaK_getjump(fs, list)) != NO_JUMP) /* find last element */ - list = next; - luaK_fixjump(fs, list, l2); - } -} - - -void luaK_checkstack (FuncState *fs, int n) { - int newstack = fs->freereg + n; - if (newstack > fs->f->maxstacksize) { - if (newstack >= MAXSTACK) - luaX_syntaxerror(fs->ls, "function or expression too complex"); - fs->f->maxstacksize = cast(lu_byte, newstack); - } -} - - -void luaK_reserveregs (FuncState *fs, int n) { - luaK_checkstack(fs, n); - fs->freereg += n; -} - - -static void freereg (FuncState *fs, int reg) { - if (reg >= fs->nactvar && reg < MAXSTACK) { - fs->freereg--; - lua_assert(reg == fs->freereg); - } -} - - -static void freeexp (FuncState *fs, expdesc *e) { - if (e->k == VNONRELOC) - freereg(fs, e->info); -} - - -static int addk (FuncState *fs, TObject *k, TObject *v) { - const TObject *idx = luaH_get(fs->h, k); - if (ttisnumber(idx)) { - lua_assert(luaO_rawequalObj(&fs->f->k[cast(int, nvalue(idx))], v)); - return cast(int, nvalue(idx)); - } - else { /* constant not found; create a new entry */ - Proto *f = fs->f; - luaM_growvector(fs->L, f->k, fs->nk, f->sizek, TObject, - MAXARG_Bx, "constant table overflow"); - setobj2n(&f->k[fs->nk], v); - setnvalue(luaH_set(fs->L, fs->h, k), cast(lua_Number, fs->nk)); - return fs->nk++; - } -} - - -int luaK_stringK (FuncState *fs, TString *s) { - TObject o; - setsvalue(&o, s); - return addk(fs, &o, &o); -} - - -int luaK_numberK (FuncState *fs, lua_Number r) { - TObject o; - setnvalue(&o, r); - return addk(fs, &o, &o); -} - - -static int nil_constant (FuncState *fs) { - TObject k, v; - setnilvalue(&v); - sethvalue(&k, fs->h); /* cannot use nil as key; instead use table itself */ - return addk(fs, &k, &v); -} - - -void luaK_setcallreturns (FuncState *fs, expdesc *e, int nresults) { - if (e->k == VCALL) { /* expression is an open function call? */ - SETARG_C(getcode(fs, e), nresults+1); - if (nresults == 1) { /* `regular' expression? */ - e->k = VNONRELOC; - e->info = GETARG_A(getcode(fs, e)); - } - } -} - - -void luaK_dischargevars (FuncState *fs, expdesc *e) { - switch (e->k) { - case VLOCAL: { - e->k = VNONRELOC; - break; - } - case VUPVAL: { - e->info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->info, 0); - e->k = VRELOCABLE; - break; - } - case VGLOBAL: { - e->info = luaK_codeABx(fs, OP_GETGLOBAL, 0, e->info); - e->k = VRELOCABLE; - break; - } - case VINDEXED: { - freereg(fs, e->aux); - freereg(fs, e->info); - e->info = luaK_codeABC(fs, OP_GETTABLE, 0, e->info, e->aux); - e->k = VRELOCABLE; - break; - } - case VCALL: { - luaK_setcallreturns(fs, e, 1); - break; - } - default: break; /* there is one value available (somewhere) */ - } -} - - -static int code_label (FuncState *fs, int A, int b, int jump) { - luaK_getlabel(fs); /* those instructions may be jump targets */ - return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); -} - - -static void discharge2reg (FuncState *fs, expdesc *e, int reg) { - luaK_dischargevars(fs, e); - switch (e->k) { - case VNIL: { - luaK_nil(fs, reg, 1); - break; - } - case VFALSE: case VTRUE: { - luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); - break; - } - case VK: { - luaK_codeABx(fs, OP_LOADK, reg, e->info); - break; - } - case VRELOCABLE: { - Instruction *pc = &getcode(fs, e); - SETARG_A(*pc, reg); - break; - } - case VNONRELOC: { - if (reg != e->info) - luaK_codeABC(fs, OP_MOVE, reg, e->info, 0); - break; - } - default: { - lua_assert(e->k == VVOID || e->k == VJMP); - return; /* nothing to do... */ - } - } - e->info = reg; - e->k = VNONRELOC; -} - - -static void discharge2anyreg (FuncState *fs, expdesc *e) { - if (e->k != VNONRELOC) { - luaK_reserveregs(fs, 1); - discharge2reg(fs, e, fs->freereg-1); - } -} - - -static void luaK_exp2reg (FuncState *fs, expdesc *e, int reg) { - discharge2reg(fs, e, reg); - if (e->k == VJMP) - luaK_concat(fs, &e->t, e->info); /* put this jump in `t' list */ - if (hasjumps(e)) { - int final; /* position after whole expression */ - int p_f = NO_JUMP; /* position of an eventual LOAD false */ - int p_t = NO_JUMP; /* position of an eventual LOAD true */ - if (need_value(fs, e->t, 1) || need_value(fs, e->f, 0)) { - int fj = NO_JUMP; /* first jump (over LOAD ops.) */ - if (e->k != VJMP) - fj = luaK_jump(fs); - p_f = code_label(fs, reg, 0, 1); - p_t = code_label(fs, reg, 1, 0); - luaK_patchtohere(fs, fj); - } - final = luaK_getlabel(fs); - luaK_patchlistaux(fs, e->f, p_f, NO_REG, final, reg, p_f); - luaK_patchlistaux(fs, e->t, final, reg, p_t, NO_REG, p_t); - } - e->f = e->t = NO_JUMP; - e->info = reg; - e->k = VNONRELOC; -} - - -void luaK_exp2nextreg (FuncState *fs, expdesc *e) { - luaK_dischargevars(fs, e); - freeexp(fs, e); - luaK_reserveregs(fs, 1); - luaK_exp2reg(fs, e, fs->freereg - 1); -} - - -int luaK_exp2anyreg (FuncState *fs, expdesc *e) { - luaK_dischargevars(fs, e); - if (e->k == VNONRELOC) { - if (!hasjumps(e)) return e->info; /* exp is already in a register */ - if (e->info >= fs->nactvar) { /* reg. is not a local? */ - luaK_exp2reg(fs, e, e->info); /* put value on it */ - return e->info; - } - } - luaK_exp2nextreg(fs, e); /* default */ - return e->info; -} - - -void luaK_exp2val (FuncState *fs, expdesc *e) { - if (hasjumps(e)) - luaK_exp2anyreg(fs, e); - else - luaK_dischargevars(fs, e); -} - - -int luaK_exp2RK (FuncState *fs, expdesc *e) { - luaK_exp2val(fs, e); - switch (e->k) { - case VNIL: { - if (fs->nk + MAXSTACK <= MAXARG_C) { /* constant fit in argC? */ - e->info = nil_constant(fs); - e->k = VK; - return e->info + MAXSTACK; - } - else break; - } - case VK: { - if (e->info + MAXSTACK <= MAXARG_C) /* constant fit in argC? */ - return e->info + MAXSTACK; - else break; - } - default: break; - } - /* not a constant in the right range: put it in a register */ - return luaK_exp2anyreg(fs, e); -} - - -void luaK_storevar (FuncState *fs, expdesc *var, expdesc *exp) { - switch (var->k) { - case VLOCAL: { - freeexp(fs, exp); - luaK_exp2reg(fs, exp, var->info); - return; - } - case VUPVAL: { - int e = luaK_exp2anyreg(fs, exp); - luaK_codeABC(fs, OP_SETUPVAL, e, var->info, 0); - break; - } - case VGLOBAL: { - int e = luaK_exp2anyreg(fs, exp); - luaK_codeABx(fs, OP_SETGLOBAL, e, var->info); - break; - } - case VINDEXED: { - int e = luaK_exp2RK(fs, exp); - luaK_codeABC(fs, OP_SETTABLE, var->info, var->aux, e); - break; - } - default: { - lua_assert(0); /* invalid var kind to store */ - break; - } - } - freeexp(fs, exp); -} - - -void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { - int func; - luaK_exp2anyreg(fs, e); - freeexp(fs, e); - func = fs->freereg; - luaK_reserveregs(fs, 2); - luaK_codeABC(fs, OP_SELF, func, e->info, luaK_exp2RK(fs, key)); - freeexp(fs, key); - e->info = func; - e->k = VNONRELOC; -} - - -static void invertjump (FuncState *fs, expdesc *e) { - Instruction *pc = getjumpcontrol(fs, e->info); - lua_assert(testOpMode(GET_OPCODE(*pc), OpModeT) && - GET_OPCODE(*pc) != OP_TEST); - SETARG_A(*pc, !(GETARG_A(*pc))); -} - - -static int jumponcond (FuncState *fs, expdesc *e, int cond) { - if (e->k == VRELOCABLE) { - Instruction ie = getcode(fs, e); - if (GET_OPCODE(ie) == OP_NOT) { - fs->pc--; /* remove previous OP_NOT */ - return luaK_condjump(fs, OP_TEST, NO_REG, GETARG_B(ie), !cond); - } - /* else go through */ - } - discharge2anyreg(fs, e); - freeexp(fs, e); - return luaK_condjump(fs, OP_TEST, NO_REG, e->info, cond); -} - - -void luaK_goiftrue (FuncState *fs, expdesc *e) { - int pc; /* pc of last jump */ - luaK_dischargevars(fs, e); - switch (e->k) { - case VK: case VTRUE: { - pc = NO_JUMP; /* always true; do nothing */ - break; - } - case VFALSE: { - pc = luaK_jump(fs); /* always jump */ - break; - } - case VJMP: { - invertjump(fs, e); - pc = e->info; - break; - } - default: { - pc = jumponcond(fs, e, 0); - break; - } - } - luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ -} - - -void luaK_goiffalse (FuncState *fs, expdesc *e) { - int pc; /* pc of last jump */ - luaK_dischargevars(fs, e); - switch (e->k) { - case VNIL: case VFALSE: { - pc = NO_JUMP; /* always false; do nothing */ - break; - } - case VTRUE: { - pc = luaK_jump(fs); /* always jump */ - break; - } - case VJMP: { - pc = e->info; - break; - } - default: { - pc = jumponcond(fs, e, 1); - break; - } - } - luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ -} - - -static void codenot (FuncState *fs, expdesc *e) { - luaK_dischargevars(fs, e); - switch (e->k) { - case VNIL: case VFALSE: { - e->k = VTRUE; - break; - } - case VK: case VTRUE: { - e->k = VFALSE; - break; - } - case VJMP: { - invertjump(fs, e); - break; - } - case VRELOCABLE: - case VNONRELOC: { - discharge2anyreg(fs, e); - freeexp(fs, e); - e->info = luaK_codeABC(fs, OP_NOT, 0, e->info, 0); - e->k = VRELOCABLE; - break; - } - default: { - lua_assert(0); /* cannot happen */ - break; - } - } - /* interchange true and false lists */ - { int temp = e->f; e->f = e->t; e->t = temp; } -} - - -void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { - t->aux = luaK_exp2RK(fs, k); - t->k = VINDEXED; -} - - -void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e) { - if (op == OPR_MINUS) { - luaK_exp2val(fs, e); - if (e->k == VK && ttisnumber(&fs->f->k[e->info])) - e->info = luaK_numberK(fs, -nvalue(&fs->f->k[e->info])); - else { - luaK_exp2anyreg(fs, e); - freeexp(fs, e); - e->info = luaK_codeABC(fs, OP_UNM, 0, e->info, 0); - e->k = VRELOCABLE; - } - } - else /* op == NOT */ - codenot(fs, e); -} - - -void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { - switch (op) { - case OPR_AND: { - luaK_goiftrue(fs, v); - luaK_patchtohere(fs, v->t); - v->t = NO_JUMP; - break; - } - case OPR_OR: { - luaK_goiffalse(fs, v); - luaK_patchtohere(fs, v->f); - v->f = NO_JUMP; - break; - } - case OPR_CONCAT: { - luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ - break; - } - default: { - luaK_exp2RK(fs, v); - break; - } - } -} - - -static void codebinop (FuncState *fs, expdesc *res, BinOpr op, - int o1, int o2) { - if (op <= OPR_POW) { /* arithmetic operator? */ - OpCode opc = cast(OpCode, (op - OPR_ADD) + OP_ADD); /* ORDER OP */ - res->info = luaK_codeABC(fs, opc, 0, o1, o2); - res->k = VRELOCABLE; - } - else { /* test operator */ - static const OpCode ops[] = {OP_EQ, OP_EQ, OP_LT, OP_LE, OP_LT, OP_LE}; - int cond = 1; - if (op >= OPR_GT) { /* `>' or `>='? */ - int temp; /* exchange args and replace by `<' or `<=' */ - temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ - } - else if (op == OPR_NE) cond = 0; - res->info = luaK_condjump(fs, ops[op - OPR_NE], cond, o1, o2); - res->k = VJMP; - } -} - - -void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { - switch (op) { - case OPR_AND: { - lua_assert(e1->t == NO_JUMP); /* list must be closed */ - luaK_dischargevars(fs, e2); - luaK_concat(fs, &e1->f, e2->f); - e1->k = e2->k; e1->info = e2->info; e1->aux = e2->aux; e1->t = e2->t; - break; - } - case OPR_OR: { - lua_assert(e1->f == NO_JUMP); /* list must be closed */ - luaK_dischargevars(fs, e2); - luaK_concat(fs, &e1->t, e2->t); - e1->k = e2->k; e1->info = e2->info; e1->aux = e2->aux; e1->f = e2->f; - break; - } - case OPR_CONCAT: { - luaK_exp2val(fs, e2); - if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { - lua_assert(e1->info == GETARG_B(getcode(fs, e2))-1); - freeexp(fs, e1); - SETARG_B(getcode(fs, e2), e1->info); - e1->k = e2->k; e1->info = e2->info; - } - else { - luaK_exp2nextreg(fs, e2); - freeexp(fs, e2); - freeexp(fs, e1); - e1->info = luaK_codeABC(fs, OP_CONCAT, 0, e1->info, e2->info); - e1->k = VRELOCABLE; - } - break; - } - default: { - int o1 = luaK_exp2RK(fs, e1); - int o2 = luaK_exp2RK(fs, e2); - freeexp(fs, e2); - freeexp(fs, e1); - codebinop(fs, e1, op, o1, o2); - } - } -} - - -void luaK_fixline (FuncState *fs, int line) { - fs->f->lineinfo[fs->pc - 1] = line; -} - - -int luaK_code (FuncState *fs, Instruction i, int line) { - Proto *f = fs->f; - luaK_dischargejpc(fs); /* `pc' will change */ - /* put new instruction in code array */ - luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, - MAX_INT, "code size overflow"); - f->code[fs->pc] = i; - /* save corresponding line information */ - luaM_growvector(fs->L, f->lineinfo, fs->pc, f->sizelineinfo, int, - MAX_INT, "code size overflow"); - f->lineinfo[fs->pc] = line; - return fs->pc++; -} - - -int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { - lua_assert(getOpMode(o) == iABC); - return luaK_code(fs, CREATE_ABC(o, a, b, c), fs->ls->lastline); -} - - -int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { - lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); - return luaK_code(fs, CREATE_ABx(o, a, bc), fs->ls->lastline); -} - diff --git a/stepmania/src/lua-5.0/src/lcode.h b/stepmania/src/lua-5.0/src/lcode.h deleted file mode 100644 index 9817ec41aa..0000000000 --- a/stepmania/src/lua-5.0/src/lcode.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -** $Id$ -** Code generator for Lua -** See Copyright Notice in lua.h -*/ - -#ifndef lcode_h -#define lcode_h - -#include "llex.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lparser.h" - - -/* -** Marks the end of a patch list. It is an invalid value both as an absolute -** address, and as a list link (would link an element to itself). -*/ -#define NO_JUMP (-1) - - -/* -** grep "ORDER OPR" if you change these enums -*/ -typedef enum BinOpr { - OPR_ADD, OPR_SUB, OPR_MULT, OPR_DIV, OPR_POW, - OPR_CONCAT, - OPR_NE, OPR_EQ, - OPR_LT, OPR_LE, OPR_GT, OPR_GE, - OPR_AND, OPR_OR, - OPR_NOBINOPR -} BinOpr; - -#define binopistest(op) ((op) >= OPR_NE) - -typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_NOUNOPR } UnOpr; - - -#define getcode(fs,e) ((fs)->f->code[(e)->info]) - -#define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) - -int luaK_code (FuncState *fs, Instruction i, int line); -int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); -int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); -void luaK_fixline (FuncState *fs, int line); -void luaK_nil (FuncState *fs, int from, int n); -void luaK_reserveregs (FuncState *fs, int n); -void luaK_checkstack (FuncState *fs, int n); -int luaK_stringK (FuncState *fs, TString *s); -int luaK_numberK (FuncState *fs, lua_Number r); -void luaK_dischargevars (FuncState *fs, expdesc *e); -int luaK_exp2anyreg (FuncState *fs, expdesc *e); -void luaK_exp2nextreg (FuncState *fs, expdesc *e); -void luaK_exp2val (FuncState *fs, expdesc *e); -int luaK_exp2RK (FuncState *fs, expdesc *e); -void luaK_self (FuncState *fs, expdesc *e, expdesc *key); -void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); -void luaK_goiftrue (FuncState *fs, expdesc *e); -void luaK_goiffalse (FuncState *fs, expdesc *e); -void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); -void luaK_setcallreturns (FuncState *fs, expdesc *var, int nresults); -int luaK_jump (FuncState *fs); -void luaK_patchlist (FuncState *fs, int list, int target); -void luaK_patchtohere (FuncState *fs, int list); -void luaK_concat (FuncState *fs, int *l1, int l2); -int luaK_getlabel (FuncState *fs); -void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v); -void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); -void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, expdesc *v2); - - -#endif diff --git a/stepmania/src/lua-5.0/src/ldebug.c b/stepmania/src/lua-5.0/src/ldebug.c deleted file mode 100644 index ca317d04e0..0000000000 --- a/stepmania/src/lua-5.0/src/ldebug.c +++ /dev/null @@ -1,585 +0,0 @@ -/* -** $Id$ -** Debug Interface -** See Copyright Notice in lua.h -*/ - - -#include -#include - -#define ldebug_c - -#include "lua.h" - -#include "lapi.h" -#include "lcode.h" -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" -#include "lvm.h" - - - -static const char *getfuncname (CallInfo *ci, const char **name); - - -#define isLua(ci) (!((ci)->state & CI_C)) - - -static int currentpc (CallInfo *ci) { - if (!isLua(ci)) return -1; /* function is not a Lua function? */ - if (ci->state & CI_HASFRAME) /* function has a frame? */ - ci->u.l.savedpc = *ci->u.l.pc; /* use `pc' from there */ - /* function's pc is saved */ - return pcRel(ci->u.l.savedpc, ci_func(ci)->l.p); -} - - -static int currentline (CallInfo *ci) { - int pc = currentpc(ci); - if (pc < 0) - return -1; /* only active lua functions have current-line information */ - else - return getline(ci_func(ci)->l.p, pc); -} - - -void luaG_inithooks (lua_State *L) { - CallInfo *ci; - for (ci = L->ci; ci != L->base_ci; ci--) /* update all `savedpc's */ - currentpc(ci); - L->hookinit = 1; -} - - -/* -** this function can be called asynchronous (e.g. during a signal) -*/ -LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { - if (func == NULL || mask == 0) { /* turn off hooks? */ - mask = 0; - func = NULL; - } - L->hook = func; - L->basehookcount = count; - resethookcount(L); - L->hookmask = cast(lu_byte, mask); - L->hookinit = 0; - return 1; -} - - -LUA_API lua_Hook lua_gethook (lua_State *L) { - return L->hook; -} - - -LUA_API int lua_gethookmask (lua_State *L) { - return L->hookmask; -} - - -LUA_API int lua_gethookcount (lua_State *L) { - return L->basehookcount; -} - - -LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { - int status; - CallInfo *ci; - lua_lock(L); - for (ci = L->ci; level > 0 && ci > L->base_ci; ci--) { - level--; - if (!(ci->state & CI_C)) /* Lua function? */ - level -= ci->u.l.tailcalls; /* skip lost tail calls */ - } - if (level > 0 || ci == L->base_ci) status = 0; /* there is no such level */ - else if (level < 0) { /* level is of a lost tail call */ - status = 1; - ar->i_ci = 0; - } - else { - status = 1; - ar->i_ci = ci - L->base_ci; - } - lua_unlock(L); - return status; -} - - -static Proto *getluaproto (CallInfo *ci) { - return (isLua(ci) ? ci_func(ci)->l.p : NULL); -} - - -LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { - const char *name; - CallInfo *ci; - Proto *fp; - lua_lock(L); - name = NULL; - ci = L->base_ci + ar->i_ci; - fp = getluaproto(ci); - if (fp) { /* is a Lua function? */ - name = luaF_getlocalname(fp, n, currentpc(ci)); - if (name) - luaA_pushobject(L, ci->base+(n-1)); /* push value */ - } - lua_unlock(L); - return name; -} - - -LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { - const char *name; - CallInfo *ci; - Proto *fp; - lua_lock(L); - name = NULL; - ci = L->base_ci + ar->i_ci; - fp = getluaproto(ci); - L->top--; /* pop new value */ - if (fp) { /* is a Lua function? */ - name = luaF_getlocalname(fp, n, currentpc(ci)); - if (!name || name[0] == '(') /* `(' starts private locals */ - name = NULL; - else - setobjs2s(ci->base+(n-1), L->top); - } - lua_unlock(L); - return name; -} - - -static void funcinfo (lua_Debug *ar, StkId func) { - Closure *cl = clvalue(func); - if (cl->c.isC) { - ar->source = "=[C]"; - ar->linedefined = -1; - ar->what = "C"; - } - else { - ar->source = getstr(cl->l.p->source); - ar->linedefined = cl->l.p->lineDefined; - ar->what = (ar->linedefined == 0) ? "main" : "Lua"; - } - luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); -} - - -static const char *travglobals (lua_State *L, const TObject *o) { - Table *g = hvalue(gt(L)); - int i = sizenode(g); - while (i--) { - Node *n = gnode(g, i); - if (luaO_rawequalObj(o, gval(n)) && ttisstring(gkey(n))) - return getstr(tsvalue(gkey(n))); - } - return NULL; -} - - -static void info_tailcall (lua_State *L, lua_Debug *ar) { - ar->name = ar->namewhat = ""; - ar->what = "tail"; - ar->linedefined = ar->currentline = -1; - ar->source = "=(tail call)"; - luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); - ar->nups = 0; - setnilvalue(L->top); -} - - -static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, - StkId f, CallInfo *ci) { - int status = 1; - for (; *what; what++) { - switch (*what) { - case 'S': { - funcinfo(ar, f); - break; - } - case 'l': { - ar->currentline = (ci) ? currentline(ci) : -1; - break; - } - case 'u': { - ar->nups = clvalue(f)->c.nupvalues; - break; - } - case 'n': { - ar->namewhat = (ci) ? getfuncname(ci, &ar->name) : NULL; - if (ar->namewhat == NULL) { - /* try to find a global name */ - if ((ar->name = travglobals(L, f)) != NULL) - ar->namewhat = "global"; - else ar->namewhat = ""; /* not found */ - } - break; - } - case 'f': { - setobj2s(L->top, f); - break; - } - default: status = 0; /* invalid option */ - } - } - return status; -} - - -LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { - int status = 1; - lua_lock(L); - if (*what == '>') { - StkId f = L->top - 1; - if (!ttisfunction(f)) - luaG_runerror(L, "value for `lua_getinfo' is not a function"); - status = auxgetinfo(L, what + 1, ar, f, NULL); - L->top--; /* pop function */ - } - else if (ar->i_ci != 0) { /* no tail call? */ - CallInfo *ci = L->base_ci + ar->i_ci; - lua_assert(ttisfunction(ci->base - 1)); - status = auxgetinfo(L, what, ar, ci->base - 1, ci); - } - else - info_tailcall(L, ar); - if (strchr(what, 'f')) incr_top(L); - lua_unlock(L); - return status; -} - - -/* -** {====================================================== -** Symbolic Execution and code checker -** ======================================================= -*/ - -#define check(x) if (!(x)) return 0; - -#define checkjump(pt,pc) check(0 <= pc && pc < pt->sizecode) - -#define checkreg(pt,reg) check((reg) < (pt)->maxstacksize) - - - -static int precheck (const Proto *pt) { - check(pt->maxstacksize <= MAXSTACK); - check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); - lua_assert(pt->numparams+pt->is_vararg <= pt->maxstacksize); - check(GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); - return 1; -} - - -static int checkopenop (const Proto *pt, int pc) { - Instruction i = pt->code[pc+1]; - switch (GET_OPCODE(i)) { - case OP_CALL: - case OP_TAILCALL: - case OP_RETURN: { - check(GETARG_B(i) == 0); - return 1; - } - case OP_SETLISTO: return 1; - default: return 0; /* invalid instruction after an open call */ - } -} - - -static int checkRK (const Proto *pt, int r) { - return (r < pt->maxstacksize || (r >= MAXSTACK && r-MAXSTACK < pt->sizek)); -} - - -static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) { - int pc; - int last; /* stores position of last instruction that changed `reg' */ - last = pt->sizecode-1; /* points to final return (a `neutral' instruction) */ - check(precheck(pt)); - for (pc = 0; pc < lastpc; pc++) { - const Instruction i = pt->code[pc]; - OpCode op = GET_OPCODE(i); - int a = GETARG_A(i); - int b = 0; - int c = 0; - checkreg(pt, a); - switch (getOpMode(op)) { - case iABC: { - b = GETARG_B(i); - c = GETARG_C(i); - if (testOpMode(op, OpModeBreg)) { - checkreg(pt, b); - } - else if (testOpMode(op, OpModeBrk)) - check(checkRK(pt, b)); - if (testOpMode(op, OpModeCrk)) - check(checkRK(pt, c)); - break; - } - case iABx: { - b = GETARG_Bx(i); - if (testOpMode(op, OpModeK)) check(b < pt->sizek); - break; - } - case iAsBx: { - b = GETARG_sBx(i); - break; - } - } - if (testOpMode(op, OpModesetA)) { - if (a == reg) last = pc; /* change register `a' */ - } - if (testOpMode(op, OpModeT)) { - check(pc+2 < pt->sizecode); /* check skip */ - check(GET_OPCODE(pt->code[pc+1]) == OP_JMP); - } - switch (op) { - case OP_LOADBOOL: { - check(c == 0 || pc+2 < pt->sizecode); /* check its jump */ - break; - } - case OP_LOADNIL: { - if (a <= reg && reg <= b) - last = pc; /* set registers from `a' to `b' */ - break; - } - case OP_GETUPVAL: - case OP_SETUPVAL: { - check(b < pt->nups); - break; - } - case OP_GETGLOBAL: - case OP_SETGLOBAL: { - check(ttisstring(&pt->k[b])); - break; - } - case OP_SELF: { - checkreg(pt, a+1); - if (reg == a+1) last = pc; - break; - } - case OP_CONCAT: { - /* `c' is a register, and at least two operands */ - check(c < MAXSTACK && b < c); - break; - } - case OP_TFORLOOP: - checkreg(pt, a+c+5); - if (reg >= a) last = pc; /* affect all registers above base */ - /* go through */ - case OP_FORLOOP: - checkreg(pt, a+2); - /* go through */ - case OP_JMP: { - int dest = pc+1+b; - check(0 <= dest && dest < pt->sizecode); - /* not full check and jump is forward and do not skip `lastpc'? */ - if (reg != NO_REG && pc < dest && dest <= lastpc) - pc += b; /* do the jump */ - break; - } - case OP_CALL: - case OP_TAILCALL: { - if (b != 0) { - checkreg(pt, a+b-1); - } - c--; /* c = num. returns */ - if (c == LUA_MULTRET) { - check(checkopenop(pt, pc)); - } - else if (c != 0) - checkreg(pt, a+c-1); - if (reg >= a) last = pc; /* affect all registers above base */ - break; - } - case OP_RETURN: { - b--; /* b = num. returns */ - if (b > 0) checkreg(pt, a+b-1); - break; - } - case OP_SETLIST: { - checkreg(pt, a + (b&(LFIELDS_PER_FLUSH-1)) + 1); - break; - } - case OP_CLOSURE: { - int nup; - check(b < pt->sizep); - nup = pt->p[b]->nups; - check(pc + nup < pt->sizecode); - for (; nup>0; nup--) { - OpCode op1 = GET_OPCODE(pt->code[pc+nup]); - check(op1 == OP_GETUPVAL || op1 == OP_MOVE); - } - break; - } - default: break; - } - } - return pt->code[last]; -} - -#undef check -#undef checkjump -#undef checkreg - -/* }====================================================== */ - - -int luaG_checkcode (const Proto *pt) { - return luaG_symbexec(pt, pt->sizecode, NO_REG); -} - - -static const char *kname (Proto *p, int c) { - c = c - MAXSTACK; - if (c >= 0 && ttisstring(&p->k[c])) - return svalue(&p->k[c]); - else - return "?"; -} - - -static const char *getobjname (CallInfo *ci, int stackpos, const char **name) { - if (isLua(ci)) { /* a Lua function? */ - Proto *p = ci_func(ci)->l.p; - int pc = currentpc(ci); - Instruction i; - *name = luaF_getlocalname(p, stackpos+1, pc); - if (*name) /* is a local? */ - return "local"; - i = luaG_symbexec(p, pc, stackpos); /* try symbolic execution */ - lua_assert(pc != -1); - switch (GET_OPCODE(i)) { - case OP_GETGLOBAL: { - int g = GETARG_Bx(i); /* global index */ - lua_assert(ttisstring(&p->k[g])); - *name = svalue(&p->k[g]); - return "global"; - } - case OP_MOVE: { - int a = GETARG_A(i); - int b = GETARG_B(i); /* move from `b' to `a' */ - if (b < a) - return getobjname(ci, b, name); /* get name for `b' */ - break; - } - case OP_GETTABLE: { - int k = GETARG_C(i); /* key index */ - *name = kname(p, k); - return "field"; - } - case OP_SELF: { - int k = GETARG_C(i); /* key index */ - *name = kname(p, k); - return "method"; - } - default: break; - } - } - return NULL; /* no useful name found */ -} - - -static const char *getfuncname (CallInfo *ci, const char **name) { - Instruction i; - if ((isLua(ci) && ci->u.l.tailcalls > 0) || !isLua(ci - 1)) - return NULL; /* calling function is not Lua (or is unknown) */ - ci--; /* calling function */ - i = ci_func(ci)->l.p->code[currentpc(ci)]; - if (GET_OPCODE(i) == OP_CALL || GET_OPCODE(i) == OP_TAILCALL) - return getobjname(ci, GETARG_A(i), name); - else - return NULL; /* no useful name can be found */ -} - - -/* only ANSI way to check whether a pointer points to an array */ -static int isinstack (CallInfo *ci, const TObject *o) { - StkId p; - for (p = ci->base; p < ci->top; p++) - if (o == p) return 1; - return 0; -} - - -void luaG_typeerror (lua_State *L, const TObject *o, const char *op) { - const char *name = NULL; - const char *t = luaT_typenames[ttype(o)]; - const char *kind = (isinstack(L->ci, o)) ? - getobjname(L->ci, o - L->base, &name) : NULL; - if (kind) - luaG_runerror(L, "attempt to %s %s `%s' (a %s value)", - op, kind, name, t); - else - luaG_runerror(L, "attempt to %s a %s value", op, t); -} - - -void luaG_concaterror (lua_State *L, StkId p1, StkId p2) { - if (ttisstring(p1)) p1 = p2; - lua_assert(!ttisstring(p1)); - luaG_typeerror(L, p1, "concatenate"); -} - - -void luaG_aritherror (lua_State *L, const TObject *p1, const TObject *p2) { - TObject temp; - if (luaV_tonumber(p1, &temp) == NULL) - p2 = p1; /* first operand is wrong */ - luaG_typeerror(L, p2, "perform arithmetic on"); -} - - -int luaG_ordererror (lua_State *L, const TObject *p1, const TObject *p2) { - const char *t1 = luaT_typenames[ttype(p1)]; - const char *t2 = luaT_typenames[ttype(p2)]; - if (t1[2] == t2[2]) - luaG_runerror(L, "attempt to compare two %s values", t1); - else - luaG_runerror(L, "attempt to compare %s with %s", t1, t2); - return 0; -} - - -static void addinfo (lua_State *L, const char *msg) { - CallInfo *ci = L->ci; - if (isLua(ci)) { /* is Lua code? */ - char buff[LUA_IDSIZE]; /* add file:line information */ - int line = currentline(ci); - luaO_chunkid(buff, getstr(getluaproto(ci)->source), LUA_IDSIZE); - luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); - } -} - - -void luaG_errormsg (lua_State *L) { - if (L->errfunc != 0) { /* is there an error handling function? */ - StkId errfunc = restorestack(L, L->errfunc); - if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); - setobjs2s(L->top, L->top - 1); /* move argument */ - setobjs2s(L->top - 1, errfunc); /* push function */ - incr_top(L); - luaD_call(L, L->top - 2, 1); /* call it */ - } - luaD_throw(L, LUA_ERRRUN); -} - - -void luaG_runerror (lua_State *L, const char *fmt, ...) { - va_list argp; - va_start(argp, fmt); - addinfo(L, luaO_pushvfstring(L, fmt, argp)); - va_end(argp); - luaG_errormsg(L); -} - diff --git a/stepmania/src/lua-5.0/src/ldebug.h b/stepmania/src/lua-5.0/src/ldebug.h deleted file mode 100644 index dbacce421e..0000000000 --- a/stepmania/src/lua-5.0/src/ldebug.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** $Id$ -** Auxiliary functions from Debug Interface module -** See Copyright Notice in lua.h -*/ - -#ifndef ldebug_h -#define ldebug_h - - -#include "lstate.h" - - -#define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) - -#define getline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) - -#define resethookcount(L) (L->hookcount = L->basehookcount) - - -void luaG_inithooks (lua_State *L); -void luaG_typeerror (lua_State *L, const TObject *o, const char *opname); -void luaG_concaterror (lua_State *L, StkId p1, StkId p2); -void luaG_aritherror (lua_State *L, const TObject *p1, const TObject *p2); -int luaG_ordererror (lua_State *L, const TObject *p1, const TObject *p2); -void luaG_runerror (lua_State *L, const char *fmt, ...); -void luaG_errormsg (lua_State *L); -int luaG_checkcode (const Proto *pt); - - -#endif diff --git a/stepmania/src/lua-5.0/src/ldo.c b/stepmania/src/lua-5.0/src/ldo.c deleted file mode 100644 index 064bfadbec..0000000000 --- a/stepmania/src/lua-5.0/src/ldo.c +++ /dev/null @@ -1,471 +0,0 @@ -/* -** $Id$ -** Stack and Call structure of Lua -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include - -#define ldo_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lgc.h" -#include "lmem.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lparser.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" -#include "lundump.h" -#include "lvm.h" -#include "lzio.h" - - - - -/* -** {====================================================== -** Error-recovery functions (based on long jumps) -** ======================================================= -*/ - - -/* chain list of long jump buffers */ -struct lua_longjmp { - struct lua_longjmp *previous; - jmp_buf b; - volatile int status; /* error code */ -}; - - -static void seterrorobj (lua_State *L, int errcode, StkId oldtop) { - switch (errcode) { - case LUA_ERRMEM: { - setsvalue2s(oldtop, luaS_new(L, MEMERRMSG)); - break; - } - case LUA_ERRERR: { - setsvalue2s(oldtop, luaS_new(L, "error in error handling")); - break; - } - case LUA_ERRSYNTAX: - case LUA_ERRRUN: { - setobjs2s(oldtop, L->top - 1); /* error message on current top */ - break; - } - } - L->top = oldtop + 1; -} - - -void luaD_throw (lua_State *L, int errcode) { - if (L->errorJmp) { - L->errorJmp->status = errcode; - longjmp(L->errorJmp->b, 1); - } - else { - G(L)->panic(L); - exit(EXIT_FAILURE); - } -} - - -int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { - struct lua_longjmp lj; - lj.status = 0; - lj.previous = L->errorJmp; /* chain new error handler */ - L->errorJmp = &lj; - if (setjmp(lj.b) == 0) - (*f)(L, ud); - L->errorJmp = lj.previous; /* restore old error handler */ - return lj.status; -} - - -static void restore_stack_limit (lua_State *L) { - L->stack_last = L->stack+L->stacksize-1; - if (L->size_ci > LUA_MAXCALLS) { /* there was an overflow? */ - int inuse = (L->ci - L->base_ci); - if (inuse + 1 < LUA_MAXCALLS) /* can `undo' overflow? */ - luaD_reallocCI(L, LUA_MAXCALLS); - } -} - -/* }====================================================== */ - - -static void correctstack (lua_State *L, TObject *oldstack) { - CallInfo *ci; - GCObject *up; - L->top = (L->top - oldstack) + L->stack; - for (up = L->openupval; up != NULL; up = up->gch.next) - gcotouv(up)->v = (gcotouv(up)->v - oldstack) + L->stack; - for (ci = L->base_ci; ci <= L->ci; ci++) { - ci->top = (ci->top - oldstack) + L->stack; - ci->base = (ci->base - oldstack) + L->stack; - } - L->base = L->ci->base; -} - - -void luaD_reallocstack (lua_State *L, int newsize) { - TObject *oldstack = L->stack; - luaM_reallocvector(L, L->stack, L->stacksize, newsize, TObject); - L->stacksize = newsize; - L->stack_last = L->stack+newsize-1-EXTRA_STACK; - correctstack(L, oldstack); -} - - -void luaD_reallocCI (lua_State *L, int newsize) { - CallInfo *oldci = L->base_ci; - luaM_reallocvector(L, L->base_ci, L->size_ci, newsize, CallInfo); - L->size_ci = cast(unsigned short, newsize); - L->ci = (L->ci - oldci) + L->base_ci; - L->end_ci = L->base_ci + L->size_ci; -} - - -void luaD_growstack (lua_State *L, int n) { - if (n <= L->stacksize) /* double size is enough? */ - luaD_reallocstack(L, 2*L->stacksize); - else - luaD_reallocstack(L, L->stacksize + n + EXTRA_STACK); -} - - -static void luaD_growCI (lua_State *L) { - if (L->size_ci > LUA_MAXCALLS) /* overflow while handling overflow? */ - luaD_throw(L, LUA_ERRERR); - else { - luaD_reallocCI(L, 2*L->size_ci); - if (L->size_ci > LUA_MAXCALLS) - luaG_runerror(L, "stack overflow"); - } -} - - -void luaD_callhook (lua_State *L, int event, int line) { - lua_Hook hook = L->hook; - if (hook && L->allowhook) { - ptrdiff_t top = savestack(L, L->top); - ptrdiff_t ci_top = savestack(L, L->ci->top); - lua_Debug ar; - ar.event = event; - ar.currentline = line; - if (event == LUA_HOOKTAILRET) - ar.i_ci = 0; /* tail call; no debug information about it */ - else - ar.i_ci = L->ci - L->base_ci; - luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ - L->ci->top = L->top + LUA_MINSTACK; - L->allowhook = 0; /* cannot call hooks inside a hook */ - lua_unlock(L); - (*hook)(L, &ar); - lua_lock(L); - lua_assert(!L->allowhook); - L->allowhook = 1; - L->ci->top = restorestack(L, ci_top); - L->top = restorestack(L, top); - } -} - - -static void adjust_varargs (lua_State *L, int nfixargs, StkId base) { - int i; - Table *htab; - TObject nname; - int actual = L->top - base; /* actual number of arguments */ - if (actual < nfixargs) { - luaD_checkstack(L, nfixargs - actual); - for (; actual < nfixargs; ++actual) - setnilvalue(L->top++); - } - actual -= nfixargs; /* number of extra arguments */ - htab = luaH_new(L, actual, 1); /* create `arg' table */ - for (i=0; itop - actual + i); - /* store counter in field `n' */ - setsvalue(&nname, luaS_newliteral(L, "n")); - setnvalue(luaH_set(L, htab, &nname), cast(lua_Number, actual)); - L->top -= actual; /* remove extra elements from the stack */ - sethvalue(L->top, htab); - incr_top(L); -} - - -static StkId tryfuncTM (lua_State *L, StkId func) { - const TObject *tm = luaT_gettmbyobj(L, func, TM_CALL); - StkId p; - ptrdiff_t funcr = savestack(L, func); - if (!ttisfunction(tm)) - luaG_typeerror(L, func, "call"); - /* Open a hole inside the stack at `func' */ - for (p = L->top; p > func; p--) setobjs2s(p, p-1); - incr_top(L); - func = restorestack(L, funcr); /* previous call may change stack */ - setobj2s(func, tm); /* tag method is the new function to be called */ - return func; -} - - -StkId luaD_precall (lua_State *L, StkId func) { - LClosure *cl; - ptrdiff_t funcr = savestack(L, func); - if (!ttisfunction(func)) /* `func' is not a function? */ - func = tryfuncTM(L, func); /* check the `function' tag method */ - if (L->ci + 1 == L->end_ci) luaD_growCI(L); - else condhardstacktests(luaD_reallocCI(L, L->size_ci)); - cl = &clvalue(func)->l; - if (!cl->isC) { /* Lua function? prepare its call */ - CallInfo *ci; - Proto *p = cl->p; - if (p->is_vararg) /* varargs? */ - adjust_varargs(L, p->numparams, func+1); - luaD_checkstack(L, p->maxstacksize); - ci = ++L->ci; /* now `enter' new function */ - L->base = L->ci->base = restorestack(L, funcr) + 1; - ci->top = L->base + p->maxstacksize; - ci->u.l.savedpc = p->code; /* starting point */ - ci->u.l.tailcalls = 0; - ci->state = CI_SAVEDPC; - while (L->top < ci->top) - setnilvalue(L->top++); - L->top = ci->top; - return NULL; - } - else { /* if is a C function, call it */ - CallInfo *ci; - int n; - luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ - ci = ++L->ci; /* now `enter' new function */ - L->base = L->ci->base = restorestack(L, funcr) + 1; - ci->top = L->top + LUA_MINSTACK; - ci->state = CI_C; /* a C function */ - if (L->hookmask & LUA_MASKCALL) - luaD_callhook(L, LUA_HOOKCALL, -1); - lua_unlock(L); -#ifdef LUA_COMPATUPVALUES - lua_pushupvalues(L); -#endif - n = (*clvalue(L->base - 1)->c.f)(L); /* do the actual call */ - lua_lock(L); - return L->top - n; - } -} - - -static StkId callrethooks (lua_State *L, StkId firstResult) { - ptrdiff_t fr = savestack(L, firstResult); /* next call may change stack */ - luaD_callhook(L, LUA_HOOKRET, -1); - if (!(L->ci->state & CI_C)) { /* Lua function? */ - while (L->ci->u.l.tailcalls--) /* call hook for eventual tail calls */ - luaD_callhook(L, LUA_HOOKTAILRET, -1); - } - return restorestack(L, fr); -} - - -void luaD_poscall (lua_State *L, int wanted, StkId firstResult) { - StkId res; - if (L->hookmask & LUA_MASKRET) - firstResult = callrethooks(L, firstResult); - res = L->base - 1; /* res == final position of 1st result */ - L->ci--; - L->base = L->ci->base; /* restore base */ - /* move results to correct place */ - while (wanted != 0 && firstResult < L->top) { - setobjs2s(res++, firstResult++); - wanted--; - } - while (wanted-- > 0) - setnilvalue(res++); - L->top = res; -} - - -/* -** Call a function (C or Lua). The function to be called is at *func. -** The arguments are on the stack, right after the function. -** When returns, all the results are on the stack, starting at the original -** function position. -*/ -void luaD_call (lua_State *L, StkId func, int nResults) { - StkId firstResult; - lua_assert(!(L->ci->state & CI_CALLING)); - if (++L->nCcalls >= LUA_MAXCCALLS) { - if (L->nCcalls == LUA_MAXCCALLS) - luaG_runerror(L, "C stack overflow"); - else if (L->nCcalls >= (LUA_MAXCCALLS + (LUA_MAXCCALLS>>3))) - luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ - } - firstResult = luaD_precall(L, func); - if (firstResult == NULL) /* is a Lua function? */ - firstResult = luaV_execute(L); /* call it */ - luaD_poscall(L, nResults, firstResult); - L->nCcalls--; - luaC_checkGC(L); -} - - -static void resume (lua_State *L, void *ud) { - StkId firstResult; - int nargs = *cast(int *, ud); - CallInfo *ci = L->ci; - if (ci == L->base_ci) { /* no activation record? */ - lua_assert(nargs < L->top - L->base); - luaD_precall(L, L->top - (nargs + 1)); /* start coroutine */ - } - else { /* inside a yield */ - lua_assert(ci->state & CI_YIELD); - if (ci->state & CI_C) { /* `common' yield? */ - /* finish interrupted execution of `OP_CALL' */ - int nresults; - lua_assert((ci-1)->state & CI_SAVEDPC); - lua_assert(GET_OPCODE(*((ci-1)->u.l.savedpc - 1)) == OP_CALL || - GET_OPCODE(*((ci-1)->u.l.savedpc - 1)) == OP_TAILCALL); - nresults = GETARG_C(*((ci-1)->u.l.savedpc - 1)) - 1; - luaD_poscall(L, nresults, L->top - nargs); /* complete it */ - if (nresults >= 0) L->top = L->ci->top; - } - else { /* yielded inside a hook: just continue its execution */ - ci->state &= ~CI_YIELD; - } - } - firstResult = luaV_execute(L); - if (firstResult != NULL) /* return? */ - luaD_poscall(L, LUA_MULTRET, firstResult); /* finalize this coroutine */ -} - - -static int resume_error (lua_State *L, const char *msg) { - L->top = L->ci->base; - setsvalue2s(L->top, luaS_new(L, msg)); - incr_top(L); - lua_unlock(L); - return LUA_ERRRUN; -} - - -LUA_API int lua_resume (lua_State *L, int nargs) { - int status; - lu_byte old_allowhooks; - lua_lock(L); - if (L->ci == L->base_ci) { - if (nargs >= L->top - L->base) - return resume_error(L, "cannot resume dead coroutine"); - } - else if (!(L->ci->state & CI_YIELD)) /* not inside a yield? */ - return resume_error(L, "cannot resume non-suspended coroutine"); - old_allowhooks = L->allowhook; - lua_assert(L->errfunc == 0 && L->nCcalls == 0); - status = luaD_rawrunprotected(L, resume, &nargs); - if (status != 0) { /* error? */ - L->ci = L->base_ci; /* go back to initial level */ - L->base = L->ci->base; - L->nCcalls = 0; - luaF_close(L, L->base); /* close eventual pending closures */ - seterrorobj(L, status, L->base); - L->allowhook = old_allowhooks; - restore_stack_limit(L); - } - lua_unlock(L); - return status; -} - - -LUA_API int lua_yield (lua_State *L, int nresults) { - CallInfo *ci; - lua_lock(L); - ci = L->ci; - if (L->nCcalls > 0) - luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); - if (ci->state & CI_C) { /* usual yield */ - if ((ci-1)->state & CI_C) - luaG_runerror(L, "cannot yield a C function"); - if (L->top - nresults > L->base) { /* is there garbage in the stack? */ - int i; - for (i=0; ibase + i, L->top - nresults + i); - L->top = L->base + nresults; - } - } /* else it's an yield inside a hook: nothing to do */ - ci->state |= CI_YIELD; - lua_unlock(L); - return -1; -} - - -int luaD_pcall (lua_State *L, Pfunc func, void *u, - ptrdiff_t old_top, ptrdiff_t ef) { - int status; - unsigned short oldnCcalls = L->nCcalls; - ptrdiff_t old_ci = saveci(L, L->ci); - lu_byte old_allowhooks = L->allowhook; - ptrdiff_t old_errfunc = L->errfunc; - L->errfunc = ef; - status = luaD_rawrunprotected(L, func, u); - if (status != 0) { /* an error occurred? */ - StkId oldtop = restorestack(L, old_top); - luaF_close(L, oldtop); /* close eventual pending closures */ - seterrorobj(L, status, oldtop); - L->nCcalls = oldnCcalls; - L->ci = restoreci(L, old_ci); - L->base = L->ci->base; - L->allowhook = old_allowhooks; - restore_stack_limit(L); - } - L->errfunc = old_errfunc; - return status; -} - - - -/* -** Execute a protected parser. -*/ -struct SParser { /* data to `f_parser' */ - ZIO *z; - Mbuffer buff; /* buffer to be used by the scanner */ - int bin; -}; - -static void f_parser (lua_State *L, void *ud) { - struct SParser *p; - Proto *tf; - Closure *cl; - luaC_checkGC(L); - p = cast(struct SParser *, ud); - tf = p->bin ? luaU_undump(L, p->z, &p->buff) : luaY_parser(L, p->z, &p->buff); - cl = luaF_newLclosure(L, 0, gt(L)); - cl->l.p = tf; - setclvalue(L->top, cl); - incr_top(L); -} - - -int luaD_protectedparser (lua_State *L, ZIO *z, int bin) { - struct SParser p; - int status; - ptrdiff_t oldtopr = savestack(L, L->top); /* save current top */ - p.z = z; p.bin = bin; - luaZ_initbuffer(L, &p.buff); - status = luaD_rawrunprotected(L, f_parser, &p); - luaZ_freebuffer(L, &p.buff); - if (status != 0) { /* error? */ - StkId oldtop = restorestack(L, oldtopr); - seterrorobj(L, status, oldtop); - } - return status; -} - - diff --git a/stepmania/src/lua-5.0/src/ldo.h b/stepmania/src/lua-5.0/src/ldo.h deleted file mode 100644 index b23ac66d89..0000000000 --- a/stepmania/src/lua-5.0/src/ldo.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -** $Id$ -** Stack and Call structure of Lua -** See Copyright Notice in lua.h -*/ - -#ifndef ldo_h -#define ldo_h - - -#include "lobject.h" -#include "lstate.h" -#include "lzio.h" - - -/* -** macro to control inclusion of some hard tests on stack reallocation -*/ -#ifndef HARDSTACKTESTS -#define condhardstacktests(x) { /* empty */ } -#else -#define condhardstacktests(x) x -#endif - - -#define luaD_checkstack(L,n) \ - if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TObject)) \ - luaD_growstack(L, n); \ - else condhardstacktests(luaD_reallocstack(L, L->stacksize)); - - -#define incr_top(L) {luaD_checkstack(L,1); L->top++;} - -#define savestack(L,p) ((char *)(p) - (char *)L->stack) -#define restorestack(L,n) ((TObject *)((char *)L->stack + (n))) - -#define saveci(L,p) ((char *)(p) - (char *)L->base_ci) -#define restoreci(L,n) ((CallInfo *)((char *)L->base_ci + (n))) - - -/* type of protected functions, to be ran by `runprotected' */ -typedef void (*Pfunc) (lua_State *L, void *ud); - -void luaD_resetprotection (lua_State *L); -int luaD_protectedparser (lua_State *L, ZIO *z, int bin); -void luaD_callhook (lua_State *L, int event, int line); -StkId luaD_precall (lua_State *L, StkId func); -void luaD_call (lua_State *L, StkId func, int nResults); -int luaD_pcall (lua_State *L, Pfunc func, void *u, - ptrdiff_t oldtop, ptrdiff_t ef); -void luaD_poscall (lua_State *L, int wanted, StkId firstResult); -void luaD_reallocCI (lua_State *L, int newsize); -void luaD_reallocstack (lua_State *L, int newsize); -void luaD_growstack (lua_State *L, int n); - -void luaD_throw (lua_State *L, int errcode); -int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); - - -#endif diff --git a/stepmania/src/lua-5.0/src/ldump.c b/stepmania/src/lua-5.0/src/ldump.c deleted file mode 100644 index 87e3077844..0000000000 --- a/stepmania/src/lua-5.0/src/ldump.c +++ /dev/null @@ -1,170 +0,0 @@ -/* -** $Id$ -** save bytecodes -** See Copyright Notice in lua.h -*/ - -#include - -#define ldump_c - -#include "lua.h" - -#include "lobject.h" -#include "lopcodes.h" -#include "lstate.h" -#include "lundump.h" - -#define DumpVector(b,n,size,D) DumpBlock(b,(n)*(size),D) -#define DumpLiteral(s,D) DumpBlock("" s,(sizeof(s))-1,D) - -typedef struct { - lua_State* L; - lua_Chunkwriter write; - void* data; -} DumpState; - -static void DumpBlock(const void* b, size_t size, DumpState* D) -{ - lua_unlock(D->L); - (*D->write)(D->L,b,size,D->data); - lua_lock(D->L); -} - -static void DumpByte(int y, DumpState* D) -{ - char x=(char)y; - DumpBlock(&x,sizeof(x),D); -} - -static void DumpInt(int x, DumpState* D) -{ - DumpBlock(&x,sizeof(x),D); -} - -static void DumpSize(size_t x, DumpState* D) -{ - DumpBlock(&x,sizeof(x),D); -} - -static void DumpNumber(lua_Number x, DumpState* D) -{ - DumpBlock(&x,sizeof(x),D); -} - -static void DumpString(TString* s, DumpState* D) -{ - if (s==NULL || getstr(s)==NULL) - DumpSize(0,D); - else - { - size_t size=s->tsv.len+1; /* include trailing '\0' */ - DumpSize(size,D); - DumpBlock(getstr(s),size,D); - } -} - -static void DumpCode(const Proto* f, DumpState* D) -{ - DumpInt(f->sizecode,D); - DumpVector(f->code,f->sizecode,sizeof(*f->code),D); -} - -static void DumpLocals(const Proto* f, DumpState* D) -{ - int i,n=f->sizelocvars; - DumpInt(n,D); - for (i=0; ilocvars[i].varname,D); - DumpInt(f->locvars[i].startpc,D); - DumpInt(f->locvars[i].endpc,D); - } -} - -static void DumpLines(const Proto* f, DumpState* D) -{ - DumpInt(f->sizelineinfo,D); - DumpVector(f->lineinfo,f->sizelineinfo,sizeof(*f->lineinfo),D); -} - -static void DumpUpvalues(const Proto* f, DumpState* D) -{ - int i,n=f->sizeupvalues; - DumpInt(n,D); - for (i=0; iupvalues[i],D); -} - -static void DumpFunction(const Proto* f, const TString* p, DumpState* D); - -static void DumpConstants(const Proto* f, DumpState* D) -{ - int i,n; - DumpInt(n=f->sizek,D); - for (i=0; ik[i]; - DumpByte(ttype(o),D); - switch (ttype(o)) - { - case LUA_TNUMBER: - DumpNumber(nvalue(o),D); - break; - case LUA_TSTRING: - DumpString(tsvalue(o),D); - break; - case LUA_TNIL: - break; - default: - lua_assert(0); /* cannot happen */ - break; - } - } - DumpInt(n=f->sizep,D); - for (i=0; ip[i],f->source,D); -} - -static void DumpFunction(const Proto* f, const TString* p, DumpState* D) -{ - DumpString((f->source==p) ? NULL : f->source,D); - DumpInt(f->lineDefined,D); - DumpByte(f->nups,D); - DumpByte(f->numparams,D); - DumpByte(f->is_vararg,D); - DumpByte(f->maxstacksize,D); - DumpLines(f,D); - DumpLocals(f,D); - DumpUpvalues(f,D); - DumpConstants(f,D); - DumpCode(f,D); -} - -static void DumpHeader(DumpState* D) -{ - DumpLiteral(LUA_SIGNATURE,D); - DumpByte(VERSION,D); - DumpByte(luaU_endianness(),D); - DumpByte(sizeof(int),D); - DumpByte(sizeof(size_t),D); - DumpByte(sizeof(Instruction),D); - DumpByte(SIZE_OP,D); - DumpByte(SIZE_A,D); - DumpByte(SIZE_B,D); - DumpByte(SIZE_C,D); - DumpByte(sizeof(lua_Number),D); - DumpNumber(TEST_NUMBER,D); -} - -/* -** dump function as precompiled chunk -*/ -void luaU_dump (lua_State* L, const Proto* Main, lua_Chunkwriter w, void* data) -{ - DumpState D; - D.L=L; - D.write=w; - D.data=data; - DumpHeader(&D); - DumpFunction(Main,NULL,&D); -} - diff --git a/stepmania/src/lua-5.0/src/lfunc.c b/stepmania/src/lua-5.0/src/lfunc.c deleted file mode 100644 index a019e64732..0000000000 --- a/stepmania/src/lua-5.0/src/lfunc.c +++ /dev/null @@ -1,135 +0,0 @@ -/* -** $Id$ -** Auxiliary functions to manipulate prototypes and closures -** See Copyright Notice in lua.h -*/ - - -#include - -#define lfunc_c - -#include "lua.h" - -#include "lfunc.h" -#include "lgc.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" - - -#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ - cast(int, sizeof(TObject)*((n)-1))) - -#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ - cast(int, sizeof(TObject *)*((n)-1))) - - - -Closure *luaF_newCclosure (lua_State *L, int nelems) { - Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems))); - luaC_link(L, valtogco(c), LUA_TFUNCTION); - c->c.isC = 1; - c->c.nupvalues = cast(lu_byte, nelems); - return c; -} - - -Closure *luaF_newLclosure (lua_State *L, int nelems, TObject *e) { - Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); - luaC_link(L, valtogco(c), LUA_TFUNCTION); - c->l.isC = 0; - c->l.g = *e; - c->l.nupvalues = cast(lu_byte, nelems); - return c; -} - - -UpVal *luaF_findupval (lua_State *L, StkId level) { - GCObject **pp = &L->openupval; - UpVal *p; - UpVal *v; - while ((p = ngcotouv(*pp)) != NULL && p->v >= level) { - if (p->v == level) return p; - pp = &p->next; - } - v = luaM_new(L, UpVal); /* not found: create a new one */ - v->tt = LUA_TUPVAL; - v->marked = 1; /* open upvalues should not be collected */ - v->v = level; /* current value lives in the stack */ - v->next = *pp; /* chain it in the proper position */ - *pp = valtogco(v); - return v; -} - - -void luaF_close (lua_State *L, StkId level) { - UpVal *p; - while ((p = ngcotouv(L->openupval)) != NULL && p->v >= level) { - setobj(&p->value, p->v); /* save current value (write barrier) */ - p->v = &p->value; /* now current value lives here */ - L->openupval = p->next; /* remove from `open' list */ - luaC_link(L, valtogco(p), LUA_TUPVAL); - } -} - - -Proto *luaF_newproto (lua_State *L) { - Proto *f = luaM_new(L, Proto); - luaC_link(L, valtogco(f), LUA_TPROTO); - f->k = NULL; - f->sizek = 0; - f->p = NULL; - f->sizep = 0; - f->code = NULL; - f->sizecode = 0; - f->sizelineinfo = 0; - f->sizeupvalues = 0; - f->nups = 0; - f->upvalues = NULL; - f->numparams = 0; - f->is_vararg = 0; - f->maxstacksize = 0; - f->lineinfo = NULL; - f->sizelocvars = 0; - f->locvars = NULL; - f->lineDefined = 0; - f->source = NULL; - return f; -} - - -void luaF_freeproto (lua_State *L, Proto *f) { - luaM_freearray(L, f->code, f->sizecode, Instruction); - luaM_freearray(L, f->p, f->sizep, Proto *); - luaM_freearray(L, f->k, f->sizek, TObject); - luaM_freearray(L, f->lineinfo, f->sizelineinfo, int); - luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar); - luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *); - luaM_freelem(L, f); -} - - -void luaF_freeclosure (lua_State *L, Closure *c) { - int size = (c->c.isC) ? sizeCclosure(c->c.nupvalues) : - sizeLclosure(c->l.nupvalues); - luaM_free(L, c, size); -} - - -/* -** Look for n-th local variable at line `line' in function `func'. -** Returns NULL if not found. -*/ -const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { - int i; - for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { - if (pc < f->locvars[i].endpc) { /* is variable active? */ - local_number--; - if (local_number == 0) - return getstr(f->locvars[i].varname); - } - } - return NULL; /* not found */ -} - diff --git a/stepmania/src/lua-5.0/src/lfunc.h b/stepmania/src/lua-5.0/src/lfunc.h deleted file mode 100644 index 703453a909..0000000000 --- a/stepmania/src/lua-5.0/src/lfunc.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -** $Id$ -** Auxiliary functions to manipulate prototypes and closures -** See Copyright Notice in lua.h -*/ - -#ifndef lfunc_h -#define lfunc_h - - -#include "lobject.h" - - -Proto *luaF_newproto (lua_State *L); -Closure *luaF_newCclosure (lua_State *L, int nelems); -Closure *luaF_newLclosure (lua_State *L, int nelems, TObject *e); -UpVal *luaF_findupval (lua_State *L, StkId level); -void luaF_close (lua_State *L, StkId level); -void luaF_freeproto (lua_State *L, Proto *f); -void luaF_freeclosure (lua_State *L, Closure *c); - -const char *luaF_getlocalname (const Proto *func, int local_number, int pc); - - -#endif diff --git a/stepmania/src/lua-5.0/src/lgc.c b/stepmania/src/lua-5.0/src/lgc.c deleted file mode 100644 index 5171aeaba6..0000000000 --- a/stepmania/src/lua-5.0/src/lgc.c +++ /dev/null @@ -1,498 +0,0 @@ -/* -** $Id$ -** Garbage Collector -** See Copyright Notice in lua.h -*/ - -#include - -#define lgc_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lgc.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" - - -typedef struct GCState { - GCObject *tmark; /* list of marked objects to be traversed */ - GCObject *wk; /* list of traversed key-weak tables (to be cleared) */ - GCObject *wv; /* list of traversed value-weak tables */ - GCObject *wkv; /* list of traversed key-value weak tables */ - global_State *g; -} GCState; - - -/* -** some userful bit tricks -*/ -#define setbit(x,b) ((x) |= (1<<(b))) -#define resetbit(x,b) ((x) &= cast(lu_byte, ~(1<<(b)))) -#define testbit(x,b) ((x) & (1<<(b))) - -#define unmark(x) resetbit((x)->gch.marked, 0) -#define ismarked(x) ((x)->gch.marked & ((1<<4)|1)) - -#define stringmark(s) setbit((s)->tsv.marked, 0) - - -#define isfinalized(u) (!testbit((u)->uv.marked, 1)) -#define markfinalized(u) resetbit((u)->uv.marked, 1) - - -#define KEYWEAKBIT 1 -#define VALUEWEAKBIT 2 -#define KEYWEAK (1<gch.marked, 0); /* mark object */ - switch (o->gch.tt) { - case LUA_TUSERDATA: { - markvalue(st, gcotou(o)->uv.metatable); - break; - } - case LUA_TFUNCTION: { - gcotocl(o)->c.gclist = st->tmark; - st->tmark = o; - break; - } - case LUA_TTABLE: { - gcotoh(o)->gclist = st->tmark; - st->tmark = o; - break; - } - case LUA_TTHREAD: { - gcototh(o)->gclist = st->tmark; - st->tmark = o; - break; - } - case LUA_TPROTO: { - gcotop(o)->gclist = st->tmark; - st->tmark = o; - break; - } - default: lua_assert(o->gch.tt == LUA_TSTRING); - } -} - - -static void marktmu (GCState *st) { - GCObject *u; - for (u = st->g->tmudata; u; u = u->gch.next) { - unmark(u); /* may be marked, if left from previous GC */ - reallymarkobject(st, u); - } -} - - -/* move `dead' udata that need finalization to list `tmudata' */ -size_t luaC_separateudata (lua_State *L) { - size_t deadmem = 0; - GCObject **p = &G(L)->rootudata; - GCObject *curr; - GCObject *collected = NULL; /* to collect udata with gc event */ - GCObject **lastcollected = &collected; - while ((curr = *p) != NULL) { - lua_assert(curr->gch.tt == LUA_TUSERDATA); - if (ismarked(curr) || isfinalized(gcotou(curr))) - p = &curr->gch.next; /* don't bother with them */ - - else if (fasttm(L, gcotou(curr)->uv.metatable, TM_GC) == NULL) { - markfinalized(gcotou(curr)); /* don't need finalization */ - p = &curr->gch.next; - } - else { /* must call its gc method */ - deadmem += sizeudata(gcotou(curr)->uv.len); - *p = curr->gch.next; - curr->gch.next = NULL; /* link `curr' at the end of `collected' list */ - *lastcollected = curr; - lastcollected = &curr->gch.next; - } - } - /* insert collected udata with gc event into `tmudata' list */ - *lastcollected = G(L)->tmudata; - G(L)->tmudata = collected; - return deadmem; -} - - -static void removekey (Node *n) { - setnilvalue(gval(n)); /* remove corresponding value ... */ - if (iscollectable(gkey(n))) - setttype(gkey(n), LUA_TNONE); /* dead key; remove it */ -} - - -static void traversetable (GCState *st, Table *h) { - int i; - int weakkey = 0; - int weakvalue = 0; - const TObject *mode; - markvalue(st, h->metatable); - lua_assert(h->lsizenode || h->node == st->g->dummynode); - mode = gfasttm(st->g, h->metatable, TM_MODE); - if (mode && ttisstring(mode)) { /* is there a weak mode? */ - weakkey = (strchr(svalue(mode), 'k') != NULL); - weakvalue = (strchr(svalue(mode), 'v') != NULL); - if (weakkey || weakvalue) { /* is really weak? */ - GCObject **weaklist; - h->marked &= ~(KEYWEAK | VALUEWEAK); /* clear bits */ - h->marked |= cast(lu_byte, (weakkey << KEYWEAKBIT) | - (weakvalue << VALUEWEAKBIT)); - weaklist = (weakkey && weakvalue) ? &st->wkv : - (weakkey) ? &st->wk : - &st->wv; - h->gclist = *weaklist; /* must be cleared after GC, ... */ - *weaklist = valtogco(h); /* ... so put in the appropriate list */ - } - } - if (!weakvalue) { - i = h->sizearray; - while (i--) - markobject(st, &h->array[i]); - } - i = sizenode(h); - while (i--) { - Node *n = gnode(h, i); - if (!ttisnil(gval(n))) { - lua_assert(!ttisnil(gkey(n))); - condmarkobject(st, gkey(n), !weakkey); - condmarkobject(st, gval(n), !weakvalue); - } - } -} - - -static void traverseproto (GCState *st, Proto *f) { - int i; - stringmark(f->source); - for (i=0; isizek; i++) { /* mark literal strings */ - if (ttisstring(f->k+i)) - stringmark(tsvalue(f->k+i)); - } - for (i=0; isizeupvalues; i++) /* mark upvalue names */ - stringmark(f->upvalues[i]); - for (i=0; isizep; i++) /* mark nested protos */ - markvalue(st, f->p[i]); - for (i=0; isizelocvars; i++) /* mark local-variable names */ - stringmark(f->locvars[i].varname); - lua_assert(luaG_checkcode(f)); -} - - - -static void traverseclosure (GCState *st, Closure *cl) { - if (cl->c.isC) { - int i; - for (i=0; ic.nupvalues; i++) /* mark its upvalues */ - markobject(st, &cl->c.upvalue[i]); - } - else { - int i; - lua_assert(cl->l.nupvalues == cl->l.p->nups); - markvalue(st, hvalue(&cl->l.g)); - markvalue(st, cl->l.p); - for (i=0; il.nupvalues; i++) { /* mark its upvalues */ - UpVal *u = cl->l.upvals[i]; - if (!u->marked) { - markobject(st, &u->value); - u->marked = 1; - } - } - } -} - - -static void checkstacksizes (lua_State *L, StkId max) { - int used = L->ci - L->base_ci; /* number of `ci' in use */ - if (4*used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci) - luaD_reallocCI(L, L->size_ci/2); /* still big enough... */ - else condhardstacktests(luaD_reallocCI(L, L->size_ci)); - used = max - L->stack; /* part of stack in use */ - if (4*used < L->stacksize && 2*(BASIC_STACK_SIZE+EXTRA_STACK) < L->stacksize) - luaD_reallocstack(L, L->stacksize/2); /* still big enough... */ - else condhardstacktests(luaD_reallocstack(L, L->stacksize)); -} - - -static void traversestack (GCState *st, lua_State *L1) { - StkId o, lim; - CallInfo *ci; - markobject(st, gt(L1)); - lim = L1->top; - for (ci = L1->base_ci; ci <= L1->ci; ci++) { - lua_assert(ci->top <= L1->stack_last); - lua_assert(ci->state & (CI_C | CI_HASFRAME | CI_SAVEDPC)); - if (lim < ci->top) - lim = ci->top; - } - for (o = L1->stack; o < L1->top; o++) - markobject(st, o); - for (; o <= lim; o++) - setnilvalue(o); - checkstacksizes(L1, lim); -} - - -static void propagatemarks (GCState *st) { - while (st->tmark) { /* traverse marked objects */ - switch (st->tmark->gch.tt) { - case LUA_TTABLE: { - Table *h = gcotoh(st->tmark); - st->tmark = h->gclist; - traversetable(st, h); - break; - } - case LUA_TFUNCTION: { - Closure *cl = gcotocl(st->tmark); - st->tmark = cl->c.gclist; - traverseclosure(st, cl); - break; - } - case LUA_TTHREAD: { - lua_State *th = gcototh(st->tmark); - st->tmark = th->gclist; - traversestack(st, th); - break; - } - case LUA_TPROTO: { - Proto *p = gcotop(st->tmark); - st->tmark = p->gclist; - traverseproto(st, p); - break; - } - default: lua_assert(0); - } - } -} - - -static int valismarked (const TObject *o) { - if (ttisstring(o)) - stringmark(tsvalue(o)); /* strings are `values', so are never weak */ - return !iscollectable(o) || testbit(o->value.gc->gch.marked, 0); -} - - -/* -** clear collected keys from weaktables -*/ -static void cleartablekeys (GCObject *l) { - while (l) { - Table *h = gcotoh(l); - int i = sizenode(h); - lua_assert(h->marked & KEYWEAK); - while (i--) { - Node *n = gnode(h, i); - if (!valismarked(gkey(n))) /* key was collected? */ - removekey(n); /* remove entry from table */ - } - l = h->gclist; - } -} - - -/* -** clear collected values from weaktables -*/ -static void cleartablevalues (GCObject *l) { - while (l) { - Table *h = gcotoh(l); - int i = h->sizearray; - lua_assert(h->marked & VALUEWEAK); - while (i--) { - TObject *o = &h->array[i]; - if (!valismarked(o)) /* value was collected? */ - setnilvalue(o); /* remove value */ - } - i = sizenode(h); - while (i--) { - Node *n = gnode(h, i); - if (!valismarked(gval(n))) /* value was collected? */ - removekey(n); /* remove entry from table */ - } - l = h->gclist; - } -} - - -static void freeobj (lua_State *L, GCObject *o) { - switch (o->gch.tt) { - case LUA_TPROTO: luaF_freeproto(L, gcotop(o)); break; - case LUA_TFUNCTION: luaF_freeclosure(L, gcotocl(o)); break; - case LUA_TUPVAL: luaM_freelem(L, gcotouv(o)); break; - case LUA_TTABLE: luaH_free(L, gcotoh(o)); break; - case LUA_TTHREAD: { - lua_assert(gcototh(o) != L && gcototh(o) != G(L)->mainthread); - luaE_freethread(L, gcototh(o)); - break; - } - case LUA_TSTRING: { - luaM_free(L, o, sizestring(gcotots(o)->tsv.len)); - break; - } - case LUA_TUSERDATA: { - luaM_free(L, o, sizeudata(gcotou(o)->uv.len)); - break; - } - default: lua_assert(0); - } -} - - -static int sweeplist (lua_State *L, GCObject **p, int limit) { - GCObject *curr; - int count = 0; /* number of collected items */ - while ((curr = *p) != NULL) { - if (curr->gch.marked > limit) { - unmark(curr); - p = &curr->gch.next; - } - else { - count++; - *p = curr->gch.next; - freeobj(L, curr); - } - } - return count; -} - - -static void sweepstrings (lua_State *L, int all) { - int i; - for (i=0; istrt.size; i++) { /* for each list */ - G(L)->strt.nuse -= sweeplist(L, &G(L)->strt.hash[i], all); - } -} - - -static void checkSizes (lua_State *L, size_t deadmem) { - /* check size of string hash */ - if (G(L)->strt.nuse < cast(ls_nstr, G(L)->strt.size/4) && - G(L)->strt.size > MINSTRTABSIZE*2) - luaS_resize(L, G(L)->strt.size/2); /* table is too big */ - /* check size of buffer */ - if (luaZ_sizebuffer(&G(L)->buff) > LUA_MINBUFFER*2) { /* buffer too big? */ - size_t newsize = luaZ_sizebuffer(&G(L)->buff) / 2; - luaZ_resizebuffer(L, &G(L)->buff, newsize); - } - G(L)->GCthreshold = 2*G(L)->nblocks - deadmem; /* new threshold */ -} - - -static void do1gcTM (lua_State *L, Udata *udata) { - const TObject *tm = fasttm(L, udata->uv.metatable, TM_GC); - if (tm != NULL) { - setobj2s(L->top, tm); - setuvalue(L->top+1, udata); - L->top += 2; - luaD_call(L, L->top - 2, 0); - } -} - - -void luaC_callGCTM (lua_State *L) { - lu_byte oldah = L->allowhook; - L->allowhook = 0; /* stop debug hooks during GC tag methods */ - L->top++; /* reserve space to keep udata while runs its gc method */ - while (G(L)->tmudata != NULL) { - GCObject *o = G(L)->tmudata; - Udata *udata = gcotou(o); - G(L)->tmudata = udata->uv.next; /* remove udata from `tmudata' */ - udata->uv.next = G(L)->rootudata; /* return it to `root' list */ - G(L)->rootudata = o; - setuvalue(L->top - 1, udata); /* keep a reference to it */ - unmark(o); - markfinalized(udata); - do1gcTM(L, udata); - } - L->top--; - L->allowhook = oldah; /* restore hooks */ -} - - -void luaC_sweep (lua_State *L, int all) { - if (all) all = 256; /* larger than any mark */ - sweeplist(L, &G(L)->rootudata, all); - sweepstrings(L, all); - sweeplist(L, &G(L)->rootgc, all); -} - - -/* mark root set */ -static void markroot (GCState *st, lua_State *L) { - global_State *g = st->g; - markobject(st, defaultmeta(L)); - markobject(st, registry(L)); - traversestack(st, g->mainthread); - if (L != g->mainthread) /* another thread is running? */ - markvalue(st, L); /* cannot collect it */ -} - - -static size_t mark (lua_State *L) { - size_t deadmem; - GCState st; - GCObject *wkv; - st.g = G(L); - st.tmark = NULL; - st.wkv = st.wk = st.wv = NULL; - markroot(&st, L); - propagatemarks(&st); /* mark all reachable objects */ - cleartablevalues(st.wkv); - cleartablevalues(st.wv); - wkv = st.wkv; /* keys must be cleared after preserving udata */ - st.wkv = NULL; - st.wv = NULL; - deadmem = luaC_separateudata(L); /* separate userdata to be preserved */ - marktmu(&st); /* mark `preserved' userdata */ - propagatemarks(&st); /* remark, to propagate `preserveness' */ - cleartablekeys(wkv); - /* `propagatemarks' may resuscitate some weak tables; clear them too */ - cleartablekeys(st.wk); - cleartablevalues(st.wv); - cleartablekeys(st.wkv); - cleartablevalues(st.wkv); - return deadmem; -} - - -void luaC_collectgarbage (lua_State *L) { - size_t deadmem = mark(L); - luaC_sweep(L, 0); - checkSizes(L, deadmem); - luaC_callGCTM(L); -} - - -void luaC_link (lua_State *L, GCObject *o, lu_byte tt) { - o->gch.next = G(L)->rootgc; - G(L)->rootgc = o; - o->gch.marked = 0; - o->gch.tt = tt; -} - diff --git a/stepmania/src/lua-5.0/src/lgc.h b/stepmania/src/lua-5.0/src/lgc.h deleted file mode 100644 index bff16dc891..0000000000 --- a/stepmania/src/lua-5.0/src/lgc.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -** $Id$ -** Garbage Collector -** See Copyright Notice in lua.h -*/ - -#ifndef lgc_h -#define lgc_h - - -#include "lobject.h" - - -#define luaC_checkGC(L) { lua_assert(!(L->ci->state & CI_CALLING)); \ - if (G(L)->nblocks >= G(L)->GCthreshold) luaC_collectgarbage(L); } - - -size_t luaC_separateudata (lua_State *L); -void luaC_callGCTM (lua_State *L); -void luaC_sweep (lua_State *L, int all); -void luaC_collectgarbage (lua_State *L); -void luaC_link (lua_State *L, GCObject *o, lu_byte tt); - - -#endif diff --git a/stepmania/src/lua-5.0/src/lib/LibLuaLib-2003.vcproj b/stepmania/src/lua-5.0/src/lib/LibLuaLib-2003.vcproj deleted file mode 100644 index 6519035759..0000000000 --- a/stepmania/src/lua-5.0/src/lib/LibLuaLib-2003.vcproj +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stepmania/src/lua-5.0/src/lib/LibLuaLib.dsp b/stepmania/src/lua-5.0/src/lib/LibLuaLib.dsp deleted file mode 100644 index efb3cb0dce..0000000000 --- a/stepmania/src/lua-5.0/src/lib/LibLuaLib.dsp +++ /dev/null @@ -1,127 +0,0 @@ -# Microsoft Developer Studio Project File - Name="LibLuaLib" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 60000 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=LibLuaLib - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "LibLuaLib.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "LibLuaLib.mak" CFG="LibLuaLib - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "LibLuaLib - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "LibLuaLib - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "LibLuaLib - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\obj" -# PROP Intermediate_Dir "..\..\obj" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MD /W4 /GX /O2 /I ".." /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x40c /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\lib\LibLuaLib.lib" - -!ELSEIF "$(CFG)" == "LibLuaLib - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\dobj" -# PROP Intermediate_Dir "..\..\dobj" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W4 /Gm /GX /Zi /Od /I ".." /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x40c /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\lib\LibLuaLib.lib" - -!ENDIF - -# Begin Target - -# Name "LibLuaLib - Win32 Release" -# Name "LibLuaLib - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c" -# Begin Source File - -SOURCE=.\lauxlib.c -# End Source File -# Begin Source File - -SOURCE=.\lbaselib.c -# End Source File -# Begin Source File - -SOURCE=.\ldblib.c -# End Source File -# Begin Source File - -SOURCE=.\liolib.c -# ADD CPP /D USE_POPEN=1 /D popen=_popen /D pclose=_pclose -# End Source File -# Begin Source File - -SOURCE=.\lmathlib.c -# End Source File -# Begin Source File - -SOURCE=.\loadlib.c -# End Source File -# Begin Source File - -SOURCE=.\lstrlib.c -# End Source File -# Begin Source File - -SOURCE=.\ltablib.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h" -# End Group -# End Target -# End Project diff --git a/stepmania/src/lua-5.0/src/lib/LibLuaLib.vcproj b/stepmania/src/lua-5.0/src/lib/LibLuaLib.vcproj deleted file mode 100644 index 6519035759..0000000000 --- a/stepmania/src/lua-5.0/src/lib/LibLuaLib.vcproj +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stepmania/src/lua-5.0/src/lib/lauxlib.c b/stepmania/src/lua-5.0/src/lib/lauxlib.c deleted file mode 100644 index fcff8d0bc4..0000000000 --- a/stepmania/src/lua-5.0/src/lib/lauxlib.c +++ /dev/null @@ -1,591 +0,0 @@ -/* -** $Id$ -** Auxiliary functions for building Lua libraries -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include -#include -#include - - -/* This file uses only the official API of Lua. -** Any function declared here could be written as an application function. -*/ - -#define lauxlib_c - -#include "lua.h" - -#include "lauxlib.h" - - -/* number of prereserved references (for internal use) */ -#define RESERVED_REFS 2 - -/* reserved references */ -#define FREELIST_REF 1 /* free list of references */ -#define ARRAYSIZE_REF 2 /* array sizes */ - - -/* convert a stack index to positive */ -#define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \ - lua_gettop(L) + (i) + 1) - - -/* -** {====================================================== -** Error-report functions -** ======================================================= -*/ - - -LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { - lua_Debug ar; - lua_getstack(L, 0, &ar); - lua_getinfo(L, "n", &ar); - if (strcmp(ar.namewhat, "method") == 0) { - narg--; /* do not count `self' */ - if (narg == 0) /* error is in the self argument itself? */ - return luaL_error(L, "calling `%s' on bad self (%s)", ar.name, extramsg); - } - if (ar.name == NULL) - ar.name = "?"; - return luaL_error(L, "bad argument #%d to `%s' (%s)", - narg, ar.name, extramsg); -} - - -LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) { - const char *msg = lua_pushfstring(L, "%s expected, got %s", - tname, lua_typename(L, lua_type(L,narg))); - return luaL_argerror(L, narg, msg); -} - - -static void tag_error (lua_State *L, int narg, int tag) { - luaL_typerror(L, narg, lua_typename(L, tag)); -} - - -LUALIB_API void luaL_where (lua_State *L, int level) { - lua_Debug ar; - if (lua_getstack(L, level, &ar)) { /* check function at level */ - lua_getinfo(L, "Snl", &ar); /* get info about it */ - if (ar.currentline > 0) { /* is there info? */ - lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); - return; - } - } - lua_pushliteral(L, ""); /* else, no information available... */ -} - - -LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { - va_list argp; - va_start(argp, fmt); - luaL_where(L, 1); - lua_pushvfstring(L, fmt, argp); - va_end(argp); - lua_concat(L, 2); - return lua_error(L); -} - -/* }====================================================== */ - - -LUALIB_API int luaL_findstring (const char *name, const char *const list[]) { - int i; - for (i=0; list[i]; i++) - if (strcmp(list[i], name) == 0) - return i; - return -1; /* name not found */ -} - - -LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { - lua_pushstring(L, tname); - lua_rawget(L, LUA_REGISTRYINDEX); /* get registry.name */ - if (!lua_isnil(L, -1)) /* name already in use? */ - return 0; /* leave previous value on top, but return 0 */ - lua_pop(L, 1); - lua_newtable(L); /* create metatable */ - lua_pushstring(L, tname); - lua_pushvalue(L, -2); - lua_rawset(L, LUA_REGISTRYINDEX); /* registry.name = metatable */ - lua_pushvalue(L, -1); - lua_pushstring(L, tname); - lua_rawset(L, LUA_REGISTRYINDEX); /* registry[metatable] = name */ - return 1; -} - - -LUALIB_API void luaL_getmetatable (lua_State *L, const char *tname) { - lua_pushstring(L, tname); - lua_rawget(L, LUA_REGISTRYINDEX); -} - - -LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { - const char *tn; - if (!lua_getmetatable(L, ud)) return NULL; /* no metatable? */ - lua_rawget(L, LUA_REGISTRYINDEX); /* get registry[metatable] */ - tn = lua_tostring(L, -1); - if (tn && (strcmp(tn, tname) == 0)) { - lua_pop(L, 1); - return lua_touserdata(L, ud); - } - else { - lua_pop(L, 1); - return NULL; - } -} - - -LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *mes) { - if (!lua_checkstack(L, space)) - luaL_error(L, "stack overflow (%s)", mes); -} - - -LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { - if (lua_type(L, narg) != t) - tag_error(L, narg, t); -} - - -LUALIB_API void luaL_checkany (lua_State *L, int narg) { - if (lua_type(L, narg) == LUA_TNONE) - luaL_argerror(L, narg, "value expected"); -} - - -LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { - const char *s = lua_tostring(L, narg); - if (!s) tag_error(L, narg, LUA_TSTRING); - if (len) *len = lua_strlen(L, narg); - return s; -} - - -LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, - const char *def, size_t *len) { - if (lua_isnoneornil(L, narg)) { - if (len) - *len = (def ? strlen(def) : 0); - return def; - } - else return luaL_checklstring(L, narg, len); -} - - -LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { - lua_Number d = lua_tonumber(L, narg); - if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ - tag_error(L, narg, LUA_TNUMBER); - return d; -} - - -LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { - if (lua_isnoneornil(L, narg)) return def; - else return luaL_checknumber(L, narg); -} - - -LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { - if (!lua_getmetatable(L, obj)) /* no metatable? */ - return 0; - lua_pushstring(L, event); - lua_rawget(L, -2); - if (lua_isnil(L, -1)) { - lua_pop(L, 2); /* remove metatable and metafield */ - return 0; - } - else { - lua_remove(L, -2); /* remove only metatable */ - return 1; - } -} - - -LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { - obj = abs_index(L, obj); - if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ - return 0; - lua_pushvalue(L, obj); - lua_call(L, 1, 1); - return 1; -} - - -LUALIB_API void luaL_openlib (lua_State *L, const char *libname, - const luaL_reg *l, int nup) { - if (libname) { - lua_pushstring(L, libname); - lua_gettable(L, LUA_GLOBALSINDEX); /* check whether lib already exists */ - if (lua_isnil(L, -1)) { /* no? */ - lua_pop(L, 1); - lua_newtable(L); /* create it */ - lua_pushstring(L, libname); - lua_pushvalue(L, -2); - lua_settable(L, LUA_GLOBALSINDEX); /* register it with given name */ - } - lua_insert(L, -(nup+1)); /* move library table to below upvalues */ - } - for (; l->name; l++) { - int i; - lua_pushstring(L, l->name); - for (i=0; ifunc, nup); - lua_settable(L, -(nup+3)); - } - lua_pop(L, nup); /* remove upvalues */ -} - - - -/* -** {====================================================== -** getn-setn: size for arrays -** ======================================================= -*/ - -static int checkint (lua_State *L, int topop) { - int n = (int)lua_tonumber(L, -1); - if (n == 0 && !lua_isnumber(L, -1)) n = -1; - lua_pop(L, topop); - return n; -} - - -static void getsizes (lua_State *L) { - lua_rawgeti(L, LUA_REGISTRYINDEX, ARRAYSIZE_REF); - if (lua_isnil(L, -1)) { /* no `size' table? */ - lua_pop(L, 1); /* remove nil */ - lua_newtable(L); /* create it */ - lua_pushvalue(L, -1); /* `size' will be its own metatable */ - lua_setmetatable(L, -2); - lua_pushliteral(L, "__mode"); - lua_pushliteral(L, "k"); - lua_rawset(L, -3); /* metatable(N).__mode = "k" */ - lua_pushvalue(L, -1); - lua_rawseti(L, LUA_REGISTRYINDEX, ARRAYSIZE_REF); /* store in register */ - } -} - - -void luaL_setn (lua_State *L, int t, int n) { - t = abs_index(L, t); - lua_pushliteral(L, "n"); - lua_rawget(L, t); - if (checkint(L, 1) >= 0) { /* is there a numeric field `n'? */ - lua_pushliteral(L, "n"); /* use it */ - lua_pushnumber(L, (lua_Number)n); - lua_rawset(L, t); - } - else { /* use `sizes' */ - getsizes(L); - lua_pushvalue(L, t); - lua_pushnumber(L, (lua_Number)n); - lua_rawset(L, -3); /* sizes[t] = n */ - lua_pop(L, 1); /* remove `sizes' */ - } -} - - -int luaL_getn (lua_State *L, int t) { - int n; - t = abs_index(L, t); - lua_pushliteral(L, "n"); /* try t.n */ - lua_rawget(L, t); - if ((n = checkint(L, 1)) >= 0) return n; - getsizes(L); /* else try sizes[t] */ - lua_pushvalue(L, t); - lua_rawget(L, -2); - if ((n = checkint(L, 2)) >= 0) return n; - for (n = 1; ; n++) { /* else must count elements */ - lua_rawgeti(L, t, n); - if (lua_isnil(L, -1)) break; - lua_pop(L, 1); - } - lua_pop(L, 1); - return n - 1; -} - -/* }====================================================== */ - - - -/* -** {====================================================== -** Generic Buffer manipulation -** ======================================================= -*/ - - -#define bufflen(B) ((B)->p - (B)->buffer) -#define bufffree(B) ((size_t)(LUAL_BUFFERSIZE - bufflen(B))) - -#define LIMIT (LUA_MINSTACK/2) - - -static int emptybuffer (luaL_Buffer *B) { - size_t l = bufflen(B); - if (l == 0) return 0; /* put nothing on stack */ - else { - lua_pushlstring(B->L, B->buffer, l); - B->p = B->buffer; - B->lvl++; - return 1; - } -} - - -static void adjuststack (luaL_Buffer *B) { - if (B->lvl > 1) { - lua_State *L = B->L; - int toget = 1; /* number of levels to concat */ - size_t toplen = lua_strlen(L, -1); - do { - size_t l = lua_strlen(L, -(toget+1)); - if (B->lvl - toget + 1 >= LIMIT || toplen > l) { - toplen += l; - toget++; - } - else break; - } while (toget < B->lvl); - lua_concat(L, toget); - B->lvl = B->lvl - toget + 1; - } -} - - -LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B) { - if (emptybuffer(B)) - adjuststack(B); - return B->buffer; -} - - -LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { - while (l--) - luaL_putchar(B, *s++); -} - - -LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { - luaL_addlstring(B, s, strlen(s)); -} - - -LUALIB_API void luaL_pushresult (luaL_Buffer *B) { - emptybuffer(B); - lua_concat(B->L, B->lvl); - B->lvl = 1; -} - - -LUALIB_API void luaL_addvalue (luaL_Buffer *B) { - lua_State *L = B->L; - size_t vl = lua_strlen(L, -1); - if (vl <= bufffree(B)) { /* fit into buffer? */ - memcpy(B->p, lua_tostring(L, -1), vl); /* put it there */ - B->p += vl; - lua_pop(L, 1); /* remove from stack */ - } - else { - if (emptybuffer(B)) - lua_insert(L, -2); /* put buffer before new value */ - B->lvl++; /* add new value into B stack */ - adjuststack(B); - } -} - - -LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { - B->L = L; - B->p = B->buffer; - B->lvl = 0; -} - -/* }====================================================== */ - - -LUALIB_API int luaL_ref (lua_State *L, int t) { - int ref; - t = abs_index(L, t); - if (lua_isnil(L, -1)) { - lua_pop(L, 1); /* remove from stack */ - return LUA_REFNIL; /* `nil' has a unique fixed reference */ - } - lua_rawgeti(L, t, FREELIST_REF); /* get first free element */ - ref = (int)lua_tonumber(L, -1); /* ref = t[FREELIST_REF] */ - lua_pop(L, 1); /* remove it from stack */ - if (ref != 0) { /* any free element? */ - lua_rawgeti(L, t, ref); /* remove it from list */ - lua_rawseti(L, t, FREELIST_REF); /* (t[FREELIST_REF] = t[ref]) */ - } - else { /* no free elements */ - ref = luaL_getn(L, t); - if (ref < RESERVED_REFS) - ref = RESERVED_REFS; /* skip reserved references */ - ref++; /* create new reference */ - luaL_setn(L, t, ref); - } - lua_rawseti(L, t, ref); - return ref; -} - - -LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { - if (ref >= 0) { - t = abs_index(L, t); - lua_rawgeti(L, t, FREELIST_REF); - lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ - lua_pushnumber(L, (lua_Number)ref); - lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ - } -} - - - -/* -** {====================================================== -** Load functions -** ======================================================= -*/ - -typedef struct LoadF { - FILE *f; - char buff[LUAL_BUFFERSIZE]; -} LoadF; - - -static const char *getF (lua_State *L, void *ud, size_t *size) { - LoadF *lf = (LoadF *)ud; - (void)L; - if (feof(lf->f)) return NULL; - *size = fread(lf->buff, 1, LUAL_BUFFERSIZE, lf->f); - return (*size > 0) ? lf->buff : NULL; -} - - -static int errfile (lua_State *L, int fnameindex) { - const char *filename = lua_tostring(L, fnameindex) + 1; - lua_pushfstring(L, "cannot read %s: %s", filename, strerror(errno)); - lua_remove(L, fnameindex); - return LUA_ERRFILE; -} - - -LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { - LoadF lf; - int status, readstatus; - int c; - int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ - if (filename == NULL) { - lua_pushliteral(L, "=stdin"); - lf.f = stdin; - } - else { - lua_pushfstring(L, "@%s", filename); - lf.f = fopen(filename, "r"); - } - if (lf.f == NULL) return errfile(L, fnameindex); /* unable to open file */ - c = ungetc(getc(lf.f), lf.f); - if (!(isspace(c) || isprint(c)) && lf.f != stdin) { /* binary file? */ - fclose(lf.f); - lf.f = fopen(filename, "rb"); /* reopen in binary mode */ - if (lf.f == NULL) return errfile(L, fnameindex); /* unable to reopen file */ - } - status = lua_load(L, getF, &lf, lua_tostring(L, -1)); - readstatus = ferror(lf.f); - if (lf.f != stdin) fclose(lf.f); /* close file (even in case of errors) */ - if (readstatus) { - lua_settop(L, fnameindex); /* ignore results from `lua_load' */ - return errfile(L, fnameindex); - } - lua_remove(L, fnameindex); - return status; -} - - -typedef struct LoadS { - const char *s; - size_t size; -} LoadS; - - -static const char *getS (lua_State *L, void *ud, size_t *size) { - LoadS *ls = (LoadS *)ud; - (void)L; - if (ls->size == 0) return NULL; - *size = ls->size; - ls->size = 0; - return ls->s; -} - - -LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size, - const char *name) { - LoadS ls; - ls.s = buff; - ls.size = size; - return lua_load(L, getS, &ls, name); -} - -/* }====================================================== */ - - -/* -** {====================================================== -** compatibility code -** ======================================================= -*/ - - -static void callalert (lua_State *L, int status) { - if (status != 0) { - lua_getglobal(L, "_ALERT"); - if (lua_isfunction(L, -1)) { - lua_insert(L, -2); - lua_call(L, 1, 0); - } - else { /* no _ALERT function; print it on stderr */ - fprintf(stderr, "%s\n", lua_tostring(L, -2)); - lua_pop(L, 2); /* remove error message and _ALERT */ - } - } -} - - -static int aux_do (lua_State *L, int status) { - if (status == 0) { /* parse OK? */ - status = lua_pcall(L, 0, LUA_MULTRET, 0); /* call main */ - } - callalert(L, status); - return status; -} - - -LUALIB_API int lua_dofile (lua_State *L, const char *filename) { - return aux_do(L, luaL_loadfile(L, filename)); -} - - -LUALIB_API int lua_dobuffer (lua_State *L, const char *buff, size_t size, - const char *name) { - return aux_do(L, luaL_loadbuffer(L, buff, size, name)); -} - - -LUALIB_API int lua_dostring (lua_State *L, const char *str) { - return lua_dobuffer(L, str, strlen(str), str); -} - -/* }====================================================== */ diff --git a/stepmania/src/lua-5.0/src/lib/lbaselib.c b/stepmania/src/lua-5.0/src/lib/lbaselib.c deleted file mode 100644 index b9d8d2a223..0000000000 --- a/stepmania/src/lua-5.0/src/lib/lbaselib.c +++ /dev/null @@ -1,677 +0,0 @@ -/* -** $Id$ -** Basic library -** See Copyright Notice in lua.h -*/ - - - -#include -#include -#include -#include - -#define lbaselib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - - - -/* -** If your system does not support `stdout', you can just remove this function. -** If you need, you can define your own `print' function, following this -** model but changing `fputs' to put the strings at a proper place -** (a console window or a log file, for instance). -*/ -static int luaB_print (lua_State *L) { - int n = lua_gettop(L); /* number of arguments */ - int i; - lua_getglobal(L, "tostring"); - for (i=1; i<=n; i++) { - const char *s; - lua_pushvalue(L, -1); /* function to be called */ - lua_pushvalue(L, i); /* value to print */ - lua_call(L, 1, 1); - s = lua_tostring(L, -1); /* get result */ - if (s == NULL) - return luaL_error(L, "`tostring' must return a string to `print'"); - if (i>1) fputs("\t", stdout); - fputs(s, stdout); - lua_pop(L, 1); /* pop result */ - } - fputs("\n", stdout); - return 0; -} - - -static int luaB_tonumber (lua_State *L) { - int base = luaL_optint(L, 2, 10); - if (base == 10) { /* standard conversion */ - luaL_checkany(L, 1); - if (lua_isnumber(L, 1)) { - lua_pushnumber(L, lua_tonumber(L, 1)); - return 1; - } - } - else { - const char *s1 = luaL_checkstring(L, 1); - char *s2; - unsigned long n; - luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); - n = strtoul(s1, &s2, base); - if (s1 != s2) { /* at least one valid digit? */ - while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */ - if (*s2 == '\0') { /* no invalid trailing characters? */ - lua_pushnumber(L, (lua_Number)n); - return 1; - } - } - } - lua_pushnil(L); /* else not a number */ - return 1; -} - - -static int luaB_error (lua_State *L) { - int level = luaL_optint(L, 2, 1); - luaL_checkany(L, 1); - if (!lua_isstring(L, 1) || level == 0) - lua_pushvalue(L, 1); /* propagate error message without changes */ - else { /* add extra information */ - luaL_where(L, level); - lua_pushvalue(L, 1); - lua_concat(L, 2); - } - return lua_error(L); -} - - -static int luaB_getmetatable (lua_State *L) { - luaL_checkany(L, 1); - if (!lua_getmetatable(L, 1)) { - lua_pushnil(L); - return 1; /* no metatable */ - } - luaL_getmetafield(L, 1, "__metatable"); - return 1; /* returns either __metatable field (if present) or metatable */ -} - - -static int luaB_setmetatable (lua_State *L) { - int t = lua_type(L, 2); - luaL_checktype(L, 1, LUA_TTABLE); - luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, - "nil or table expected"); - if (luaL_getmetafield(L, 1, "__metatable")) - luaL_error(L, "cannot change a protected metatable"); - lua_settop(L, 2); - lua_setmetatable(L, 1); - return 1; -} - - -static void getfunc (lua_State *L) { - if (lua_isfunction(L, 1)) lua_pushvalue(L, 1); - else { - lua_Debug ar; - int level = luaL_optint(L, 1, 1); - luaL_argcheck(L, level >= 0, 1, "level must be non-negative"); - if (lua_getstack(L, level, &ar) == 0) - luaL_argerror(L, 1, "invalid level"); - lua_getinfo(L, "f", &ar); - if (lua_isnil(L, -1)) - luaL_error(L, "no function environment for tail call at level %d", - level); - } -} - - -static int aux_getfenv (lua_State *L) { - lua_getfenv(L, -1); - lua_pushliteral(L, "__fenv"); - lua_rawget(L, -2); - return !lua_isnil(L, -1); -} - - -static int luaB_getfenv (lua_State *L) { - getfunc(L); - if (!aux_getfenv(L)) /* __fenv not defined? */ - lua_pop(L, 1); /* remove it, to return real environment */ - return 1; -} - - -static int luaB_setfenv (lua_State *L) { - luaL_checktype(L, 2, LUA_TTABLE); - getfunc(L); - if (aux_getfenv(L)) /* __fenv defined? */ - luaL_error(L, "`setfenv' cannot change a protected environment"); - else - lua_pop(L, 2); /* remove __fenv and real environment table */ - lua_pushvalue(L, 2); - if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) - lua_replace(L, LUA_GLOBALSINDEX); - else if (lua_setfenv(L, -2) == 0) - luaL_error(L, "`setfenv' cannot change environment of given function"); - return 0; -} - - -static int luaB_rawequal (lua_State *L) { - luaL_checkany(L, 1); - luaL_checkany(L, 2); - lua_pushboolean(L, lua_rawequal(L, 1, 2)); - return 1; -} - - -static int luaB_rawget (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - luaL_checkany(L, 2); - lua_rawget(L, 1); - return 1; -} - -static int luaB_rawset (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - luaL_checkany(L, 2); - luaL_checkany(L, 3); - lua_rawset(L, 1); - return 1; -} - - -static int luaB_gcinfo (lua_State *L) { - lua_pushnumber(L, (lua_Number)lua_getgccount(L)); - lua_pushnumber(L, (lua_Number)lua_getgcthreshold(L)); - return 2; -} - - -static int luaB_collectgarbage (lua_State *L) { - lua_setgcthreshold(L, luaL_optint(L, 1, 0)); - return 0; -} - - -static int luaB_type (lua_State *L) { - luaL_checkany(L, 1); - lua_pushstring(L, lua_typename(L, lua_type(L, 1))); - return 1; -} - - -static int luaB_next (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - lua_settop(L, 2); /* create a 2nd argument if there isn't one */ - if (lua_next(L, 1)) - return 2; - else { - lua_pushnil(L); - return 1; - } -} - - -static int luaB_pairs (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - lua_pushliteral(L, "next"); - lua_rawget(L, LUA_GLOBALSINDEX); /* return generator, */ - lua_pushvalue(L, 1); /* state, */ - lua_pushnil(L); /* and initial value */ - return 3; -} - - -static int luaB_ipairs (lua_State *L) { - lua_Number i = lua_tonumber(L, 2); - luaL_checktype(L, 1, LUA_TTABLE); - if (i == 0 && lua_isnone(L, 2)) { /* `for' start? */ - lua_pushliteral(L, "ipairs"); - lua_rawget(L, LUA_GLOBALSINDEX); /* return generator, */ - lua_pushvalue(L, 1); /* state, */ - lua_pushnumber(L, 0); /* and initial value */ - return 3; - } - else { /* `for' step */ - i++; /* next value */ - lua_pushnumber(L, i); - lua_rawgeti(L, 1, (int)i); - return (lua_isnil(L, -1)) ? 0 : 2; - } -} - - -static int load_aux (lua_State *L, int status) { - if (status == 0) /* OK? */ - return 1; - else { - lua_pushnil(L); - lua_insert(L, -2); /* put before error message */ - return 2; /* return nil plus error message */ - } -} - - -static int luaB_loadstring (lua_State *L) { - size_t l; - const char *s = luaL_checklstring(L, 1, &l); - const char *chunkname = luaL_optstring(L, 2, s); - return load_aux(L, luaL_loadbuffer(L, s, l, chunkname)); -} - - -static int luaB_loadfile (lua_State *L) { - const char *fname = luaL_optstring(L, 1, NULL); - return load_aux(L, luaL_loadfile(L, fname)); -} - - -static int luaB_dofile (lua_State *L) { - const char *fname = luaL_optstring(L, 1, NULL); - int n = lua_gettop(L); - int status = luaL_loadfile(L, fname); - if (status != 0) lua_error(L); - lua_call(L, 0, LUA_MULTRET); - return lua_gettop(L) - n; -} - - -static int luaB_assert (lua_State *L) { - luaL_checkany(L, 1); - if (!lua_toboolean(L, 1)) - return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); - lua_settop(L, 1); - return 1; -} - - -static int luaB_unpack (lua_State *L) { - int n, i; - luaL_checktype(L, 1, LUA_TTABLE); - n = luaL_getn(L, 1); - luaL_checkstack(L, n, "table too big to unpack"); - for (i=1; i<=n; i++) /* push arg[1...n] */ - lua_rawgeti(L, 1, i); - return n; -} - - -static int luaB_pcall (lua_State *L) { - int status; - luaL_checkany(L, 1); - status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0); - lua_pushboolean(L, (status == 0)); - lua_insert(L, 1); - return lua_gettop(L); /* return status + all results */ -} - - -static int luaB_xpcall (lua_State *L) { - int status; - luaL_checkany(L, 2); - lua_settop(L, 2); - lua_insert(L, 1); /* put error function under function to be called */ - status = lua_pcall(L, 0, LUA_MULTRET, 1); - lua_pushboolean(L, (status == 0)); - lua_replace(L, 1); - return lua_gettop(L); /* return status + all results */ -} - - -static int luaB_tostring (lua_State *L) { - char buff[128]; - luaL_checkany(L, 1); - if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ - return 1; /* use its value */ - switch (lua_type(L, 1)) { - case LUA_TNUMBER: - lua_pushstring(L, lua_tostring(L, 1)); - return 1; - case LUA_TSTRING: - lua_pushvalue(L, 1); - return 1; - case LUA_TBOOLEAN: - lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); - return 1; - case LUA_TTABLE: - sprintf(buff, "table: %p", lua_topointer(L, 1)); - break; - case LUA_TFUNCTION: - sprintf(buff, "function: %p", lua_topointer(L, 1)); - break; - case LUA_TUSERDATA: - case LUA_TLIGHTUSERDATA: - sprintf(buff, "userdata: %p", lua_touserdata(L, 1)); - break; - case LUA_TTHREAD: - sprintf(buff, "thread: %p", (void *)lua_tothread(L, 1)); - break; - case LUA_TNIL: - lua_pushliteral(L, "nil"); - return 1; - } - lua_pushstring(L, buff); - return 1; -} - - -static int luaB_newproxy (lua_State *L) { - lua_settop(L, 1); - lua_newuserdata(L, 0); /* create proxy */ - if (lua_toboolean(L, 1) == 0) - return 1; /* no metatable */ - else if (lua_isboolean(L, 1)) { - lua_newtable(L); /* create a new metatable `m' ... */ - lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ - lua_pushboolean(L, 1); - lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ - } - else { - int validproxy = 0; /* to check if weaktable[metatable(u)] == true */ - if (lua_getmetatable(L, 1)) { - lua_rawget(L, lua_upvalueindex(1)); - validproxy = lua_toboolean(L, -1); - lua_pop(L, 1); /* remove value */ - } - luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); - lua_getmetatable(L, 1); /* metatable is valid; get it */ - } - lua_setmetatable(L, 2); - return 1; -} - - -/* -** {====================================================== -** `require' function -** ======================================================= -*/ - - -/* name of global that holds table with loaded packages */ -#define REQTAB "_LOADED" - -/* name of global that holds the search path for packages */ -#define LUA_PATH "LUA_PATH" - -#ifndef LUA_PATH_SEP -#define LUA_PATH_SEP ';' -#endif - -#ifndef LUA_PATH_MARK -#define LUA_PATH_MARK '?' -#endif - -#ifndef LUA_PATH_DEFAULT -#define LUA_PATH_DEFAULT "?;?.lua" -#endif - - -static const char *getpath (lua_State *L) { - const char *path; - lua_getglobal(L, LUA_PATH); /* try global variable */ - path = lua_tostring(L, -1); - lua_pop(L, 1); - if (path) return path; -#ifndef _XBOX - path = getenv(LUA_PATH); /* else try environment variable */ - if (path) return path; -#endif - return LUA_PATH_DEFAULT; /* else use default */ -} - - -static const char *pushnextpath (lua_State *L, const char *path) { - const char *l; - if (*path == '\0') return NULL; /* no more paths */ - if (*path == LUA_PATH_SEP) path++; /* skip separator */ - l = strchr(path, LUA_PATH_SEP); /* find next separator */ - if (l == NULL) l = path+strlen(path); - lua_pushlstring(L, path, l - path); /* directory name */ - return l; -} - - -static void pushcomposename (lua_State *L) { - const char *path = lua_tostring(L, -1); - const char *wild; - int n = 1; - while ((wild = strchr(path, LUA_PATH_MARK)) != NULL) { - /* is there stack space for prefix, name, and eventual last sufix? */ - luaL_checkstack(L, 3, "too many marks in a path component"); - lua_pushlstring(L, path, wild - path); /* push prefix */ - lua_pushvalue(L, 1); /* push package name (in place of MARK) */ - path = wild + 1; /* continue after MARK */ - n += 2; - } - lua_pushstring(L, path); /* push last sufix (`n' already includes this) */ - lua_concat(L, n); -} - - -static int luaB_require (lua_State *L) { - const char *path; - int status = LUA_ERRFILE; /* not found (yet) */ - luaL_checkstring(L, 1); - lua_settop(L, 1); - lua_getglobal(L, REQTAB); - if (!lua_istable(L, 2)) return luaL_error(L, "`" REQTAB "' is not a table"); - path = getpath(L); - lua_pushvalue(L, 1); /* check package's name in book-keeping table */ - lua_rawget(L, 2); - if (lua_toboolean(L, -1)) /* is it there? */ - return 1; /* package is already loaded; return its result */ - else { /* must load it */ - while (status == LUA_ERRFILE) { - lua_settop(L, 3); /* reset stack position */ - if ((path = pushnextpath(L, path)) == NULL) break; - pushcomposename(L); - status = luaL_loadfile(L, lua_tostring(L, -1)); /* try to load it */ - } - } - switch (status) { - case 0: { - lua_getglobal(L, "_REQUIREDNAME"); /* save previous name */ - lua_insert(L, -2); /* put it below function */ - lua_pushvalue(L, 1); - lua_setglobal(L, "_REQUIREDNAME"); /* set new name */ - lua_call(L, 0, 1); /* run loaded module */ - lua_insert(L, -2); /* put result below previous name */ - lua_setglobal(L, "_REQUIREDNAME"); /* reset to previous name */ - if (lua_isnil(L, -1)) { /* no/nil return? */ - lua_pushboolean(L, 1); - lua_replace(L, -2); /* replace to true */ - } - lua_pushvalue(L, 1); - lua_pushvalue(L, -2); - lua_rawset(L, 2); /* mark it as loaded */ - return 1; /* return value */ - } - case LUA_ERRFILE: { /* file not found */ - return luaL_error(L, "could not load package `%s' from path `%s'", - lua_tostring(L, 1), getpath(L)); - } - default: { - return luaL_error(L, "error loading package `%s' (%s)", - lua_tostring(L, 1), lua_tostring(L, -1)); - } - } -} - -/* }====================================================== */ - - -static const luaL_reg base_funcs[] = { - {"error", luaB_error}, - {"getmetatable", luaB_getmetatable}, - {"setmetatable", luaB_setmetatable}, - {"getfenv", luaB_getfenv}, - {"setfenv", luaB_setfenv}, - {"next", luaB_next}, - {"ipairs", luaB_ipairs}, - {"pairs", luaB_pairs}, - {"print", luaB_print}, - {"tonumber", luaB_tonumber}, - {"tostring", luaB_tostring}, - {"type", luaB_type}, - {"assert", luaB_assert}, - {"unpack", luaB_unpack}, - {"rawequal", luaB_rawequal}, - {"rawget", luaB_rawget}, - {"rawset", luaB_rawset}, - {"pcall", luaB_pcall}, - {"xpcall", luaB_xpcall}, - {"collectgarbage", luaB_collectgarbage}, - {"gcinfo", luaB_gcinfo}, - {"loadfile", luaB_loadfile}, - {"dofile", luaB_dofile}, - {"loadstring", luaB_loadstring}, - {"require", luaB_require}, - {NULL, NULL} -}; - - -/* -** {====================================================== -** Coroutine library -** ======================================================= -*/ - -static int auxresume (lua_State *L, lua_State *co, int narg) { - int status; - if (!lua_checkstack(co, narg)) - luaL_error(L, "too many arguments to resume"); - lua_xmove(L, co, narg); - status = lua_resume(co, narg); - if (status == 0) { - int nres = lua_gettop(co); - if (!lua_checkstack(L, nres)) - luaL_error(L, "too many results to resume"); - lua_xmove(co, L, nres); /* move yielded values */ - return nres; - } - else { - lua_xmove(co, L, 1); /* move error message */ - return -1; /* error flag */ - } -} - - -static int luaB_coresume (lua_State *L) { - lua_State *co = lua_tothread(L, 1); - int r; - luaL_argcheck(L, co, 1, "coroutine expected"); - r = auxresume(L, co, lua_gettop(L) - 1); - if (r < 0) { - lua_pushboolean(L, 0); - lua_insert(L, -2); - return 2; /* return false + error message */ - } - else { - lua_pushboolean(L, 1); - lua_insert(L, -(r + 1)); - return r + 1; /* return true + `resume' returns */ - } -} - - -static int luaB_auxwrap (lua_State *L) { - lua_State *co = lua_tothread(L, lua_upvalueindex(1)); - int r = auxresume(L, co, lua_gettop(L)); - if (r < 0) { - if (lua_isstring(L, -1)) { /* error object is a string? */ - luaL_where(L, 1); /* add extra info */ - lua_insert(L, -2); - lua_concat(L, 2); - } - lua_error(L); /* propagate error */ - } - return r; -} - - -static int luaB_cocreate (lua_State *L) { - lua_State *NL = lua_newthread(L); - luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, - "Lua function expected"); - lua_pushvalue(L, 1); /* move function to top */ - lua_xmove(L, NL, 1); /* move function from L to NL */ - return 1; -} - - -static int luaB_cowrap (lua_State *L) { - luaB_cocreate(L); - lua_pushcclosure(L, luaB_auxwrap, 1); - return 1; -} - - -static int luaB_yield (lua_State *L) { - return lua_yield(L, lua_gettop(L)); -} - - -static int luaB_costatus (lua_State *L) { - lua_State *co = lua_tothread(L, 1); - luaL_argcheck(L, co, 1, "coroutine expected"); - if (L == co) lua_pushliteral(L, "running"); - else { - lua_Debug ar; - if (lua_getstack(co, 0, &ar) == 0 && lua_gettop(co) == 0) - lua_pushliteral(L, "dead"); - else - lua_pushliteral(L, "suspended"); - } - return 1; -} - - -static const luaL_reg co_funcs[] = { - {"create", luaB_cocreate}, - {"wrap", luaB_cowrap}, - {"resume", luaB_coresume}, - {"yield", luaB_yield}, - {"status", luaB_costatus}, - {NULL, NULL} -}; - -/* }====================================================== */ - - - -static void base_open (lua_State *L) { - lua_pushliteral(L, "_G"); - lua_pushvalue(L, LUA_GLOBALSINDEX); - luaL_openlib(L, NULL, base_funcs, 0); /* open lib into global table */ - lua_pushliteral(L, "_VERSION"); - lua_pushliteral(L, LUA_VERSION); - lua_rawset(L, -3); /* set global _VERSION */ - /* `newproxy' needs a weaktable as upvalue */ - lua_pushliteral(L, "newproxy"); - lua_newtable(L); /* new table `w' */ - lua_pushvalue(L, -1); /* `w' will be its own metatable */ - lua_setmetatable(L, -2); - lua_pushliteral(L, "__mode"); - lua_pushliteral(L, "k"); - lua_rawset(L, -3); /* metatable(w).__mode = "k" */ - lua_pushcclosure(L, luaB_newproxy, 1); - lua_rawset(L, -3); /* set global `newproxy' */ - lua_rawset(L, -1); /* set global _G */ -} - - -LUALIB_API int luaopen_base (lua_State *L) { - base_open(L); - luaL_openlib(L, LUA_COLIBNAME, co_funcs, 0); - lua_newtable(L); - lua_setglobal(L, REQTAB); - return 0; -} - diff --git a/stepmania/src/lua-5.0/src/lib/ldblib.c b/stepmania/src/lua-5.0/src/lib/ldblib.c deleted file mode 100644 index fd461660f3..0000000000 --- a/stepmania/src/lua-5.0/src/lib/ldblib.c +++ /dev/null @@ -1,299 +0,0 @@ -/* -** $Id$ -** Interface from Lua to its debug API -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include - -#define ldblib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - - -static void settabss (lua_State *L, const char *i, const char *v) { - lua_pushstring(L, i); - lua_pushstring(L, v); - lua_rawset(L, -3); -} - - -static void settabsi (lua_State *L, const char *i, int v) { - lua_pushstring(L, i); - lua_pushnumber(L, (lua_Number)v); - lua_rawset(L, -3); -} - - -static int getinfo (lua_State *L) { - lua_Debug ar; - const char *options = luaL_optstring(L, 2, "flnSu"); - if (lua_isnumber(L, 1)) { - if (!lua_getstack(L, (int)(lua_tonumber(L, 1)), &ar)) { - lua_pushnil(L); /* level out of range */ - return 1; - } - } - else if (lua_isfunction(L, 1)) { - lua_pushfstring(L, ">%s", options); - options = lua_tostring(L, -1); - lua_pushvalue(L, 1); - } - else - return luaL_argerror(L, 1, "function or level expected"); - if (!lua_getinfo(L, options, &ar)) - return luaL_argerror(L, 2, "invalid option"); - lua_newtable(L); - for (; *options; options++) { - switch (*options) { - case 'S': - settabss(L, "source", ar.source); - settabss(L, "short_src", ar.short_src); - settabsi(L, "linedefined", ar.linedefined); - settabss(L, "what", ar.what); - break; - case 'l': - settabsi(L, "currentline", ar.currentline); - break; - case 'u': - settabsi(L, "nups", ar.nups); - break; - case 'n': - settabss(L, "name", ar.name); - settabss(L, "namewhat", ar.namewhat); - break; - case 'f': - lua_pushliteral(L, "func"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - break; - } - } - return 1; /* return table */ -} - - -static int getlocal (lua_State *L) { - lua_Debug ar; - const char *name; - if (!lua_getstack(L, luaL_checkint(L, 1), &ar)) /* level out of range? */ - return luaL_argerror(L, 1, "level out of range"); - name = lua_getlocal(L, &ar, luaL_checkint(L, 2)); - if (name) { - lua_pushstring(L, name); - lua_pushvalue(L, -2); - return 2; - } - else { - lua_pushnil(L); - return 1; - } -} - - -static int setlocal (lua_State *L) { - lua_Debug ar; - if (!lua_getstack(L, luaL_checkint(L, 1), &ar)) /* level out of range? */ - return luaL_argerror(L, 1, "level out of range"); - luaL_checkany(L, 3); - lua_pushstring(L, lua_setlocal(L, &ar, luaL_checkint(L, 2))); - return 1; -} - - -static int auxupvalue (lua_State *L, int get) { - const char *name; - int n = luaL_checkint(L, 2); - luaL_checktype(L, 1, LUA_TFUNCTION); - if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */ - name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); - if (name == NULL) return 0; - lua_pushstring(L, name); - lua_insert(L, -(get+1)); - return get + 1; -} - - -static int getupvalue (lua_State *L) { - return auxupvalue(L, 1); -} - - -static int setupvalue (lua_State *L) { - luaL_checkany(L, 3); - return auxupvalue(L, 0); -} - - - -static const char KEY_HOOK = 'h'; - - -static void hookf (lua_State *L, lua_Debug *ar) { - static const char *const hooknames[] = - {"call", "return", "line", "count", "tail return"}; - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_rawget(L, LUA_REGISTRYINDEX); - if (lua_isfunction(L, -1)) { - lua_pushstring(L, hooknames[(int)ar->event]); - if (ar->currentline >= 0) - lua_pushnumber(L, (lua_Number)ar->currentline); - else lua_pushnil(L); - lua_assert(lua_getinfo(L, "lS", ar)); - lua_call(L, 2, 0); - } - else - lua_pop(L, 1); /* pop result from gettable */ -} - - -static int makemask (const char *smask, int count) { - int mask = 0; - if (strchr(smask, 'c')) mask |= LUA_MASKCALL; - if (strchr(smask, 'r')) mask |= LUA_MASKRET; - if (strchr(smask, 'l')) mask |= LUA_MASKLINE; - if (count > 0) mask |= LUA_MASKCOUNT; - return mask; -} - - -static char *unmakemask (int mask, char *smask) { - int i = 0; - if (mask & LUA_MASKCALL) smask[i++] = 'c'; - if (mask & LUA_MASKRET) smask[i++] = 'r'; - if (mask & LUA_MASKLINE) smask[i++] = 'l'; - smask[i] = '\0'; - return smask; -} - - -static int sethook (lua_State *L) { - if (lua_isnoneornil(L, 1)) { - lua_settop(L, 1); - lua_sethook(L, NULL, 0, 0); /* turn off hooks */ - } - else { - const char *smask = luaL_checkstring(L, 2); - int count = luaL_optint(L, 3, 0); - luaL_checktype(L, 1, LUA_TFUNCTION); - lua_sethook(L, hookf, makemask(smask, count), count); - } - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_pushvalue(L, 1); - lua_rawset(L, LUA_REGISTRYINDEX); /* set new hook */ - return 0; -} - - -static int gethook (lua_State *L) { - char buff[5]; - int mask = lua_gethookmask(L); - lua_Hook hook = lua_gethook(L); - if (hook != NULL && hook != hookf) /* external hook? */ - lua_pushliteral(L, "external hook"); - else { - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_rawget(L, LUA_REGISTRYINDEX); /* get hook */ - } - lua_pushstring(L, unmakemask(mask, buff)); - lua_pushnumber(L, (lua_Number)lua_gethookcount(L)); - return 3; -} - - -static int debug (lua_State *L) { - for (;;) { - char buffer[250]; - fputs("lua_debug> ", stderr); - if (fgets(buffer, sizeof(buffer), stdin) == 0 || - strcmp(buffer, "cont\n") == 0) - return 0; - lua_dostring(L, buffer); - lua_settop(L, 0); /* remove eventual returns */ - } -} - - -#define LEVELS1 12 /* size of the first part of the stack */ -#define LEVELS2 10 /* size of the second part of the stack */ - -static int errorfb (lua_State *L) { - int level = 1; /* skip level 0 (it's this function) */ - int firstpart = 1; /* still before eventual `...' */ - lua_Debug ar; - if (lua_gettop(L) == 0) - lua_pushliteral(L, ""); - else if (!lua_isstring(L, 1)) return 1; /* no string message */ - else lua_pushliteral(L, "\n"); - lua_pushliteral(L, "stack traceback:"); - while (lua_getstack(L, level++, &ar)) { - if (level > LEVELS1 && firstpart) { - /* no more than `LEVELS2' more levels? */ - if (!lua_getstack(L, level+LEVELS2, &ar)) - level--; /* keep going */ - else { - lua_pushliteral(L, "\n\t..."); /* too many levels */ - while (lua_getstack(L, level+LEVELS2, &ar)) /* find last levels */ - level++; - } - firstpart = 0; - continue; - } - lua_pushliteral(L, "\n\t"); - lua_getinfo(L, "Snl", &ar); - lua_pushfstring(L, "%s:", ar.short_src); - if (ar.currentline > 0) - lua_pushfstring(L, "%d:", ar.currentline); - switch (*ar.namewhat) { - case 'g': /* global */ - case 'l': /* local */ - case 'f': /* field */ - case 'm': /* method */ - lua_pushfstring(L, " in function `%s'", ar.name); - break; - default: { - if (*ar.what == 'm') /* main? */ - lua_pushfstring(L, " in main chunk"); - else if (*ar.what == 'C' || *ar.what == 't') - lua_pushliteral(L, " ?"); /* C function or tail call */ - else - lua_pushfstring(L, " in function <%s:%d>", - ar.short_src, ar.linedefined); - } - } - lua_concat(L, lua_gettop(L)); - } - lua_concat(L, lua_gettop(L)); - return 1; -} - - -static const luaL_reg dblib[] = { - {"getlocal", getlocal}, - {"getinfo", getinfo}, - {"gethook", gethook}, - {"getupvalue", getupvalue}, - {"sethook", sethook}, - {"setlocal", setlocal}, - {"setupvalue", setupvalue}, - {"debug", debug}, - {"traceback", errorfb}, - {NULL, NULL} -}; - - -LUALIB_API int luaopen_debug (lua_State *L) { - luaL_openlib(L, LUA_DBLIBNAME, dblib, 0); - lua_pushliteral(L, "_TRACEBACK"); - lua_pushcfunction(L, errorfb); - lua_settable(L, LUA_GLOBALSINDEX); - return 1; -} - diff --git a/stepmania/src/lua-5.0/src/lib/liolib.c b/stepmania/src/lua-5.0/src/lib/liolib.c deleted file mode 100644 index af3d8f9a40..0000000000 --- a/stepmania/src/lua-5.0/src/lib/liolib.c +++ /dev/null @@ -1,750 +0,0 @@ -/* -** $Id$ -** Standard I/O (and system) library -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include -#include -#include -#include - -#define liolib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - - -/* -** by default, gcc does not get `tmpname' -*/ -#ifndef USE_TMPNAME -#ifdef __GNUC__ -#define USE_TMPNAME 0 -#else -#define USE_TMPNAME 1 -#endif -#endif - - -/* -** by default, posix systems get `popen' -*/ -#ifndef USE_POPEN -#ifdef _POSIX_C_SOURCE -#if _POSIX_C_SOURCE >= 2 -#define USE_POPEN 1 -#endif -#endif -#endif - -#ifndef USE_POPEN -#define USE_POPEN 0 -#endif - - - - -/* -** {====================================================== -** FILE Operations -** ======================================================= -*/ - - -#if !USE_POPEN -#define pclose(f) (-1) -#endif - - -#define FILEHANDLE "FILE*" - -#define IO_INPUT "_input" -#define IO_OUTPUT "_output" - - -static int pushresult (lua_State *L, int i, const char *filename) { - if (i) { - lua_pushboolean(L, 1); - return 1; - } - else { - lua_pushnil(L); - if (filename) - lua_pushfstring(L, "%s: %s", filename, strerror(errno)); - else - lua_pushfstring(L, "%s", strerror(errno)); - lua_pushnumber(L, errno); - return 3; - } -} - - -static FILE **topfile (lua_State *L, int findex) { - FILE **f = (FILE **)luaL_checkudata(L, findex, FILEHANDLE); - if (f == NULL) luaL_argerror(L, findex, "bad file"); - return f; -} - - -static int io_type (lua_State *L) { - FILE **f = (FILE **)luaL_checkudata(L, 1, FILEHANDLE); - if (f == NULL) lua_pushnil(L); - else if (*f == NULL) - lua_pushliteral(L, "closed file"); - else - lua_pushliteral(L, "file"); - return 1; -} - - -static FILE *tofile (lua_State *L, int findex) { - FILE **f = topfile(L, findex); - if (*f == NULL) - luaL_error(L, "attempt to use a closed file"); - return *f; -} - - - -/* -** When creating file handles, always creates a `closed' file handle -** before opening the actual file; so, if there is a memory error, the -** file is not left opened. -*/ -static FILE **newfile (lua_State *L) { - FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *)); - *pf = NULL; /* file handle is currently `closed' */ - luaL_getmetatable(L, FILEHANDLE); - lua_setmetatable(L, -2); - return pf; -} - - -/* -** assumes that top of the stack is the `io' library, and next is -** the `io' metatable -*/ -static void registerfile (lua_State *L, FILE *f, const char *name, - const char *impname) { - lua_pushstring(L, name); - *newfile(L) = f; - if (impname) { - lua_pushstring(L, impname); - lua_pushvalue(L, -2); - lua_settable(L, -6); /* metatable[impname] = file */ - } - lua_settable(L, -3); /* io[name] = file */ -} - - -static int aux_close (lua_State *L) { - FILE *f = tofile(L, 1); - if (f == stdin || f == stdout || f == stderr) - return 0; /* file cannot be closed */ - else { - int ok = (pclose(f) != -1) || (fclose(f) == 0); - if (ok) - *(FILE **)lua_touserdata(L, 1) = NULL; /* mark file as closed */ - return ok; - } -} - - -static int io_close (lua_State *L) { - if (lua_isnone(L, 1) && lua_type(L, lua_upvalueindex(1)) == LUA_TTABLE) { - lua_pushstring(L, IO_OUTPUT); - lua_rawget(L, lua_upvalueindex(1)); - } - return pushresult(L, aux_close(L), NULL); -} - - -static int io_gc (lua_State *L) { - FILE **f = topfile(L, 1); - if (*f != NULL) /* ignore closed files */ - aux_close(L); - return 0; -} - - -static int io_tostring (lua_State *L) { - char buff[128]; - FILE **f = topfile(L, 1); - if (*f == NULL) - strcpy(buff, "closed"); - else - sprintf(buff, "%p", lua_touserdata(L, 1)); - lua_pushfstring(L, "file (%s)", buff); - return 1; -} - - -static int io_open (lua_State *L) { - const char *filename = luaL_checkstring(L, 1); - const char *mode = luaL_optstring(L, 2, "r"); - FILE **pf = newfile(L); - *pf = fopen(filename, mode); - return (*pf == NULL) ? pushresult(L, 0, filename) : 1; -} - - -static int io_popen (lua_State *L) { -#if !USE_POPEN - luaL_error(L, "`popen' not supported"); - return 0; -#else - const char *filename = luaL_checkstring(L, 1); - const char *mode = luaL_optstring(L, 2, "r"); - FILE **pf = newfile(L); - *pf = popen(filename, mode); - return (*pf == NULL) ? pushresult(L, 0, filename) : 1; -#endif -} - - -static int io_tmpfile (lua_State *L) { - FILE **pf = newfile(L); - *pf = tmpfile(); - return (*pf == NULL) ? pushresult(L, 0, NULL) : 1; -} - - -static FILE *getiofile (lua_State *L, const char *name) { - lua_pushstring(L, name); - lua_rawget(L, lua_upvalueindex(1)); - return tofile(L, -1); -} - - -static int g_iofile (lua_State *L, const char *name, const char *mode) { - if (!lua_isnoneornil(L, 1)) { - const char *filename = lua_tostring(L, 1); - lua_pushstring(L, name); - if (filename) { - FILE **pf = newfile(L); - *pf = fopen(filename, mode); - if (*pf == NULL) { - lua_pushfstring(L, "%s: %s", filename, strerror(errno)); - luaL_argerror(L, 1, lua_tostring(L, -1)); - } - } - else { - tofile(L, 1); /* check that it's a valid file handle */ - lua_pushvalue(L, 1); - } - lua_rawset(L, lua_upvalueindex(1)); - } - /* return current value */ - lua_pushstring(L, name); - lua_rawget(L, lua_upvalueindex(1)); - return 1; -} - - -static int io_input (lua_State *L) { - return g_iofile(L, IO_INPUT, "r"); -} - - -static int io_output (lua_State *L) { - return g_iofile(L, IO_OUTPUT, "w"); -} - - -static int io_readline (lua_State *L); - - -static void aux_lines (lua_State *L, int idx, int close) { - lua_pushliteral(L, FILEHANDLE); - lua_rawget(L, LUA_REGISTRYINDEX); - lua_pushvalue(L, idx); - lua_pushboolean(L, close); /* close/not close file when finished */ - lua_pushcclosure(L, io_readline, 3); -} - - -static int f_lines (lua_State *L) { - tofile(L, 1); /* check that it's a valid file handle */ - aux_lines(L, 1, 0); - return 1; -} - - -static int io_lines (lua_State *L) { - if (lua_isnoneornil(L, 1)) { /* no arguments? */ - lua_pushstring(L, IO_INPUT); - lua_rawget(L, lua_upvalueindex(1)); /* will iterate over default input */ - return f_lines(L); - } - else { - const char *filename = luaL_checkstring(L, 1); - FILE **pf = newfile(L); - *pf = fopen(filename, "r"); - luaL_argcheck(L, *pf, 1, strerror(errno)); - aux_lines(L, lua_gettop(L), 1); - return 1; - } -} - - -/* -** {====================================================== -** READ -** ======================================================= -*/ - - -static int read_number (lua_State *L, FILE *f) { - lua_Number d; - if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { - lua_pushnumber(L, d); - return 1; - } - else return 0; /* read fails */ -} - - -static int test_eof (lua_State *L, FILE *f) { - int c = getc(f); - ungetc(c, f); - lua_pushlstring(L, NULL, 0); - return (c != EOF); -} - - -static int read_line (lua_State *L, FILE *f) { - luaL_Buffer b; - luaL_buffinit(L, &b); - for (;;) { - size_t l; - char *p = luaL_prepbuffer(&b); - if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ - luaL_pushresult(&b); /* close buffer */ - return (lua_strlen(L, -1) > 0); /* check whether read something */ - } - l = strlen(p); - if (p[l-1] != '\n') - luaL_addsize(&b, l); - else { - luaL_addsize(&b, l - 1); /* do not include `eol' */ - luaL_pushresult(&b); /* close buffer */ - return 1; /* read at least an `eol' */ - } - } -} - - -static int read_chars (lua_State *L, FILE *f, size_t n) { - size_t rlen; /* how much to read */ - size_t nr; /* number of chars actually read */ - luaL_Buffer b; - luaL_buffinit(L, &b); - rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ - do { - char *p = luaL_prepbuffer(&b); - if (rlen > n) rlen = n; /* cannot read more than asked */ - nr = fread(p, sizeof(char), rlen, f); - luaL_addsize(&b, nr); - n -= nr; /* still have to read `n' chars */ - } while (n > 0 && nr == rlen); /* until end of count or eof */ - luaL_pushresult(&b); /* close buffer */ - return (n == 0 || lua_strlen(L, -1) > 0); -} - - -static int g_read (lua_State *L, FILE *f, int first) { - int nargs = lua_gettop(L) - 1; - int success; - int n; - if (nargs == 0) { /* no arguments? */ - success = read_line(L, f); - n = first+1; /* to return 1 result */ - } - else { /* ensure stack space for all results and for auxlib's buffer */ - luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); - success = 1; - for (n = first; nargs-- && success; n++) { - if (lua_type(L, n) == LUA_TNUMBER) { - size_t l = (size_t)lua_tonumber(L, n); - success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); - } - else { - const char *p = lua_tostring(L, n); - luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); - switch (p[1]) { - case 'n': /* number */ - success = read_number(L, f); - break; - case 'l': /* line */ - success = read_line(L, f); - break; - case 'a': /* file */ - read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ - success = 1; /* always success */ - break; - case 'w': /* word */ - return luaL_error(L, "obsolete option `*w' to `read'"); - default: - return luaL_argerror(L, n, "invalid format"); - } - } - } - } - if (!success) { - lua_pop(L, 1); /* remove last result */ - lua_pushnil(L); /* push nil instead */ - } - return n - first; -} - - -static int io_read (lua_State *L) { - return g_read(L, getiofile(L, IO_INPUT), 1); -} - - -static int f_read (lua_State *L) { - return g_read(L, tofile(L, 1), 2); -} - - -static int io_readline (lua_State *L) { - FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(2)); - if (f == NULL) /* file is already closed? */ - luaL_error(L, "file is already closed"); - if (read_line(L, f)) return 1; - else { /* EOF */ - if (lua_toboolean(L, lua_upvalueindex(3))) { /* generator created file? */ - lua_settop(L, 0); - lua_pushvalue(L, lua_upvalueindex(2)); - aux_close(L); /* close it */ - } - return 0; - } -} - -/* }====================================================== */ - - -static int g_write (lua_State *L, FILE *f, int arg) { - int nargs = lua_gettop(L) - 1; - int status = 1; - for (; nargs--; arg++) { - if (lua_type(L, arg) == LUA_TNUMBER) { - /* optimization: could be done exactly as for strings */ - status = status && - fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; - } - else { - size_t l; - const char *s = luaL_checklstring(L, arg, &l); - status = status && (fwrite(s, sizeof(char), l, f) == l); - } - } - return pushresult(L, status, NULL); -} - - -static int io_write (lua_State *L) { - return g_write(L, getiofile(L, IO_OUTPUT), 1); -} - - -static int f_write (lua_State *L) { - return g_write(L, tofile(L, 1), 2); -} - - -static int f_seek (lua_State *L) { - static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; - static const char *const modenames[] = {"set", "cur", "end", NULL}; - FILE *f = tofile(L, 1); - int op = luaL_findstring(luaL_optstring(L, 2, "cur"), modenames); - long offset = luaL_optlong(L, 3, 0); - luaL_argcheck(L, op != -1, 2, "invalid mode"); - op = fseek(f, offset, mode[op]); - if (op) - return pushresult(L, 0, NULL); /* error */ - else { - lua_pushnumber(L, ftell(f)); - return 1; - } -} - - -static int io_flush (lua_State *L) { - return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); -} - - -static int f_flush (lua_State *L) { - return pushresult(L, fflush(tofile(L, 1)) == 0, NULL); -} - - -static const luaL_reg iolib[] = { - {"input", io_input}, - {"output", io_output}, - {"lines", io_lines}, - {"close", io_close}, - {"flush", io_flush}, - {"open", io_open}, - {"popen", io_popen}, - {"read", io_read}, - {"tmpfile", io_tmpfile}, - {"type", io_type}, - {"write", io_write}, - {NULL, NULL} -}; - - -static const luaL_reg flib[] = { - {"flush", f_flush}, - {"read", f_read}, - {"lines", f_lines}, - {"seek", f_seek}, - {"write", f_write}, - {"close", io_close}, - {"__gc", io_gc}, - {"__tostring", io_tostring}, - {NULL, NULL} -}; - - -static void createmeta (lua_State *L) { - luaL_newmetatable(L, FILEHANDLE); /* create new metatable for file handles */ - /* file methods */ - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -2); /* push metatable */ - lua_rawset(L, -3); /* metatable.__index = metatable */ - luaL_openlib(L, NULL, flib, 0); -} - -/* }====================================================== */ - - -/* -** {====================================================== -** Other O.S. Operations -** ======================================================= -*/ - -static int io_execute (lua_State *L) { - lua_pushnumber(L, system(luaL_checkstring(L, 1))); - return 1; -} - - -static int io_remove (lua_State *L) { - const char *filename = luaL_checkstring(L, 1); - return pushresult(L, remove(filename) == 0, filename); -} - - -static int io_rename (lua_State *L) { - const char *fromname = luaL_checkstring(L, 1); - const char *toname = luaL_checkstring(L, 2); - return pushresult(L, rename(fromname, toname) == 0, fromname); -} - - -static int io_tmpname (lua_State *L) { -#if !USE_TMPNAME - luaL_error(L, "`tmpname' not supported"); - return 0; -#else - char buff[L_tmpnam]; - if (tmpnam(buff) != buff) - return luaL_error(L, "unable to generate a unique filename in `tmpname'"); - lua_pushstring(L, buff); - return 1; -#endif -} - - -static int io_getenv (lua_State *L) { - lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ - return 1; -} - - -static int io_clock (lua_State *L) { - lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); - return 1; -} - - -/* -** {====================================================== -** Time/Date operations -** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, -** wday=%w+1, yday=%j, isdst=? } -** ======================================================= -*/ - -static void setfield (lua_State *L, const char *key, int value) { - lua_pushstring(L, key); - lua_pushnumber(L, value); - lua_rawset(L, -3); -} - -static void setboolfield (lua_State *L, const char *key, int value) { - lua_pushstring(L, key); - lua_pushboolean(L, value); - lua_rawset(L, -3); -} - -static int getboolfield (lua_State *L, const char *key) { - int res; - lua_pushstring(L, key); - lua_gettable(L, -2); - res = lua_toboolean(L, -1); - lua_pop(L, 1); - return res; -} - - -static int getfield (lua_State *L, const char *key, int d) { - int res; - lua_pushstring(L, key); - lua_gettable(L, -2); - if (lua_isnumber(L, -1)) - res = (int)(lua_tonumber(L, -1)); - else { - if (d == -2) - return luaL_error(L, "field `%s' missing in date table", key); - res = d; - } - lua_pop(L, 1); - return res; -} - - -static int io_date (lua_State *L) { - const char *s = luaL_optstring(L, 1, "%c"); - time_t t = (time_t)(luaL_optnumber(L, 2, -1)); - struct tm *stm; - if (t == (time_t)(-1)) /* no time given? */ - t = time(NULL); /* use current time */ - if (*s == '!') { /* UTC? */ - stm = gmtime(&t); - s++; /* skip `!' */ - } - else - stm = localtime(&t); - if (stm == NULL) /* invalid date? */ - lua_pushnil(L); - else if (strcmp(s, "*t") == 0) { - lua_newtable(L); - setfield(L, "sec", stm->tm_sec); - setfield(L, "min", stm->tm_min); - setfield(L, "hour", stm->tm_hour); - setfield(L, "day", stm->tm_mday); - setfield(L, "month", stm->tm_mon+1); - setfield(L, "year", stm->tm_year+1900); - setfield(L, "wday", stm->tm_wday+1); - setfield(L, "yday", stm->tm_yday+1); - setboolfield(L, "isdst", stm->tm_isdst); - } - else { - char b[256]; - if (strftime(b, sizeof(b), s, stm)) - lua_pushstring(L, b); - else - return luaL_error(L, "`date' format too long"); - } - return 1; -} - - -static int io_time (lua_State *L) { - if (lua_isnoneornil(L, 1)) /* called without args? */ - lua_pushnumber(L, time(NULL)); /* return current time */ - else { - time_t t; - struct tm ts; - luaL_checktype(L, 1, LUA_TTABLE); - lua_settop(L, 1); /* make sure table is at the top */ - ts.tm_sec = getfield(L, "sec", 0); - ts.tm_min = getfield(L, "min", 0); - ts.tm_hour = getfield(L, "hour", 12); - ts.tm_mday = getfield(L, "day", -2); - ts.tm_mon = getfield(L, "month", -2) - 1; - ts.tm_year = getfield(L, "year", -2) - 1900; - ts.tm_isdst = getboolfield(L, "isdst"); - t = mktime(&ts); - if (t == (time_t)(-1)) - lua_pushnil(L); - else - lua_pushnumber(L, t); - } - return 1; -} - - -static int io_difftime (lua_State *L) { - lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), - (time_t)(luaL_optnumber(L, 2, 0)))); - return 1; -} - -/* }====================================================== */ - - -static int io_setloc (lua_State *L) { - static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, - LC_NUMERIC, LC_TIME}; - static const char *const catnames[] = {"all", "collate", "ctype", "monetary", - "numeric", "time", NULL}; - const char *l = lua_tostring(L, 1); - int op = luaL_findstring(luaL_optstring(L, 2, "all"), catnames); - luaL_argcheck(L, l || lua_isnoneornil(L, 1), 1, "string expected"); - luaL_argcheck(L, op != -1, 2, "invalid option"); - lua_pushstring(L, setlocale(cat[op], l)); - return 1; -} - - -static int io_exit (lua_State *L) { - exit(luaL_optint(L, 1, EXIT_SUCCESS)); - return 0; /* to avoid warnings */ -} - -static const luaL_reg syslib[] = { - {"clock", io_clock}, - {"date", io_date}, - {"difftime", io_difftime}, - {"execute", io_execute}, - {"exit", io_exit}, - {"getenv", io_getenv}, - {"remove", io_remove}, - {"rename", io_rename}, - {"setlocale", io_setloc}, - {"time", io_time}, - {"tmpname", io_tmpname}, - {NULL, NULL} -}; - -/* }====================================================== */ - - - -LUALIB_API int luaopen_io (lua_State *L) { - luaL_openlib(L, LUA_OSLIBNAME, syslib, 0); - createmeta(L); - lua_pushvalue(L, -1); - luaL_openlib(L, LUA_IOLIBNAME, iolib, 1); - /* put predefined file handles into `io' table */ - registerfile(L, stdin, "stdin", IO_INPUT); - registerfile(L, stdout, "stdout", IO_OUTPUT); - registerfile(L, stderr, "stderr", NULL); - return 1; -} - diff --git a/stepmania/src/lua-5.0/src/lib/lmathlib.c b/stepmania/src/lua-5.0/src/lib/lmathlib.c deleted file mode 100644 index 24e4fc745a..0000000000 --- a/stepmania/src/lua-5.0/src/lib/lmathlib.c +++ /dev/null @@ -1,246 +0,0 @@ -/* -** $Id$ -** Standard mathematical library -** See Copyright Notice in lua.h -*/ - - -#include -#include - -#define lmathlib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - -#undef PI -#define PI (3.14159265358979323846) -#define RADIANS_PER_DEGREE (PI/180.0) - - - -/* -** If you want Lua to operate in degrees (instead of radians), -** define USE_DEGREES -*/ -#ifdef USE_DEGREES -#define FROMRAD(a) ((a)/RADIANS_PER_DEGREE) -#define TORAD(a) ((a)*RADIANS_PER_DEGREE) -#else -#define FROMRAD(a) (a) -#define TORAD(a) (a) -#endif - - -static int math_abs (lua_State *L) { - lua_pushnumber(L, fabs(luaL_checknumber(L, 1))); - return 1; -} - -static int math_sin (lua_State *L) { - lua_pushnumber(L, sin(TORAD(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_cos (lua_State *L) { - lua_pushnumber(L, cos(TORAD(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_tan (lua_State *L) { - lua_pushnumber(L, tan(TORAD(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_asin (lua_State *L) { - lua_pushnumber(L, FROMRAD(asin(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_acos (lua_State *L) { - lua_pushnumber(L, FROMRAD(acos(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_atan (lua_State *L) { - lua_pushnumber(L, FROMRAD(atan(luaL_checknumber(L, 1)))); - return 1; -} - -static int math_atan2 (lua_State *L) { - lua_pushnumber(L, FROMRAD(atan2(luaL_checknumber(L, 1), luaL_checknumber(L, 2)))); - return 1; -} - -static int math_ceil (lua_State *L) { - lua_pushnumber(L, ceil(luaL_checknumber(L, 1))); - return 1; -} - -static int math_floor (lua_State *L) { - lua_pushnumber(L, floor(luaL_checknumber(L, 1))); - return 1; -} - -static int math_mod (lua_State *L) { - lua_pushnumber(L, fmod(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); - return 1; -} - -static int math_sqrt (lua_State *L) { - lua_pushnumber(L, sqrt(luaL_checknumber(L, 1))); - return 1; -} - -static int math_pow (lua_State *L) { - lua_pushnumber(L, pow(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); - return 1; -} - -static int math_log (lua_State *L) { - lua_pushnumber(L, log(luaL_checknumber(L, 1))); - return 1; -} - -static int math_log10 (lua_State *L) { - lua_pushnumber(L, log10(luaL_checknumber(L, 1))); - return 1; -} - -static int math_exp (lua_State *L) { - lua_pushnumber(L, exp(luaL_checknumber(L, 1))); - return 1; -} - -static int math_deg (lua_State *L) { - lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); - return 1; -} - -static int math_rad (lua_State *L) { - lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); - return 1; -} - -static int math_frexp (lua_State *L) { - int e; - lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e)); - lua_pushnumber(L, e); - return 2; -} - -static int math_ldexp (lua_State *L) { - lua_pushnumber(L, ldexp(luaL_checknumber(L, 1), luaL_checkint(L, 2))); - return 1; -} - - - -static int math_min (lua_State *L) { - int n = lua_gettop(L); /* number of arguments */ - lua_Number dmin = luaL_checknumber(L, 1); - int i; - for (i=2; i<=n; i++) { - lua_Number d = luaL_checknumber(L, i); - if (d < dmin) - dmin = d; - } - lua_pushnumber(L, dmin); - return 1; -} - - -static int math_max (lua_State *L) { - int n = lua_gettop(L); /* number of arguments */ - lua_Number dmax = luaL_checknumber(L, 1); - int i; - for (i=2; i<=n; i++) { - lua_Number d = luaL_checknumber(L, i); - if (d > dmax) - dmax = d; - } - lua_pushnumber(L, dmax); - return 1; -} - - -static int math_random (lua_State *L) { - /* the `%' avoids the (rare) case of r==1, and is needed also because on - some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ - lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; - switch (lua_gettop(L)) { /* check number of arguments */ - case 0: { /* no arguments */ - lua_pushnumber(L, r); /* Number between 0 and 1 */ - break; - } - case 1: { /* only upper limit */ - int u = luaL_checkint(L, 1); - luaL_argcheck(L, 1<=u, 1, "interval is empty"); - lua_pushnumber(L, (int)floor(r*u)+1); /* int between 1 and `u' */ - break; - } - case 2: { /* lower and upper limits */ - int l = luaL_checkint(L, 1); - int u = luaL_checkint(L, 2); - luaL_argcheck(L, l<=u, 2, "interval is empty"); - lua_pushnumber(L, (int)floor(r*(u-l+1))+l); /* int between `l' and `u' */ - break; - } - default: return luaL_error(L, "wrong number of arguments"); - } - return 1; -} - - -static int math_randomseed (lua_State *L) { - srand(luaL_checkint(L, 1)); - return 0; -} - - -static const luaL_reg mathlib[] = { - {"abs", math_abs}, - {"sin", math_sin}, - {"cos", math_cos}, - {"tan", math_tan}, - {"asin", math_asin}, - {"acos", math_acos}, - {"atan", math_atan}, - {"atan2", math_atan2}, - {"ceil", math_ceil}, - {"floor", math_floor}, - {"mod", math_mod}, - {"frexp", math_frexp}, - {"ldexp", math_ldexp}, - {"sqrt", math_sqrt}, - {"min", math_min}, - {"max", math_max}, - {"log", math_log}, - {"log10", math_log10}, - {"exp", math_exp}, - {"deg", math_deg}, - {"pow", math_pow}, - {"rad", math_rad}, - {"random", math_random}, - {"randomseed", math_randomseed}, - {NULL, NULL} -}; - - -/* -** Open math library -*/ -LUALIB_API int luaopen_math (lua_State *L) { - luaL_openlib(L, LUA_MATHLIBNAME, mathlib, 0); - lua_pushliteral(L, "pi"); - lua_pushnumber(L, PI); - lua_settable(L, -3); - lua_pushliteral(L, "__pow"); - lua_pushcfunction(L, math_pow); - lua_settable(L, LUA_GLOBALSINDEX); - return 1; -} - diff --git a/stepmania/src/lua-5.0/src/lib/loadlib.c b/stepmania/src/lua-5.0/src/lib/loadlib.c deleted file mode 100644 index 3b50333959..0000000000 --- a/stepmania/src/lua-5.0/src/lib/loadlib.c +++ /dev/null @@ -1,209 +0,0 @@ -/* -** $Id$ -** Dynamic library loader for Lua -** See Copyright Notice in lua.h -* -* This Lua library exports a single function, called loadlib, which is -* called from Lua as loadlib(lib,init), where lib is the full name of the -* library to be loaded (including the complete path) and init is the name -* of a function to be called after the library is loaded. Typically, this -* function will register other functions, thus making the complete library -* available to Lua. The init function is *not* automatically called by -* loadlib. Instead, loadlib returns the init function as a Lua function -* that the client can call when it thinks is appropriate. In the case of -* errors, loadlib returns nil and two strings describing the error. -* The first string is supplied by the operating system; it should be -* informative and useful for error messages. The second string is "open", -* "init", or "absent" to identify the error and is meant to be used for -* making decisions without having to look into the first string (whose -* format is system-dependent). -* -* This module contains an implementation of loadlib for Unix systems that -* have dlfcn, an implementation for Windows, and a stub for other systems. -* See the list at the end of this file for some links to available -* implementations of dlfcn and interfaces to other native dynamic loaders -* on top of which loadlib could be implemented. -* -*/ - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - - -#undef LOADLIB - - -#ifdef USE_DLOPEN -#define LOADLIB -/* -* This is an implementation of loadlib based on the dlfcn interface. -* The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, -* NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least -* as an emulation layer on top of native functions. -*/ - -#include - -static int loadlib(lua_State *L) -{ - const char *path=luaL_checkstring(L,1); - const char *init=luaL_checkstring(L,2); - void *lib=dlopen(path,RTLD_NOW); - if (lib!=NULL) - { - lua_CFunction f=(lua_CFunction) dlsym(lib,init); - if (f!=NULL) - { - lua_pushlightuserdata(L,lib); - lua_pushcclosure(L,f,1); - return 1; - } - } - /* else return appropriate error messages */ - lua_pushnil(L); - lua_pushstring(L,dlerror()); - lua_pushstring(L,(lib!=NULL) ? "init" : "open"); - if (lib!=NULL) dlclose(lib); - return 3; -} - -#endif - - - -/* -** In Windows, default is to use dll; otherwise, default is not to use dll -*/ -#ifndef USE_DLL -#if defined(_WIN32) && !defined(_XBOX) -#define USE_DLL 1 -#else -#define USE_DLL 0 -#endif -#endif - - -#if USE_DLL -#define LOADLIB -/* -* This is an implementation of loadlib for Windows using native functions. -*/ - -#ifndef _XBOX -#include -#endif - -static void pusherror(lua_State *L) -{ -#ifndef _XBOX - int error=GetLastError(); - char buffer[128]; - if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, - 0, error, 0, buffer, sizeof(buffer), 0)) - lua_pushstring(L,buffer); - else - lua_pushfstring(L,"system error %d\n",error); -#endif -} - -static int loadlib(lua_State *L) -{ - const char *path=luaL_checkstring(L,1); - const char *init=luaL_checkstring(L,2); - HINSTANCE lib=LoadLibrary(path); - if (lib!=NULL) - { - lua_CFunction f=(lua_CFunction) GetProcAddress(lib,init); - if (f!=NULL) - { - lua_pushlightuserdata(L,lib); - lua_pushcclosure(L,f,1); - return 1; - } - } - lua_pushnil(L); - pusherror(L); - lua_pushstring(L,(lib!=NULL) ? "init" : "open"); - if (lib!=NULL) FreeLibrary(lib); - return 3; -} - -#endif - - - -#ifndef LOADLIB -/* Fallback for other systems */ - -/* -** Those systems support dlopen, so they should have defined USE_DLOPEN. -** The default (no)implementation gives them a special error message. -*/ -#ifdef linux -#define LOADLIB -#endif - -#ifdef sun -#define LOADLIB -#endif - -#ifdef sgi -#define LOADLIB -#endif - -#ifdef BSD -#define LOADLIB -#endif - -#ifdef _WIN32 -#define LOADLIB -#endif - -#ifdef LOADLIB -#undef LOADLIB -#define LOADLIB "`loadlib' not installed (check your Lua configuration)" -#else -#define LOADLIB "`loadlib' not supported" -#endif - -static int loadlib(lua_State *L) -{ - lua_pushnil(L); - lua_pushliteral(L,LOADLIB); - lua_pushliteral(L,"absent"); - return 3; -} -#endif - -LUALIB_API int luaopen_loadlib (lua_State *L) -{ - lua_register(L,"loadlib",loadlib); - return 0; -} - -/* -* Here are some links to available implementations of dlfcn and -* interfaces to other native dynamic loaders on top of which loadlib -* could be implemented. Please send contributions and corrections to us. -* -* AIX -* Starting with AIX 4.2, dlfcn is included in the base OS. -* There is also an emulation package available. -* http://www.faqs.org/faqs/aix-faq/part4/section-21.html -* -* HPUX -* HPUX 11 has dlfcn. For HPUX 10 use shl_*. -* http://www.geda.seul.org/mailinglist/geda-dev37/msg00094.html -* http://www.stat.umn.edu/~luke/xls/projects/dlbasics/dlbasics.html -* -* Macintosh, Windows -* http://www.stat.umn.edu/~luke/xls/projects/dlbasics/dlbasics.html -* -* Mac OS X/Darwin -* http://www.opendarwin.org/projects/dlcompat/ -* -* GLIB has wrapper code for BeOS, OS2, Unix and Windows -* http://cvs.gnome.org/lxr/source/glib/gmodule/ -* -*/ diff --git a/stepmania/src/lua-5.0/src/lib/lstrlib.c b/stepmania/src/lua-5.0/src/lib/lstrlib.c deleted file mode 100644 index c48c3bb7c3..0000000000 --- a/stepmania/src/lua-5.0/src/lib/lstrlib.c +++ /dev/null @@ -1,770 +0,0 @@ -/* -** $Id$ -** Standard library for string operations and pattern-matching -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include -#include -#include - -#define lstrlib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - -/* macro to `unsign' a character */ -#ifndef uchar -#define uchar(c) ((unsigned char)(c)) -#endif - - -typedef long sint32; /* a signed version for size_t */ - - -static int str_len (lua_State *L) { - size_t l; - luaL_checklstring(L, 1, &l); - lua_pushnumber(L, (lua_Number)l); - return 1; -} - - -static sint32 posrelat (sint32 pos, size_t len) { - /* relative string position: negative means back from end */ - return (pos>=0) ? pos : (sint32)len+pos+1; -} - - -static int str_sub (lua_State *L) { - size_t l; - const char *s = luaL_checklstring(L, 1, &l); - sint32 start = posrelat(luaL_checklong(L, 2), l); - sint32 end = posrelat(luaL_optlong(L, 3, -1), l); - if (start < 1) start = 1; - if (end > (sint32)l) end = (sint32)l; - if (start <= end) - lua_pushlstring(L, s+start-1, end-start+1); - else lua_pushliteral(L, ""); - return 1; -} - - -static int str_lower (lua_State *L) { - size_t l; - size_t i; - luaL_Buffer b; - const char *s = luaL_checklstring(L, 1, &l); - luaL_buffinit(L, &b); - for (i=0; i 0) - luaL_addlstring(&b, s, l); - luaL_pushresult(&b); - return 1; -} - - -static int str_byte (lua_State *L) { - size_t l; - const char *s = luaL_checklstring(L, 1, &l); - sint32 pos = posrelat(luaL_optlong(L, 2, 1), l); - if (pos <= 0 || (size_t)(pos) > l) /* index out of range? */ - return 0; /* no answer */ - lua_pushnumber(L, uchar(s[pos-1])); - return 1; -} - - -static int str_char (lua_State *L) { - int n = lua_gettop(L); /* number of arguments */ - int i; - luaL_Buffer b; - luaL_buffinit(L, &b); - for (i=1; i<=n; i++) { - int c = luaL_checkint(L, i); - luaL_argcheck(L, uchar(c) == c, i, "invalid value"); - luaL_putchar(&b, uchar(c)); - } - luaL_pushresult(&b); - return 1; -} - - -static int writer (lua_State *L, const void* b, size_t size, void* B) { - (void)L; - luaL_addlstring((luaL_Buffer*) B, (const char *)b, size); - return 1; -} - - -static int str_dump (lua_State *L) { - luaL_Buffer b; - luaL_checktype(L, 1, LUA_TFUNCTION); - luaL_buffinit(L,&b); - if (!lua_dump(L, writer, &b)) - luaL_error(L, "unable to dump given function"); - luaL_pushresult(&b); - return 1; -} - - - -/* -** {====================================================== -** PATTERN MATCHING -** ======================================================= -*/ - -#ifndef MAX_CAPTURES -#define MAX_CAPTURES 32 /* arbitrary limit */ -#endif - - -#define CAP_UNFINISHED (-1) -#define CAP_POSITION (-2) - -typedef struct MatchState { - const char *src_init; /* init of source string */ - const char *src_end; /* end (`\0') of source string */ - lua_State *L; - int level; /* total number of captures (finished or unfinished) */ - struct { - const char *init; - sint32 len; - } capture[MAX_CAPTURES]; -} MatchState; - - -#define ESC '%' -#define SPECIALS "^$*+?.([%-" - - -static int check_capture (MatchState *ms, int l) { - l -= '1'; - if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED) - return luaL_error(ms->L, "invalid capture index"); - return l; -} - - -static int capture_to_close (MatchState *ms) { - int level = ms->level; - for (level--; level>=0; level--) - if (ms->capture[level].len == CAP_UNFINISHED) return level; - return luaL_error(ms->L, "invalid pattern capture"); -} - - -static const char *luaI_classend (MatchState *ms, const char *p) { - switch (*p++) { - case ESC: { - if (*p == '\0') - luaL_error(ms->L, "malformed pattern (ends with `%')"); - return p+1; - } - case '[': { - if (*p == '^') p++; - do { /* look for a `]' */ - if (*p == '\0') - luaL_error(ms->L, "malformed pattern (missing `]')"); - if (*(p++) == ESC && *p != '\0') - p++; /* skip escapes (e.g. `%]') */ - } while (*p != ']'); - return p+1; - } - default: { - return p; - } - } -} - - -static int match_class (int c, int cl) { - int res; - switch (tolower(cl)) { - case 'a' : res = isalpha(c); break; - case 'c' : res = iscntrl(c); break; - case 'd' : res = isdigit(c); break; - case 'l' : res = islower(c); break; - case 'p' : res = ispunct(c); break; - case 's' : res = isspace(c); break; - case 'u' : res = isupper(c); break; - case 'w' : res = isalnum(c); break; - case 'x' : res = isxdigit(c); break; - case 'z' : res = (c == 0); break; - default: return (cl == c); - } - return (islower(cl) ? res : !res); -} - - -static int matchbracketclass (int c, const char *p, const char *ec) { - int sig = 1; - if (*(p+1) == '^') { - sig = 0; - p++; /* skip the `^' */ - } - while (++p < ec) { - if (*p == ESC) { - p++; - if (match_class(c, *p)) - return sig; - } - else if ((*(p+1) == '-') && (p+2 < ec)) { - p+=2; - if (uchar(*(p-2)) <= c && c <= uchar(*p)) - return sig; - } - else if (uchar(*p) == c) return sig; - } - return !sig; -} - - -static int luaI_singlematch (int c, const char *p, const char *ep) { - switch (*p) { - case '.': return 1; /* matches any char */ - case ESC: return match_class(c, *(p+1)); - case '[': return matchbracketclass(c, p, ep-1); - default: return (uchar(*p) == c); - } -} - - -static const char *match (MatchState *ms, const char *s, const char *p); - - -static const char *matchbalance (MatchState *ms, const char *s, - const char *p) { - if (*p == 0 || *(p+1) == 0) - luaL_error(ms->L, "unbalanced pattern"); - if (*s != *p) return NULL; - else { - int b = *p; - int e = *(p+1); - int cont = 1; - while (++s < ms->src_end) { - if (*s == e) { - if (--cont == 0) return s+1; - } - else if (*s == b) cont++; - } - } - return NULL; /* string ends out of balance */ -} - - -static const char *max_expand (MatchState *ms, const char *s, - const char *p, const char *ep) { - sint32 i = 0; /* counts maximum expand for item */ - while ((s+i)src_end && luaI_singlematch(uchar(*(s+i)), p, ep)) - i++; - /* keeps trying to match with the maximum repetitions */ - while (i>=0) { - const char *res = match(ms, (s+i), ep+1); - if (res) return res; - i--; /* else didn't match; reduce 1 repetition to try again */ - } - return NULL; -} - - -static const char *min_expand (MatchState *ms, const char *s, - const char *p, const char *ep) { - for (;;) { - const char *res = match(ms, s, ep+1); - if (res != NULL) - return res; - else if (ssrc_end && luaI_singlematch(uchar(*s), p, ep)) - s++; /* try with one more repetition */ - else return NULL; - } -} - - -static const char *start_capture (MatchState *ms, const char *s, - const char *p, int what) { - const char *res; - int level = ms->level; - if (level >= MAX_CAPTURES) luaL_error(ms->L, "too many captures"); - ms->capture[level].init = s; - ms->capture[level].len = what; - ms->level = level+1; - if ((res=match(ms, s, p)) == NULL) /* match failed? */ - ms->level--; /* undo capture */ - return res; -} - - -static const char *end_capture (MatchState *ms, const char *s, - const char *p) { - int l = capture_to_close(ms); - const char *res; - ms->capture[l].len = s - ms->capture[l].init; /* close capture */ - if ((res = match(ms, s, p)) == NULL) /* match failed? */ - ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ - return res; -} - - -static const char *match_capture (MatchState *ms, const char *s, int l) { - size_t len; - l = check_capture(ms, l); - len = ms->capture[l].len; - if ((size_t)(ms->src_end-s) >= len && - memcmp(ms->capture[l].init, s, len) == 0) - return s+len; - else return NULL; -} - - -static const char *match (MatchState *ms, const char *s, const char *p) { - init: /* using goto's to optimize tail recursion */ - switch (*p) { - case '(': { /* start capture */ - if (*(p+1) == ')') /* position capture? */ - return start_capture(ms, s, p+2, CAP_POSITION); - else - return start_capture(ms, s, p+1, CAP_UNFINISHED); - } - case ')': { /* end capture */ - return end_capture(ms, s, p+1); - } - case ESC: { - switch (*(p+1)) { - case 'b': { /* balanced string? */ - s = matchbalance(ms, s, p+2); - if (s == NULL) return NULL; - p+=4; goto init; /* else return match(ms, s, p+4); */ - } - case 'f': { /* frontier? */ - const char *ep; char previous; - p += 2; - if (*p != '[') - luaL_error(ms->L, "missing `[' after `%%f' in pattern"); - ep = luaI_classend(ms, p); /* points to what is next */ - previous = (s == ms->src_init) ? '\0' : *(s-1); - if (matchbracketclass(uchar(previous), p, ep-1) || - !matchbracketclass(uchar(*s), p, ep-1)) return NULL; - p=ep; goto init; /* else return match(ms, s, ep); */ - } - default: { - if (isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ - s = match_capture(ms, s, *(p+1)); - if (s == NULL) return NULL; - p+=2; goto init; /* else return match(ms, s, p+2) */ - } - goto dflt; /* case default */ - } - } - } - case '\0': { /* end of pattern */ - return s; /* match succeeded */ - } - case '$': { - if (*(p+1) == '\0') /* is the `$' the last char in pattern? */ - return (s == ms->src_end) ? s : NULL; /* check end of string */ - else goto dflt; - } - default: dflt: { /* it is a pattern item */ - const char *ep = luaI_classend(ms, p); /* points to what is next */ - int m = ssrc_end && luaI_singlematch(uchar(*s), p, ep); - switch (*ep) { - case '?': { /* optional */ - const char *res; - if (m && ((res=match(ms, s+1, ep+1)) != NULL)) - return res; - p=ep+1; goto init; /* else return match(ms, s, ep+1); */ - } - case '*': { /* 0 or more repetitions */ - return max_expand(ms, s, p, ep); - } - case '+': { /* 1 or more repetitions */ - return (m ? max_expand(ms, s+1, p, ep) : NULL); - } - case '-': { /* 0 or more repetitions (minimum) */ - return min_expand(ms, s, p, ep); - } - default: { - if (!m) return NULL; - s++; p=ep; goto init; /* else return match(ms, s+1, ep); */ - } - } - } - } -} - - - -static const char *lmemfind (const char *s1, size_t l1, - const char *s2, size_t l2) { - if (l2 == 0) return s1; /* empty strings are everywhere */ - else if (l2 > l1) return NULL; /* avoids a negative `l1' */ - else { - const char *init; /* to search for a `*s2' inside `s1' */ - l2--; /* 1st char will be checked by `memchr' */ - l1 = l1-l2; /* `s2' cannot be found after that */ - while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { - init++; /* 1st char is already checked */ - if (memcmp(init, s2+1, l2) == 0) - return init-1; - else { /* correct `l1' and `s1' to try again */ - l1 -= init-s1; - s1 = init; - } - } - return NULL; /* not found */ - } -} - - -static void push_onecapture (MatchState *ms, int i) { - int l = ms->capture[i].len; - if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); - if (l == CAP_POSITION) - lua_pushnumber(ms->L, (lua_Number)(ms->capture[i].init - ms->src_init + 1)); - else - lua_pushlstring(ms->L, ms->capture[i].init, l); -} - - -static int push_captures (MatchState *ms, const char *s, const char *e) { - int i; - luaL_checkstack(ms->L, ms->level, "too many captures"); - if (ms->level == 0 && s) { /* no explicit captures? */ - lua_pushlstring(ms->L, s, e-s); /* return whole match */ - return 1; - } - else { /* return all captures */ - for (i=0; ilevel; i++) - push_onecapture(ms, i); - return ms->level; /* number of strings pushed */ - } -} - - -static int str_find (lua_State *L) { - size_t l1, l2; - const char *s = luaL_checklstring(L, 1, &l1); - const char *p = luaL_checklstring(L, 2, &l2); - sint32 init = posrelat(luaL_optlong(L, 3, 1), l1) - 1; - if (init < 0) init = 0; - else if ((size_t)(init) > l1) init = (sint32)l1; - if (lua_toboolean(L, 4) || /* explicit request? */ - strpbrk(p, SPECIALS) == NULL) { /* or no special characters? */ - /* do a plain search */ - const char *s2 = lmemfind(s+init, l1-init, p, l2); - if (s2) { - lua_pushnumber(L, (lua_Number)(s2-s+1)); - lua_pushnumber(L, (lua_Number)(s2-s+l2)); - return 2; - } - } - else { - MatchState ms; - int anchor = (*p == '^') ? (p++, 1) : 0; - const char *s1=s+init; - ms.L = L; - ms.src_init = s; - ms.src_end = s+l1; - do { - const char *res; - ms.level = 0; - if ((res=match(&ms, s1, p)) != NULL) { - lua_pushnumber(L, (lua_Number)(s1-s+1)); /* start */ - lua_pushnumber(L, (lua_Number)(res-s)); /* end */ - return push_captures(&ms, NULL, 0) + 2; - } - } while (s1++L; - if (lua_isstring(L, 3)) { - const char *news = lua_tostring(L, 3); - size_t l = lua_strlen(L, 3); - size_t i; - for (i=0; i= 3 && (lua_isstring(L, 3) || lua_isfunction(L, 3)), - 3, "string or function expected"); - luaL_buffinit(L, &b); - ms.L = L; - ms.src_init = src; - ms.src_end = src+srcl; - while (n < max_s) { - const char *e; - ms.level = 0; - e = match(&ms, src, p); - if (e) { - n++; - add_s(&ms, &b, src, e); - } - if (e && e>src) /* non empty match? */ - src = e; /* skip it */ - else if (src < ms.src_end) - luaL_putchar(&b, *src++); - else break; - if (anchor) break; - } - luaL_addlstring(&b, src, ms.src_end-src); - luaL_pushresult(&b); - lua_pushnumber(L, (lua_Number)n); /* number of substitutions */ - return 2; -} - -/* }====================================================== */ - - -/* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ -#define MAX_ITEM 512 -/* maximum size of each format specification (such as '%-099.99d') */ -#define MAX_FORMAT 20 - - -static void luaI_addquoted (lua_State *L, luaL_Buffer *b, int arg) { - size_t l; - const char *s = luaL_checklstring(L, arg, &l); - luaL_putchar(b, '"'); - while (l--) { - switch (*s) { - case '"': case '\\': case '\n': { - luaL_putchar(b, '\\'); - luaL_putchar(b, *s); - break; - } - case '\0': { - luaL_addlstring(b, "\\000", 4); - break; - } - default: { - luaL_putchar(b, *s); - break; - } - } - s++; - } - luaL_putchar(b, '"'); -} - - -static const char *scanformat (lua_State *L, const char *strfrmt, - char *form, int *hasprecision) { - const char *p = strfrmt; - while (strchr("-+ #0", *p)) p++; /* skip flags */ - if (isdigit(uchar(*p))) p++; /* skip width */ - if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ - if (*p == '.') { - p++; - *hasprecision = 1; - if (isdigit(uchar(*p))) p++; /* skip precision */ - if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ - } - if (isdigit(uchar(*p))) - luaL_error(L, "invalid format (width or precision too long)"); - if (p-strfrmt+2 > MAX_FORMAT) /* +2 to include `%' and the specifier */ - luaL_error(L, "invalid format (too long)"); - form[0] = '%'; - strncpy(form+1, strfrmt, p-strfrmt+1); - form[p-strfrmt+2] = 0; - return p; -} - - -static int str_format (lua_State *L) { - int arg = 1; - size_t sfl; - const char *strfrmt = luaL_checklstring(L, arg, &sfl); - const char *strfrmt_end = strfrmt+sfl; - luaL_Buffer b; - luaL_buffinit(L, &b); - while (strfrmt < strfrmt_end) { - if (*strfrmt != '%') - luaL_putchar(&b, *strfrmt++); - else if (*++strfrmt == '%') - luaL_putchar(&b, *strfrmt++); /* %% */ - else { /* format item */ - char form[MAX_FORMAT]; /* to store the format (`%...') */ - char buff[MAX_ITEM]; /* to store the formatted item */ - int hasprecision = 0; - if (isdigit(uchar(*strfrmt)) && *(strfrmt+1) == '$') - return luaL_error(L, "obsolete option (d$) to `format'"); - arg++; - strfrmt = scanformat(L, strfrmt, form, &hasprecision); - switch (*strfrmt++) { - case 'c': case 'd': case 'i': { - sprintf(buff, form, luaL_checkint(L, arg)); - break; - } - case 'o': case 'u': case 'x': case 'X': { - sprintf(buff, form, (unsigned int)(luaL_checknumber(L, arg))); - break; - } - case 'e': case 'E': case 'f': - case 'g': case 'G': { - sprintf(buff, form, luaL_checknumber(L, arg)); - break; - } - case 'q': { - luaI_addquoted(L, &b, arg); - continue; /* skip the `addsize' at the end */ - } - case 's': { - size_t l; - const char *s = luaL_checklstring(L, arg, &l); - if (!hasprecision && l >= 100) { - /* no precision and string is too long to be formatted; - keep original string */ - lua_pushvalue(L, arg); - luaL_addvalue(&b); - continue; /* skip the `addsize' at the end */ - } - else { - sprintf(buff, form, s); - break; - } - } - default: { /* also treat cases `pnLlh' */ - return luaL_error(L, "invalid option to `format'"); - } - } - luaL_addlstring(&b, buff, strlen(buff)); - } - } - luaL_pushresult(&b); - return 1; -} - - -static const luaL_reg strlib[] = { - {"len", str_len}, - {"sub", str_sub}, - {"lower", str_lower}, - {"upper", str_upper}, - {"char", str_char}, - {"rep", str_rep}, - {"byte", str_byte}, - {"format", str_format}, - {"dump", str_dump}, - {"find", str_find}, - {"gfind", gfind}, - {"gsub", str_gsub}, - {NULL, NULL} -}; - - -/* -** Open string library -*/ -LUALIB_API int luaopen_string (lua_State *L) { - luaL_openlib(L, LUA_STRLIBNAME, strlib, 0); - return 1; -} - diff --git a/stepmania/src/lua-5.0/src/lib/ltablib.c b/stepmania/src/lua-5.0/src/lib/ltablib.c deleted file mode 100644 index 970e9940ce..0000000000 --- a/stepmania/src/lua-5.0/src/lib/ltablib.c +++ /dev/null @@ -1,250 +0,0 @@ -/* -** $Id$ -** Library for Table Manipulation -** See Copyright Notice in lua.h -*/ - - -#include - -#define ltablib_c - -#include "lua.h" - -#include "lauxlib.h" -#include "lualib.h" - - -#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n)) - - -static int luaB_foreachi (lua_State *L) { - int i; - int n = aux_getn(L, 1); - luaL_checktype(L, 2, LUA_TFUNCTION); - for (i=1; i<=n; i++) { - lua_pushvalue(L, 2); /* function */ - lua_pushnumber(L, (lua_Number)i); /* 1st argument */ - lua_rawgeti(L, 1, i); /* 2nd argument */ - lua_call(L, 2, 1); - if (!lua_isnil(L, -1)) - return 1; - lua_pop(L, 1); /* remove nil result */ - } - return 0; -} - - -static int luaB_foreach (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - luaL_checktype(L, 2, LUA_TFUNCTION); - lua_pushnil(L); /* first key */ - for (;;) { - if (lua_next(L, 1) == 0) - return 0; - lua_pushvalue(L, 2); /* function */ - lua_pushvalue(L, -3); /* key */ - lua_pushvalue(L, -3); /* value */ - lua_call(L, 2, 1); - if (!lua_isnil(L, -1)) - return 1; - lua_pop(L, 2); /* remove value and result */ - } -} - - -static int luaB_getn (lua_State *L) { - lua_pushnumber(L, (lua_Number)aux_getn(L, 1)); - return 1; -} - - -static int luaB_setn (lua_State *L) { - luaL_checktype(L, 1, LUA_TTABLE); - luaL_setn(L, 1, luaL_checkint(L, 2)); - return 0; -} - - -static int luaB_tinsert (lua_State *L) { - int v = lua_gettop(L); /* number of arguments */ - int n = aux_getn(L, 1) + 1; - int pos; /* where to insert new element */ - if (v == 2) /* called with only 2 arguments */ - pos = n; /* insert new element at the end */ - else { - pos = luaL_checkint(L, 2); /* 2nd argument is the position */ - if (pos > n) n = pos; /* `grow' array if necessary */ - v = 3; /* function may be called with more than 3 args */ - } - luaL_setn(L, 1, n); /* new size */ - while (--n >= pos) { /* move up elements */ - lua_rawgeti(L, 1, n); - lua_rawseti(L, 1, n+1); /* t[n+1] = t[n] */ - } - lua_pushvalue(L, v); - lua_rawseti(L, 1, pos); /* t[pos] = v */ - return 0; -} - - -static int luaB_tremove (lua_State *L) { - int n = aux_getn(L, 1); - int pos = luaL_optint(L, 2, n); - if (n <= 0) return 0; /* table is `empty' */ - luaL_setn(L, 1, n-1); /* t.n = n-1 */ - lua_rawgeti(L, 1, pos); /* result = t[pos] */ - for ( ;pos= P */ - while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { - if (i>u) luaL_error(L, "invalid order function for sorting"); - lua_pop(L, 1); /* remove a[i] */ - } - /* repeat --j until a[j] <= P */ - while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { - if (j -#include - -#define llex_c - -#include "lua.h" - -#include "ldo.h" -#include "llex.h" -#include "lobject.h" -#include "lparser.h" -#include "lstate.h" -#include "lstring.h" -#include "lzio.h" - - - -#define next(LS) (LS->current = zgetc(LS->z)) - - - -/* ORDER RESERVED */ -static const char *const token2string [] = { - "and", "break", "do", "else", "elseif", - "end", "false", "for", "function", "if", - "in", "local", "nil", "not", "or", "repeat", - "return", "then", "true", "until", "while", "*name", - "..", "...", "==", ">=", "<=", "~=", - "*number", "*string", "" -}; - - -void luaX_init (lua_State *L) { - int i; - for (i=0; itsv.reserved = cast(lu_byte, i+1); /* reserved word */ - } -} - - -#define MAXSRC 80 - - -void luaX_checklimit (LexState *ls, int val, int limit, const char *msg) { - if (val > limit) { - msg = luaO_pushfstring(ls->L, "too many %s (limit=%d)", msg, limit); - luaX_syntaxerror(ls, msg); - } -} - - -void luaX_errorline (LexState *ls, const char *s, const char *token, int line) { - lua_State *L = ls->L; - char buff[MAXSRC]; - luaO_chunkid(buff, getstr(ls->source), MAXSRC); - luaO_pushfstring(L, "%s:%d: %s near `%s'", buff, line, s, token); - luaD_throw(L, LUA_ERRSYNTAX); -} - - -static void luaX_error (LexState *ls, const char *s, const char *token) { - luaX_errorline(ls, s, token, ls->linenumber); -} - - -void luaX_syntaxerror (LexState *ls, const char *msg) { - const char *lasttoken; - switch (ls->t.token) { - case TK_NAME: - lasttoken = getstr(ls->t.seminfo.ts); - break; - case TK_STRING: - case TK_NUMBER: - lasttoken = luaZ_buffer(ls->buff); - break; - default: - lasttoken = luaX_token2str(ls, ls->t.token); - break; - } - luaX_error(ls, msg, lasttoken); -} - - -const char *luaX_token2str (LexState *ls, int token) { - if (token < FIRST_RESERVED) { - lua_assert(token == (unsigned char)token); - return luaO_pushfstring(ls->L, "%c", token); - } - else - return token2string[token-FIRST_RESERVED]; -} - - -static void luaX_lexerror (LexState *ls, const char *s, int token) { - if (token == TK_EOS) - luaX_error(ls, s, luaX_token2str(ls, token)); - else - luaX_error(ls, s, luaZ_buffer(ls->buff)); -} - - -static void inclinenumber (LexState *LS) { - next(LS); /* skip `\n' */ - ++LS->linenumber; - luaX_checklimit(LS, LS->linenumber, MAX_INT, "lines in a chunk"); -} - - -void luaX_setinput (lua_State *L, LexState *LS, ZIO *z, TString *source) { - LS->L = L; - LS->lookahead.token = TK_EOS; /* no look-ahead token */ - LS->z = z; - LS->fs = NULL; - LS->linenumber = 1; - LS->lastline = 1; - LS->source = source; - next(LS); /* read first char */ - if (LS->current == '#') { - do { /* skip first line */ - next(LS); - } while (LS->current != '\n' && LS->current != EOZ); - } -} - - - -/* -** ======================================================= -** LEXICAL ANALYZER -** ======================================================= -*/ - - -/* use buffer to store names, literal strings and numbers */ - -/* extra space to allocate when growing buffer */ -#define EXTRABUFF 32 - -/* maximum number of chars that can be read without checking buffer size */ -#define MAXNOCHECK 5 - -#define checkbuffer(LS, len) \ - if (((len)+MAXNOCHECK)*sizeof(char) > luaZ_sizebuffer((LS)->buff)) \ - luaZ_openspace((LS)->L, (LS)->buff, (len)+EXTRABUFF) - -#define save(LS, c, l) \ - (luaZ_buffer((LS)->buff)[l++] = cast(char, c)) -#define save_and_next(LS, l) (save(LS, LS->current, l), next(LS)) - - -static size_t readname (LexState *LS) { - size_t l = 0; - checkbuffer(LS, l); - do { - checkbuffer(LS, l); - save_and_next(LS, l); - } while (isalnum(LS->current) || LS->current == '_'); - save(LS, '\0', l); - return l-1; -} - - -/* LUA_NUMBER */ -static void read_numeral (LexState *LS, int comma, SemInfo *seminfo) { - size_t l = 0; - checkbuffer(LS, l); - if (comma) save(LS, '.', l); - while (isdigit(LS->current)) { - checkbuffer(LS, l); - save_and_next(LS, l); - } - if (LS->current == '.') { - save_and_next(LS, l); - if (LS->current == '.') { - save_and_next(LS, l); - save(LS, '\0', l); - luaX_lexerror(LS, - "ambiguous syntax (decimal point x string concatenation)", - TK_NUMBER); - } - } - while (isdigit(LS->current)) { - checkbuffer(LS, l); - save_and_next(LS, l); - } - if (LS->current == 'e' || LS->current == 'E') { - save_and_next(LS, l); /* read `E' */ - if (LS->current == '+' || LS->current == '-') - save_and_next(LS, l); /* optional exponent sign */ - while (isdigit(LS->current)) { - checkbuffer(LS, l); - save_and_next(LS, l); - } - } - save(LS, '\0', l); - if (!luaO_str2d(luaZ_buffer(LS->buff), &seminfo->r)) - luaX_lexerror(LS, "malformed number", TK_NUMBER); -} - - -static void read_long_string (LexState *LS, SemInfo *seminfo) { - int cont = 0; - size_t l = 0; - checkbuffer(LS, l); - save(LS, '[', l); /* save first `[' */ - save_and_next(LS, l); /* pass the second `[' */ - if (LS->current == '\n') /* string starts with a newline? */ - inclinenumber(LS); /* skip it */ - for (;;) { - checkbuffer(LS, l); - switch (LS->current) { - case EOZ: - save(LS, '\0', l); - luaX_lexerror(LS, (seminfo) ? "unfinished long string" : - "unfinished long comment", TK_EOS); - break; /* to avoid warnings */ - case '[': - save_and_next(LS, l); - if (LS->current == '[') { - cont++; - save_and_next(LS, l); - } - continue; - case ']': - save_and_next(LS, l); - if (LS->current == ']') { - if (cont == 0) goto endloop; - cont--; - save_and_next(LS, l); - } - continue; - case '\n': - save(LS, '\n', l); - inclinenumber(LS); - if (!seminfo) l = 0; /* reset buffer to avoid wasting space */ - continue; - default: - save_and_next(LS, l); - } - } endloop: - save_and_next(LS, l); /* skip the second `]' */ - save(LS, '\0', l); - if (seminfo) - seminfo->ts = luaS_newlstr(LS->L, luaZ_buffer(LS->buff) + 2, l - 5); -} - - -static void read_string (LexState *LS, int del, SemInfo *seminfo) { - size_t l = 0; - checkbuffer(LS, l); - save_and_next(LS, l); - while (LS->current != del) { - checkbuffer(LS, l); - switch (LS->current) { - case EOZ: - save(LS, '\0', l); - luaX_lexerror(LS, "unfinished string", TK_EOS); - break; /* to avoid warnings */ - case '\n': - save(LS, '\0', l); - luaX_lexerror(LS, "unfinished string", TK_STRING); - break; /* to avoid warnings */ - case '\\': - next(LS); /* do not save the `\' */ - switch (LS->current) { - case 'a': save(LS, '\a', l); next(LS); break; - case 'b': save(LS, '\b', l); next(LS); break; - case 'f': save(LS, '\f', l); next(LS); break; - case 'n': save(LS, '\n', l); next(LS); break; - case 'r': save(LS, '\r', l); next(LS); break; - case 't': save(LS, '\t', l); next(LS); break; - case 'v': save(LS, '\v', l); next(LS); break; - case '\n': save(LS, '\n', l); inclinenumber(LS); break; - case EOZ: break; /* will raise an error next loop */ - default: { - if (!isdigit(LS->current)) - save_and_next(LS, l); /* handles \\, \", \', and \? */ - else { /* \xxx */ - int c = 0; - int i = 0; - do { - c = 10*c + (LS->current-'0'); - next(LS); - } while (++i<3 && isdigit(LS->current)); - if (c > UCHAR_MAX) { - save(LS, '\0', l); - luaX_lexerror(LS, "escape sequence too large", TK_STRING); - } - save(LS, c, l); - } - } - } - break; - default: - save_and_next(LS, l); - } - } - save_and_next(LS, l); /* skip delimiter */ - save(LS, '\0', l); - seminfo->ts = luaS_newlstr(LS->L, luaZ_buffer(LS->buff) + 1, l - 3); -} - - -int luaX_lex (LexState *LS, SemInfo *seminfo) { - for (;;) { - switch (LS->current) { - - case '\n': { - inclinenumber(LS); - continue; - } - case '-': { - next(LS); - if (LS->current != '-') return '-'; - /* else is a comment */ - next(LS); - if (LS->current == '[' && (next(LS), LS->current == '[')) - read_long_string(LS, NULL); /* long comment */ - else /* short comment */ - while (LS->current != '\n' && LS->current != EOZ) - next(LS); - continue; - } - case '[': { - next(LS); - if (LS->current != '[') return '['; - else { - read_long_string(LS, seminfo); - return TK_STRING; - } - } - case '=': { - next(LS); - if (LS->current != '=') return '='; - else { next(LS); return TK_EQ; } - } - case '<': { - next(LS); - if (LS->current != '=') return '<'; - else { next(LS); return TK_LE; } - } - case '>': { - next(LS); - if (LS->current != '=') return '>'; - else { next(LS); return TK_GE; } - } - case '~': { - next(LS); - if (LS->current != '=') return '~'; - else { next(LS); return TK_NE; } - } - case '"': - case '\'': { - read_string(LS, LS->current, seminfo); - return TK_STRING; - } - case '.': { - next(LS); - if (LS->current == '.') { - next(LS); - if (LS->current == '.') { - next(LS); - return TK_DOTS; /* ... */ - } - else return TK_CONCAT; /* .. */ - } - else if (!isdigit(LS->current)) return '.'; - else { - read_numeral(LS, 1, seminfo); - return TK_NUMBER; - } - } - case EOZ: { - return TK_EOS; - } - default: { - if (isspace(LS->current)) { - next(LS); - continue; - } - else if (isdigit(LS->current)) { - read_numeral(LS, 0, seminfo); - return TK_NUMBER; - } - else if (isalpha(LS->current) || LS->current == '_') { - /* identifier or reserved word */ - size_t l = readname(LS); - TString *ts = luaS_newlstr(LS->L, luaZ_buffer(LS->buff), l); - if (ts->tsv.reserved > 0) /* reserved word? */ - return ts->tsv.reserved - 1 + FIRST_RESERVED; - seminfo->ts = ts; - return TK_NAME; - } - else { - int c = LS->current; - if (iscntrl(c)) - luaX_error(LS, "invalid control char", - luaO_pushfstring(LS->L, "char(%d)", c)); - next(LS); - return c; /* single-char tokens (+ - / ...) */ - } - } - } - } -} - -#undef next diff --git a/stepmania/src/lua-5.0/src/llex.h b/stepmania/src/lua-5.0/src/llex.h deleted file mode 100644 index de122ccdea..0000000000 --- a/stepmania/src/lua-5.0/src/llex.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -** $Id$ -** Lexical Analyzer -** See Copyright Notice in lua.h -*/ - -#ifndef llex_h -#define llex_h - -#include "lobject.h" -#include "lzio.h" - - -#define FIRST_RESERVED 257 - -/* maximum length of a reserved word */ -#define TOKEN_LEN (sizeof("function")/sizeof(char)) - - -/* -* WARNING: if you change the order of this enumeration, -* grep "ORDER RESERVED" -*/ -enum RESERVED { - /* terminal symbols denoted by reserved words */ - TK_AND = FIRST_RESERVED, TK_BREAK, - TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, - TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, - TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, - /* other terminal symbols */ - TK_NAME, TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, - TK_STRING, TK_EOS -}; - -/* number of reserved words */ -#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) - - -typedef union { - lua_Number r; - TString *ts; -} SemInfo; /* semantics information */ - - -typedef struct Token { - int token; - SemInfo seminfo; -} Token; - - -typedef struct LexState { - int current; /* current character (charint) */ - int linenumber; /* input line counter */ - int lastline; /* line of last token `consumed' */ - Token t; /* current token */ - Token lookahead; /* look ahead token */ - struct FuncState *fs; /* `FuncState' is private to the parser */ - struct lua_State *L; - ZIO *z; /* input stream */ - Mbuffer *buff; /* buffer for tokens */ - TString *source; /* current source name */ - int nestlevel; /* level of nested non-terminals */ -} LexState; - - -void luaX_init (lua_State *L); -void luaX_setinput (lua_State *L, LexState *LS, ZIO *z, TString *source); -int luaX_lex (LexState *LS, SemInfo *seminfo); -void luaX_checklimit (LexState *ls, int val, int limit, const char *msg); -void luaX_syntaxerror (LexState *ls, const char *s); -void luaX_errorline (LexState *ls, const char *s, const char *token, int line); -const char *luaX_token2str (LexState *ls, int token); - - -#endif diff --git a/stepmania/src/lua-5.0/src/llimits.h b/stepmania/src/lua-5.0/src/llimits.h deleted file mode 100644 index 4435a4536f..0000000000 --- a/stepmania/src/lua-5.0/src/llimits.h +++ /dev/null @@ -1,185 +0,0 @@ -/* -** $Id$ -** Limits, basic types, and some other `installation-dependent' definitions -** See Copyright Notice in lua.h -*/ - -#ifndef llimits_h -#define llimits_h - - -#include -#include - - -#include "lua.h" - - -/* -** try to find number of bits in an integer -*/ -#ifndef BITS_INT -/* avoid overflows in comparison */ -#if INT_MAX-20 < 32760 -#define BITS_INT 16 -#else -#if INT_MAX > 2147483640L -/* machine has at least 32 bits */ -#define BITS_INT 32 -#else -#error "you must define BITS_INT with number of bits in an integer" -#endif -#endif -#endif - - -/* -** the following types define integer types for values that may not -** fit in a `small int' (16 bits), but may waste space in a -** `large long' (64 bits). The current definitions should work in -** any machine, but may not be optimal. -*/ - -/* an unsigned integer to hold hash values */ -typedef unsigned int lu_hash; -/* its signed equivalent */ -typedef int ls_hash; - -/* an unsigned integer big enough to count the total memory used by Lua; */ -/* it should be at least as large as size_t */ -typedef unsigned long lu_mem; - -#define MAX_LUMEM ULONG_MAX - - -/* an integer big enough to count the number of strings in use */ -typedef long ls_nstr; - -/* chars used as small naturals (so that `char' is reserved for characters) */ -typedef unsigned char lu_byte; - - -#define MAX_SIZET ((size_t)(~(size_t)0)-2) - - -#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ - -/* -** conversion of pointer to integer -** this is for hashing only; there is no problem if the integer -** cannot hold the whole pointer value -*/ -#define IntPoint(p) ((lu_hash)(p)) - - - -/* type to ensure maximum alignment */ -#ifndef LUSER_ALIGNMENT_T -typedef union { double u; void *s; long l; } L_Umaxalign; -#else -typedef LUSER_ALIGNMENT_T L_Umaxalign; -#endif - - -/* result of `usual argument conversion' over lua_Number */ -#ifndef LUA_UACNUMBER -typedef double l_uacNumber; -#else -typedef LUA_UACNUMBER l_uacNumber; -#endif - - -#ifndef lua_assert -#define lua_assert(c) /* empty */ -#endif - - -#ifndef check_exp -#define check_exp(c,e) (e) -#endif - - -#ifndef UNUSED -#define UNUSED(x) ((void)(x)) /* to avoid warnings */ -#endif - - -#ifndef cast -#define cast(t, exp) ((t)(exp)) -#endif - - - -/* -** type for virtual-machine instructions -** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) -*/ -typedef unsigned long Instruction; - - -/* maximum depth for calls (unsigned short) */ -#ifndef LUA_MAXCALLS -#define LUA_MAXCALLS 4096 -#endif - - -/* -** maximum depth for C calls (unsigned short): Not too big, or may -** overflow the C stack... -*/ - -#ifndef LUA_MAXCCALLS -#define LUA_MAXCCALLS 200 -#endif - - -/* maximum size for the C stack */ -#ifndef LUA_MAXCSTACK -#define LUA_MAXCSTACK 2048 -#endif - - -/* maximum stack for a Lua function */ -#define MAXSTACK 250 - - -/* maximum number of variables declared in a function */ -#ifndef MAXVARS -#define MAXVARS 200 /* arbitrary limit ( - -#define lmem_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" - - - -/* -** definition for realloc function. It must assure that l_realloc(NULL, -** 0, x) allocates a new block (ANSI C assures that). (`os' is the old -** block size; some allocators may use that.) -*/ -#ifndef l_realloc -#define l_realloc(b,os,s) realloc(b,s) -#endif - -/* -** definition for free function. (`os' is the old block size; some -** allocators may use that.) -*/ -#ifndef l_free -#define l_free(b,os) free(b) -#endif - - -#define MINSIZEARRAY 4 - - -void *luaM_growaux (lua_State *L, void *block, int *size, int size_elems, - int limit, const char *errormsg) { - void *newblock; - int newsize = (*size)*2; - if (newsize < MINSIZEARRAY) - newsize = MINSIZEARRAY; /* minimum size */ - else if (*size >= limit/2) { /* cannot double it? */ - if (*size < limit - MINSIZEARRAY) /* try something smaller... */ - newsize = limit; /* still have at least MINSIZEARRAY free places */ - else luaG_runerror(L, errormsg); - } - newblock = luaM_realloc(L, block, - cast(lu_mem, *size)*cast(lu_mem, size_elems), - cast(lu_mem, newsize)*cast(lu_mem, size_elems)); - *size = newsize; /* update only when everything else is OK */ - return newblock; -} - - -/* -** generic allocation routine. -*/ -void *luaM_realloc (lua_State *L, void *block, lu_mem oldsize, lu_mem size) { - lua_assert((oldsize == 0) == (block == NULL)); - if (size == 0) { - if (block != NULL) { - l_free(block, oldsize); - block = NULL; - } - else return NULL; /* avoid `nblocks' computations when oldsize==size==0 */ - } - else if (size >= MAX_SIZET) - luaG_runerror(L, "memory allocation error: block too big"); - else { - block = l_realloc(block, oldsize, size); - if (block == NULL) { - if (L) - luaD_throw(L, LUA_ERRMEM); - else return NULL; /* error before creating state! */ - } - } - if (L) { - lua_assert(G(L) != NULL && G(L)->nblocks > 0); - G(L)->nblocks -= oldsize; - G(L)->nblocks += size; - } - return block; -} - diff --git a/stepmania/src/lua-5.0/src/lmem.h b/stepmania/src/lua-5.0/src/lmem.h deleted file mode 100644 index 0020af338c..0000000000 --- a/stepmania/src/lua-5.0/src/lmem.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -** $Id$ -** Interface to Memory Manager -** See Copyright Notice in lua.h -*/ - -#ifndef lmem_h -#define lmem_h - - -#include - -#include "llimits.h" -#include "lua.h" - -#define MEMERRMSG "not enough memory" - - -void *luaM_realloc (lua_State *L, void *oldblock, lu_mem oldsize, lu_mem size); - -void *luaM_growaux (lua_State *L, void *block, int *size, int size_elem, - int limit, const char *errormsg); - -#define luaM_free(L, b, s) luaM_realloc(L, (b), (s), 0) -#define luaM_freelem(L, b) luaM_realloc(L, (b), sizeof(*(b)), 0) -#define luaM_freearray(L, b, n, t) luaM_realloc(L, (b), \ - cast(lu_mem, n)*cast(lu_mem, sizeof(t)), 0) - -#define luaM_malloc(L, t) luaM_realloc(L, NULL, 0, (t)) -#define luaM_new(L, t) cast(t *, luaM_malloc(L, sizeof(t))) -#define luaM_newvector(L, n,t) cast(t *, luaM_malloc(L, \ - cast(lu_mem, n)*cast(lu_mem, sizeof(t)))) - -#define luaM_growvector(L,v,nelems,size,t,limit,e) \ - if (((nelems)+1) > (size)) \ - ((v)=cast(t *, luaM_growaux(L,v,&(size),sizeof(t),limit,e))) - -#define luaM_reallocvector(L, v,oldn,n,t) \ - ((v)=cast(t *, luaM_realloc(L, v,cast(lu_mem, oldn)*cast(lu_mem, sizeof(t)), \ - cast(lu_mem, n)*cast(lu_mem, sizeof(t))))) - - -#endif - diff --git a/stepmania/src/lua-5.0/src/lobject.c b/stepmania/src/lua-5.0/src/lobject.c deleted file mode 100644 index fb176df591..0000000000 --- a/stepmania/src/lua-5.0/src/lobject.c +++ /dev/null @@ -1,195 +0,0 @@ -/* -** $Id$ -** Some generic functions over Lua objects -** See Copyright Notice in lua.h -*/ - -#include -#include -#include -#include - -#define lobject_c - -#include "lua.h" - -#include "ldo.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" -#include "lstring.h" -#include "lvm.h" - - -/* function to convert a string to a lua_Number */ -#ifndef lua_str2number -#define lua_str2number(s,p) strtod((s), (p)) -#endif - - -const TObject luaO_nilobject = {LUA_TNIL, {NULL}}; - - -/* -** converts an integer to a "floating point byte", represented as -** (mmmmmxxx), where the real value is (xxx) * 2^(mmmmm) -*/ -int luaO_int2fb (unsigned int x) { - int m = 0; /* mantissa */ - while (x >= (1<<3)) { - x = (x+1) >> 1; - m++; - } - return (m << 3) | cast(int, x); -} - - -int luaO_log2 (unsigned int x) { - static const lu_byte log_8[255] = { - 0, - 1,1, - 2,2,2,2, - 3,3,3,3,3,3,3,3, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 - }; - if (x >= 0x00010000) { - if (x >= 0x01000000) return log_8[((x>>24) & 0xff) - 1]+24; - else return log_8[((x>>16) & 0xff) - 1]+16; - } - else { - if (x >= 0x00000100) return log_8[((x>>8) & 0xff) - 1]+8; - else if (x) return log_8[(x & 0xff) - 1]; - return -1; /* special `log' for 0 */ - } -} - - -int luaO_rawequalObj (const TObject *t1, const TObject *t2) { - if (ttype(t1) != ttype(t2)) return 0; - else switch (ttype(t1)) { - case LUA_TNIL: - return 1; - case LUA_TNUMBER: - return nvalue(t1) == nvalue(t2); - case LUA_TBOOLEAN: - return bvalue(t1) == bvalue(t2); /* boolean true must be 1 !! */ - case LUA_TLIGHTUSERDATA: - return pvalue(t1) == pvalue(t2); - default: - lua_assert(iscollectable(t1)); - return gcvalue(t1) == gcvalue(t2); - } -} - - -int luaO_str2d (const char *s, lua_Number *result) { - char *endptr; - lua_Number res = lua_str2number(s, &endptr); - if (endptr == s) return 0; /* no conversion */ - while (isspace((unsigned char)(*endptr))) endptr++; - if (*endptr != '\0') return 0; /* invalid trailing characters? */ - *result = res; - return 1; -} - - - -static void pushstr (lua_State *L, const char *str) { - setsvalue2s(L->top, luaS_new(L, str)); - incr_top(L); -} - - -/* this function handles only `%d', `%c', %f, and `%s' formats */ -const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { - int n = 1; - pushstr(L, ""); - for (;;) { - const char *e = strchr(fmt, '%'); - if (e == NULL) break; - setsvalue2s(L->top, luaS_newlstr(L, fmt, e-fmt)); - incr_top(L); - switch (*(e+1)) { - case 's': - pushstr(L, va_arg(argp, char *)); - break; - case 'c': { - char buff[2]; - buff[0] = cast(char, va_arg(argp, int)); - buff[1] = '\0'; - pushstr(L, buff); - break; - } - case 'd': - setnvalue(L->top, cast(lua_Number, va_arg(argp, int))); - incr_top(L); - break; - case 'f': - setnvalue(L->top, cast(lua_Number, va_arg(argp, l_uacNumber))); - incr_top(L); - break; - case '%': - pushstr(L, "%"); - break; - default: lua_assert(0); - } - n += 2; - fmt = e+2; - } - pushstr(L, fmt); - luaV_concat(L, n+1, L->top - L->base - 1); - L->top -= n; - return svalue(L->top - 1); -} - - -const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { - const char *msg; - va_list argp; - va_start(argp, fmt); - msg = luaO_pushvfstring(L, fmt, argp); - va_end(argp); - return msg; -} - - -void luaO_chunkid (char *out, const char *source, int bufflen) { - if (*source == '=') { - strncpy(out, source+1, bufflen); /* remove first char */ - out[bufflen-1] = '\0'; /* ensures null termination */ - } - else { /* out = "source", or "...source" */ - if (*source == '@') { - int l; - source++; /* skip the `@' */ - bufflen -= sizeof(" `...' "); - l = strlen(source); - strcpy(out, ""); - if (l>bufflen) { - source += (l-bufflen); /* get last part of file name */ - strcat(out, "..."); - } - strcat(out, source); - } - else { /* out = [string "string"] */ - int len = strcspn(source, "\n"); /* stop at first newline */ - bufflen -= sizeof(" [string \"...\"] "); - if (len > bufflen) len = bufflen; - strcpy(out, "[string \""); - if (source[len] != '\0') { /* must truncate? */ - strncat(out, source, len); - strcat(out, "..."); - } - else - strcat(out, source); - strcat(out, "\"]"); - } - } -} diff --git a/stepmania/src/lua-5.0/src/lobject.h b/stepmania/src/lua-5.0/src/lobject.h deleted file mode 100644 index f30eb97989..0000000000 --- a/stepmania/src/lua-5.0/src/lobject.h +++ /dev/null @@ -1,336 +0,0 @@ -/* -** $Id$ -** Type definitions for Lua objects -** See Copyright Notice in lua.h -*/ - -#ifndef lobject_h -#define lobject_h - - -#include "llimits.h" -#include "lua.h" - - -/* tags for values visible from Lua */ -#define NUM_TAGS LUA_TTHREAD - - -/* -** Extra tags for non-values -*/ -#define LUA_TPROTO (NUM_TAGS+1) -#define LUA_TUPVAL (NUM_TAGS+2) - - -/* -** Union of all collectable objects -*/ -typedef union GCObject GCObject; - - -/* -** Common Header for all collectable objects (in macro form, to be -** included in other objects) -*/ -#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked - - -/* -** Common header in struct form -*/ -typedef struct GCheader { - CommonHeader; -} GCheader; - - - - -/* -** Union of all Lua values -*/ -typedef union { - GCObject *gc; - void *p; - lua_Number n; - int b; -} Value; - - -/* -** Lua values (or `tagged objects') -*/ -typedef struct lua_TObject { - int tt; - Value value; -} TObject; - - -/* Macros to test type */ -#define ttisnil(o) (ttype(o) == LUA_TNIL) -#define ttisnumber(o) (ttype(o) == LUA_TNUMBER) -#define ttisstring(o) (ttype(o) == LUA_TSTRING) -#define ttistable(o) (ttype(o) == LUA_TTABLE) -#define ttisfunction(o) (ttype(o) == LUA_TFUNCTION) -#define ttisboolean(o) (ttype(o) == LUA_TBOOLEAN) -#define ttisuserdata(o) (ttype(o) == LUA_TUSERDATA) -#define ttisthread(o) (ttype(o) == LUA_TTHREAD) -#define ttislightuserdata(o) (ttype(o) == LUA_TLIGHTUSERDATA) - -/* Macros to access values */ -#define ttype(o) ((o)->tt) -#define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc) -#define pvalue(o) check_exp(ttislightuserdata(o), (o)->value.p) -#define nvalue(o) check_exp(ttisnumber(o), (o)->value.n) -#define tsvalue(o) check_exp(ttisstring(o), &(o)->value.gc->ts) -#define uvalue(o) check_exp(ttisuserdata(o), &(o)->value.gc->u) -#define clvalue(o) check_exp(ttisfunction(o), &(o)->value.gc->cl) -#define hvalue(o) check_exp(ttistable(o), &(o)->value.gc->h) -#define bvalue(o) check_exp(ttisboolean(o), (o)->value.b) -#define thvalue(o) check_exp(ttisthread(o), &(o)->value.gc->th) - -#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) - -/* Macros to set values */ -#define setnvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TNUMBER; i_o->value.n=(x); } - -#define chgnvalue(obj,x) \ - check_exp(ttype(obj)==LUA_TNUMBER, (obj)->value.n=(x)) - -#define setpvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TLIGHTUSERDATA; i_o->value.p=(x); } - -#define setbvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TBOOLEAN; i_o->value.b=(x); } - -#define setsvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TSTRING; \ - i_o->value.gc=cast(GCObject *, (x)); \ - lua_assert(i_o->value.gc->gch.tt == LUA_TSTRING); } - -#define setuvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TUSERDATA; \ - i_o->value.gc=cast(GCObject *, (x)); \ - lua_assert(i_o->value.gc->gch.tt == LUA_TUSERDATA); } - -#define setthvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TTHREAD; \ - i_o->value.gc=cast(GCObject *, (x)); \ - lua_assert(i_o->value.gc->gch.tt == LUA_TTHREAD); } - -#define setclvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TFUNCTION; \ - i_o->value.gc=cast(GCObject *, (x)); \ - lua_assert(i_o->value.gc->gch.tt == LUA_TFUNCTION); } - -#define sethvalue(obj,x) \ - { TObject *i_o=(obj); i_o->tt=LUA_TTABLE; \ - i_o->value.gc=cast(GCObject *, (x)); \ - lua_assert(i_o->value.gc->gch.tt == LUA_TTABLE); } - -#define setnilvalue(obj) ((obj)->tt=LUA_TNIL) - - - -/* -** for internal debug only -*/ -#define checkconsistency(obj) \ - lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt)) - - -#define setobj(obj1,obj2) \ - { const TObject *o2=(obj2); TObject *o1=(obj1); \ - checkconsistency(o2); \ - o1->tt=o2->tt; o1->value = o2->value; } - - -/* -** different types of sets, according to destination -*/ - -/* from stack to (same) stack */ -#define setobjs2s setobj -/* to stack (not from same stack) */ -#define setobj2s setobj -#define setsvalue2s setsvalue -/* from table to same table */ -#define setobjt2t setobj -/* to table */ -#define setobj2t setobj -/* to new object */ -#define setobj2n setobj -#define setsvalue2n setsvalue - -#define setttype(obj, tt) (ttype(obj) = (tt)) - - -#define iscollectable(o) (ttype(o) >= LUA_TSTRING) - - - -typedef TObject *StkId; /* index to stack elements */ - - -/* -** String headers for string table -*/ -typedef union TString { - L_Umaxalign dummy; /* ensures maximum alignment for strings */ - struct { - CommonHeader; - lu_byte reserved; - lu_hash hash; - size_t len; - } tsv; -} TString; - - -#define getstr(ts) cast(const char *, (ts) + 1) -#define svalue(o) getstr(tsvalue(o)) - - - -typedef union Udata { - L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ - struct { - CommonHeader; - struct Table *metatable; - size_t len; - } uv; -} Udata; - - - - -/* -** Function Prototypes -*/ -typedef struct Proto { - CommonHeader; - TObject *k; /* constants used by the function */ - Instruction *code; - struct Proto **p; /* functions defined inside the function */ - int *lineinfo; /* map from opcodes to source lines */ - struct LocVar *locvars; /* information about local variables */ - TString **upvalues; /* upvalue names */ - TString *source; - int sizeupvalues; - int sizek; /* size of `k' */ - int sizecode; - int sizelineinfo; - int sizep; /* size of `p' */ - int sizelocvars; - int lineDefined; - GCObject *gclist; - lu_byte nups; /* number of upvalues */ - lu_byte numparams; - lu_byte is_vararg; - lu_byte maxstacksize; -} Proto; - - -typedef struct LocVar { - TString *varname; - int startpc; /* first point where variable is active */ - int endpc; /* first point where variable is dead */ -} LocVar; - - - -/* -** Upvalues -*/ - -typedef struct UpVal { - CommonHeader; - TObject *v; /* points to stack or to its own value */ - TObject value; /* the value (when closed) */ -} UpVal; - - -/* -** Closures -*/ - -#define ClosureHeader \ - CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist - -typedef struct CClosure { - ClosureHeader; - lua_CFunction f; - TObject upvalue[1]; -} CClosure; - - -typedef struct LClosure { - ClosureHeader; - struct Proto *p; - TObject g; /* global table for this closure */ - UpVal *upvals[1]; -} LClosure; - - -typedef union Closure { - CClosure c; - LClosure l; -} Closure; - - -#define iscfunction(o) (ttype(o) == LUA_TFUNCTION && clvalue(o)->c.isC) -#define isLfunction(o) (ttype(o) == LUA_TFUNCTION && !clvalue(o)->c.isC) - - -/* -** Tables -*/ - -typedef struct Node { - TObject i_key; - TObject i_val; - struct Node *next; /* for chaining */ -} Node; - - -typedef struct Table { - CommonHeader; - lu_byte flags; /* 1<

lsizenode)) - - - -extern const TObject luaO_nilobject; - -int luaO_log2 (unsigned int x); -int luaO_int2fb (unsigned int x); -#define fb2int(x) (((x) & 7) << ((x) >> 3)) - -int luaO_rawequalObj (const TObject *t1, const TObject *t2); -int luaO_str2d (const char *s, lua_Number *result); - -const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp); -const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); -void luaO_chunkid (char *out, const char *source, int len); - - -#endif diff --git a/stepmania/src/lua-5.0/src/lopcodes.c b/stepmania/src/lua-5.0/src/lopcodes.c deleted file mode 100644 index d92f396f49..0000000000 --- a/stepmania/src/lua-5.0/src/lopcodes.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -** $Id$ -** extracted automatically from lopcodes.h by mkprint.lua -** DO NOT EDIT -** See Copyright Notice in lua.h -*/ - - -#define lopcodes_c - -#include "lua.h" - -#include "lobject.h" -#include "lopcodes.h" - - -#ifdef LUA_OPNAMES - -const char *const luaP_opnames[] = { - "MOVE", - "LOADK", - "LOADBOOL", - "LOADNIL", - "GETUPVAL", - "GETGLOBAL", - "GETTABLE", - "SETGLOBAL", - "SETUPVAL", - "SETTABLE", - "NEWTABLE", - "SELF", - "ADD", - "SUB", - "MUL", - "DIV", - "POW", - "UNM", - "NOT", - "CONCAT", - "JMP", - "EQ", - "LT", - "LE", - "TEST", - "CALL", - "TAILCALL", - "RETURN", - "FORLOOP", - "TFORLOOP", - "TFORPREP", - "SETLIST", - "SETLISTO", - "CLOSE", - "CLOSURE" -}; - -#endif - -#define opmode(t,b,bk,ck,sa,k,m) (((t)<>1) /* `sBx' is signed */ -#else -#define MAXARG_Bx MAX_INT -#define MAXARG_sBx MAX_INT -#endif - - -#define MAXARG_A ((1<>POS_A)) -#define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ - ((cast(Instruction, u)<>POS_B) & MASK1(SIZE_B,0))) -#define SETARG_B(i,b) ((i) = (((i)&MASK0(SIZE_B,POS_B)) | \ - ((cast(Instruction, b)<>POS_C) & MASK1(SIZE_C,0))) -#define SETARG_C(i,b) ((i) = (((i)&MASK0(SIZE_C,POS_C)) | \ - ((cast(Instruction, b)<>POS_Bx) & MASK1(SIZE_Bx,0))) -#define SETARG_Bx(i,b) ((i) = (((i)&MASK0(SIZE_Bx,POS_Bx)) | \ - ((cast(Instruction, b)< C) then R(A) := R(B) else pc++ */ - -OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ -OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ -OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ - -OP_FORLOOP,/* A sBx R(A)+=R(A+2); if R(A) =) R(A)*/ -OP_CLOSURE/* A Bx R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n)) */ -} OpCode; - - -#define NUM_OPCODES (cast(int, OP_CLOSURE+1)) - - - -/*=========================================================================== - Notes: - (1) In OP_CALL, if (B == 0) then B = top. C is the number of returns - 1, - and can be 0: OP_CALL then sets `top' to last_result+1, so - next open instruction (OP_CALL, OP_RETURN, OP_SETLIST) may use `top'. - - (2) In OP_RETURN, if (B == 0) then return up to `top' - - (3) For comparisons, B specifies what conditions the test should accept. - - (4) All `skips' (pc++) assume that next instruction is a jump -===========================================================================*/ - - -/* -** masks for instruction properties -*/ -enum OpModeMask { - OpModeBreg = 2, /* B is a register */ - OpModeBrk, /* B is a register/constant */ - OpModeCrk, /* C is a register/constant */ - OpModesetA, /* instruction set register A */ - OpModeK, /* Bx is a constant */ - OpModeT /* operator is a test */ - -}; - - -extern const lu_byte luaP_opmodes[NUM_OPCODES]; - -#define getOpMode(m) (cast(enum OpMode, luaP_opmodes[m] & 3)) -#define testOpMode(m, b) (luaP_opmodes[m] & (1 << (b))) - - -#ifdef LUA_OPNAMES -extern const char *const luaP_opnames[]; /* opcode names */ -#endif - - - -/* number of list items to accumulate before a SETLIST instruction */ -/* (must be a power of 2) */ -#define LFIELDS_PER_FLUSH 32 - - -#endif diff --git a/stepmania/src/lua-5.0/src/lparser.c b/stepmania/src/lua-5.0/src/lparser.c deleted file mode 100644 index c69141601e..0000000000 --- a/stepmania/src/lua-5.0/src/lparser.c +++ /dev/null @@ -1,1333 +0,0 @@ -/* -** $Id$ -** Lua Parser -** See Copyright Notice in lua.h -*/ - - -#include - -#define lparser_c - -#include "lua.h" - -#include "lcode.h" -#include "ldebug.h" -#include "lfunc.h" -#include "llex.h" -#include "lmem.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lparser.h" -#include "lstate.h" -#include "lstring.h" - - - - -#define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) - - -#define enterlevel(ls) if (++(ls)->nestlevel > LUA_MAXPARSERLEVEL) \ - luaX_syntaxerror(ls, "too many syntax levels"); -#define leavelevel(ls) ((ls)->nestlevel--) - - -/* -** nodes for block list (list of active blocks) -*/ -typedef struct BlockCnt { - struct BlockCnt *previous; /* chain */ - int breaklist; /* list of jumps out of this loop */ - int nactvar; /* # active local variables outside the breakable structure */ - int upval; /* true if some variable in the block is an upvalue */ - int isbreakable; /* true if `block' is a loop */ -} BlockCnt; - - - -/* -** prototypes for recursive non-terminal functions -*/ -static void chunk (LexState *ls); -static void expr (LexState *ls, expdesc *v); - - - -static void next (LexState *ls) { - ls->lastline = ls->linenumber; - if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ - ls->t = ls->lookahead; /* use this one */ - ls->lookahead.token = TK_EOS; /* and discharge it */ - } - else - ls->t.token = luaX_lex(ls, &ls->t.seminfo); /* read next token */ -} - - -static void lookahead (LexState *ls) { - lua_assert(ls->lookahead.token == TK_EOS); - ls->lookahead.token = luaX_lex(ls, &ls->lookahead.seminfo); -} - - -static void error_expected (LexState *ls, int token) { - luaX_syntaxerror(ls, - luaO_pushfstring(ls->L, "`%s' expected", luaX_token2str(ls, token))); -} - - -static int testnext (LexState *ls, int c) { - if (ls->t.token == c) { - next(ls); - return 1; - } - else return 0; -} - - -static void check (LexState *ls, int c) { - if (!testnext(ls, c)) - error_expected(ls, c); -} - - -#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } - - - -static void check_match (LexState *ls, int what, int who, int where) { - if (!testnext(ls, what)) { - if (where == ls->linenumber) - error_expected(ls, what); - else { - luaX_syntaxerror(ls, luaO_pushfstring(ls->L, - "`%s' expected (to close `%s' at line %d)", - luaX_token2str(ls, what), luaX_token2str(ls, who), where)); - } - } -} - - -static TString *str_checkname (LexState *ls) { - TString *ts; - check_condition(ls, (ls->t.token == TK_NAME), " expected"); - ts = ls->t.seminfo.ts; - next(ls); - return ts; -} - - -static void init_exp (expdesc *e, expkind k, int i) { - e->f = e->t = NO_JUMP; - e->k = k; - e->info = i; -} - - -static void codestring (LexState *ls, expdesc *e, TString *s) { - init_exp(e, VK, luaK_stringK(ls->fs, s)); -} - - -static void checkname(LexState *ls, expdesc *e) { - codestring(ls, e, str_checkname(ls)); -} - - -static int luaI_registerlocalvar (LexState *ls, TString *varname) { - FuncState *fs = ls->fs; - Proto *f = fs->f; - luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, - LocVar, MAX_INT, ""); - f->locvars[fs->nlocvars].varname = varname; - return fs->nlocvars++; -} - - -static void new_localvar (LexState *ls, TString *name, int n) { - FuncState *fs = ls->fs; - luaX_checklimit(ls, fs->nactvar+n+1, MAXVARS, "local variables"); - fs->actvar[fs->nactvar+n] = luaI_registerlocalvar(ls, name); -} - - -static void adjustlocalvars (LexState *ls, int nvars) { - FuncState *fs = ls->fs; - fs->nactvar += nvars; - for (; nvars; nvars--) { - getlocvar(fs, fs->nactvar - nvars).startpc = fs->pc; - } -} - - -static void removevars (LexState *ls, int tolevel) { - FuncState *fs = ls->fs; - while (fs->nactvar > tolevel) - getlocvar(fs, --fs->nactvar).endpc = fs->pc; -} - - -static void new_localvarstr (LexState *ls, const char *name, int n) { - new_localvar(ls, luaS_new(ls->L, name), n); -} - - -static void create_local (LexState *ls, const char *name) { - new_localvarstr(ls, name, 0); - adjustlocalvars(ls, 1); -} - - -static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { - int i; - Proto *f = fs->f; - for (i=0; inups; i++) { - if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->info) { - lua_assert(fs->f->upvalues[i] == name); - return i; - } - } - /* new one */ - luaX_checklimit(fs->ls, f->nups + 1, MAXUPVALUES, "upvalues"); - luaM_growvector(fs->L, fs->f->upvalues, f->nups, fs->f->sizeupvalues, - TString *, MAX_INT, ""); - fs->f->upvalues[f->nups] = name; - fs->upvalues[f->nups] = *v; - return f->nups++; -} - - -static int searchvar (FuncState *fs, TString *n) { - int i; - for (i=fs->nactvar-1; i >= 0; i--) { - if (n == getlocvar(fs, i).varname) - return i; - } - return -1; /* not found */ -} - - -static void markupval (FuncState *fs, int level) { - BlockCnt *bl = fs->bl; - while (bl && bl->nactvar > level) bl = bl->previous; - if (bl) bl->upval = 1; -} - - -static void singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { - if (fs == NULL) /* no more levels? */ - init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ - else { - int v = searchvar(fs, n); /* look up at current level */ - if (v >= 0) { - init_exp(var, VLOCAL, v); - if (!base) - markupval(fs, v); /* local will be used as an upval */ - } - else { /* not found at current level; try upper one */ - singlevaraux(fs->prev, n, var, 0); - if (var->k == VGLOBAL) { - if (base) - var->info = luaK_stringK(fs, n); /* info points to global name */ - } - else { /* LOCAL or UPVAL */ - var->info = indexupvalue(fs, n, var); - var->k = VUPVAL; /* upvalue in this level */ - } - } - } -} - - -static TString *singlevar (LexState *ls, expdesc *var, int base) { - TString *varname = str_checkname(ls); - singlevaraux(ls->fs, varname, var, base); - return varname; -} - - -static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { - FuncState *fs = ls->fs; - int extra = nvars - nexps; - if (e->k == VCALL) { - extra++; /* includes call itself */ - if (extra <= 0) extra = 0; - else luaK_reserveregs(fs, extra-1); - luaK_setcallreturns(fs, e, extra); /* call provides the difference */ - } - else { - if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ - if (extra > 0) { - int reg = fs->freereg; - luaK_reserveregs(fs, extra); - luaK_nil(fs, reg, extra); - } - } -} - - -static void code_params (LexState *ls, int nparams, int dots) { - FuncState *fs = ls->fs; - adjustlocalvars(ls, nparams); - luaX_checklimit(ls, fs->nactvar, MAXPARAMS, "parameters"); - fs->f->numparams = cast(lu_byte, fs->nactvar); - fs->f->is_vararg = cast(lu_byte, dots); - if (dots) - create_local(ls, "arg"); - luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ -} - - -static void enterblock (FuncState *fs, BlockCnt *bl, int isbreakable) { - bl->breaklist = NO_JUMP; - bl->isbreakable = isbreakable; - bl->nactvar = fs->nactvar; - bl->upval = 0; - bl->previous = fs->bl; - fs->bl = bl; - lua_assert(fs->freereg == fs->nactvar); -} - - -static void leaveblock (FuncState *fs) { - BlockCnt *bl = fs->bl; - fs->bl = bl->previous; - removevars(fs->ls, bl->nactvar); - if (bl->upval) - luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); - lua_assert(bl->nactvar == fs->nactvar); - fs->freereg = fs->nactvar; /* free registers */ - luaK_patchtohere(fs, bl->breaklist); -} - - -static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { - FuncState *fs = ls->fs; - Proto *f = fs->f; - int i; - luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, - MAXARG_Bx, "constant table overflow"); - f->p[fs->np++] = func->f; - init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); - for (i=0; if->nups; i++) { - OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; - luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); - } -} - - -static void open_func (LexState *ls, FuncState *fs) { - Proto *f = luaF_newproto(ls->L); - fs->f = f; - fs->prev = ls->fs; /* linked list of funcstates */ - fs->ls = ls; - fs->L = ls->L; - ls->fs = fs; - fs->pc = 0; - fs->lasttarget = 0; - fs->jpc = NO_JUMP; - fs->freereg = 0; - fs->nk = 0; - fs->h = luaH_new(ls->L, 0, 0); - fs->np = 0; - fs->nlocvars = 0; - fs->nactvar = 0; - fs->bl = NULL; - f->source = ls->source; - f->maxstacksize = 2; /* registers 0/1 are always valid */ -} - - -static void close_func (LexState *ls) { - lua_State *L = ls->L; - FuncState *fs = ls->fs; - Proto *f = fs->f; - removevars(ls, 0); - luaK_codeABC(fs, OP_RETURN, 0, 1, 0); /* final return */ - luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); - f->sizecode = fs->pc; - luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); - f->sizelineinfo = fs->pc; - luaM_reallocvector(L, f->k, f->sizek, fs->nk, TObject); - f->sizek = fs->nk; - luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); - f->sizep = fs->np; - luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); - f->sizelocvars = fs->nlocvars; - luaM_reallocvector(L, f->upvalues, f->sizeupvalues, f->nups, TString *); - f->sizeupvalues = f->nups; - lua_assert(luaG_checkcode(f)); - lua_assert(fs->bl == NULL); - ls->fs = fs->prev; -} - - -Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff) { - struct LexState lexstate; - struct FuncState funcstate; - lexstate.buff = buff; - lexstate.nestlevel = 0; - luaX_setinput(L, &lexstate, z, luaS_new(L, zname(z))); - open_func(&lexstate, &funcstate); - next(&lexstate); /* read first token */ - chunk(&lexstate); - check_condition(&lexstate, (lexstate.t.token == TK_EOS), " expected"); - close_func(&lexstate); - lua_assert(funcstate.prev == NULL); - lua_assert(funcstate.f->nups == 0); - lua_assert(lexstate.nestlevel == 0); - return funcstate.f; -} - - - -/*============================================================*/ -/* GRAMMAR RULES */ -/*============================================================*/ - - -static void luaY_field (LexState *ls, expdesc *v) { - /* field -> ['.' | ':'] NAME */ - FuncState *fs = ls->fs; - expdesc key; - luaK_exp2anyreg(fs, v); - next(ls); /* skip the dot or colon */ - checkname(ls, &key); - luaK_indexed(fs, v, &key); -} - - -static void luaY_index (LexState *ls, expdesc *v) { - /* index -> '[' expr ']' */ - next(ls); /* skip the '[' */ - expr(ls, v); - luaK_exp2val(ls->fs, v); - check(ls, ']'); -} - - -/* -** {====================================================================== -** Rules for Constructors -** ======================================================================= -*/ - - -struct ConsControl { - expdesc v; /* last list item read */ - expdesc *t; /* table descriptor */ - int nh; /* total number of `record' elements */ - int na; /* total number of array elements */ - int tostore; /* number of array elements pending to be stored */ -}; - - -static void recfield (LexState *ls, struct ConsControl *cc) { - /* recfield -> (NAME | `['exp1`]') = exp1 */ - FuncState *fs = ls->fs; - int reg = ls->fs->freereg; - expdesc key, val; - if (ls->t.token == TK_NAME) { - luaX_checklimit(ls, cc->nh, MAX_INT, "items in a constructor"); - cc->nh++; - checkname(ls, &key); - } - else /* ls->t.token == '[' */ - luaY_index(ls, &key); - check(ls, '='); - luaK_exp2RK(fs, &key); - expr(ls, &val); - luaK_codeABC(fs, OP_SETTABLE, cc->t->info, luaK_exp2RK(fs, &key), - luaK_exp2RK(fs, &val)); - fs->freereg = reg; /* free registers */ -} - - -static void closelistfield (FuncState *fs, struct ConsControl *cc) { - if (cc->v.k == VVOID) return; /* there is no list item */ - luaK_exp2nextreg(fs, &cc->v); - cc->v.k = VVOID; - if (cc->tostore == LFIELDS_PER_FLUSH) { - luaK_codeABx(fs, OP_SETLIST, cc->t->info, cc->na-1); /* flush */ - cc->tostore = 0; /* no more items pending */ - fs->freereg = cc->t->info + 1; /* free registers */ - } -} - - -static void lastlistfield (FuncState *fs, struct ConsControl *cc) { - if (cc->tostore == 0) return; - if (cc->v.k == VCALL) { - luaK_setcallreturns(fs, &cc->v, LUA_MULTRET); - luaK_codeABx(fs, OP_SETLISTO, cc->t->info, cc->na-1); - } - else { - if (cc->v.k != VVOID) - luaK_exp2nextreg(fs, &cc->v); - luaK_codeABx(fs, OP_SETLIST, cc->t->info, cc->na-1); - } - fs->freereg = cc->t->info + 1; /* free registers */ -} - - -static void listfield (LexState *ls, struct ConsControl *cc) { - expr(ls, &cc->v); - luaX_checklimit(ls, cc->na, MAXARG_Bx, "items in a constructor"); - cc->na++; - cc->tostore++; -} - - -static void constructor (LexState *ls, expdesc *t) { - /* constructor -> ?? */ - FuncState *fs = ls->fs; - int line = ls->linenumber; - int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); - struct ConsControl cc; - cc.na = cc.nh = cc.tostore = 0; - cc.t = t; - init_exp(t, VRELOCABLE, pc); - init_exp(&cc.v, VVOID, 0); /* no value (yet) */ - luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ - check(ls, '{'); - do { - lua_assert(cc.v.k == VVOID || cc.tostore > 0); - testnext(ls, ';'); /* compatibility only */ - if (ls->t.token == '}') break; - closelistfield(fs, &cc); - switch(ls->t.token) { - case TK_NAME: { /* may be listfields or recfields */ - lookahead(ls); - if (ls->lookahead.token != '=') /* expression? */ - listfield(ls, &cc); - else - recfield(ls, &cc); - break; - } - case '[': { /* constructor_item -> recfield */ - recfield(ls, &cc); - break; - } - default: { /* constructor_part -> listfield */ - listfield(ls, &cc); - break; - } - } - } while (testnext(ls, ',') || testnext(ls, ';')); - check_match(ls, '}', '{', line); - lastlistfield(fs, &cc); - SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ - SETARG_C(fs->f->code[pc], luaO_log2(cc.nh)+1); /* set initial table size */ -} - -/* }====================================================================== */ - - - -static void parlist (LexState *ls) { - /* parlist -> [ param { `,' param } ] */ - int nparams = 0; - int dots = 0; - if (ls->t.token != ')') { /* is `parlist' not empty? */ - do { - switch (ls->t.token) { - case TK_DOTS: dots = 1; next(ls); break; - case TK_NAME: new_localvar(ls, str_checkname(ls), nparams++); break; - default: luaX_syntaxerror(ls, " or `...' expected"); - } - } while (!dots && testnext(ls, ',')); - } - code_params(ls, nparams, dots); -} - - -static void body (LexState *ls, expdesc *e, int needself, int line) { - /* body -> `(' parlist `)' chunk END */ - FuncState new_fs; - open_func(ls, &new_fs); - new_fs.f->lineDefined = line; - check(ls, '('); - if (needself) - create_local(ls, "self"); - parlist(ls); - check(ls, ')'); - chunk(ls); - check_match(ls, TK_END, TK_FUNCTION, line); - close_func(ls); - pushclosure(ls, &new_fs, e); -} - - -static int explist1 (LexState *ls, expdesc *v) { - /* explist1 -> expr { `,' expr } */ - int n = 1; /* at least one expression */ - expr(ls, v); - while (testnext(ls, ',')) { - luaK_exp2nextreg(ls->fs, v); - expr(ls, v); - n++; - } - return n; -} - - -static void funcargs (LexState *ls, expdesc *f) { - FuncState *fs = ls->fs; - expdesc args; - int base, nparams; - int line = ls->linenumber; - switch (ls->t.token) { - case '(': { /* funcargs -> `(' [ explist1 ] `)' */ - if (line != ls->lastline) - luaX_syntaxerror(ls,"ambiguous syntax (function call x new statement)"); - next(ls); - if (ls->t.token == ')') /* arg list is empty? */ - args.k = VVOID; - else { - explist1(ls, &args); - luaK_setcallreturns(fs, &args, LUA_MULTRET); - } - check_match(ls, ')', '(', line); - break; - } - case '{': { /* funcargs -> constructor */ - constructor(ls, &args); - break; - } - case TK_STRING: { /* funcargs -> STRING */ - codestring(ls, &args, ls->t.seminfo.ts); - next(ls); /* must use `seminfo' before `next' */ - break; - } - default: { - luaX_syntaxerror(ls, "function arguments expected"); - return; - } - } - lua_assert(f->k == VNONRELOC); - base = f->info; /* base register for call */ - if (args.k == VCALL) - nparams = LUA_MULTRET; /* open call */ - else { - if (args.k != VVOID) - luaK_exp2nextreg(fs, &args); /* close last argument */ - nparams = fs->freereg - (base+1); - } - init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); - luaK_fixline(fs, line); - fs->freereg = base+1; /* call remove function and arguments and leaves - (unless changed) one result */ -} - - - - -/* -** {====================================================================== -** Expression parsing -** ======================================================================= -*/ - - -static void prefixexp (LexState *ls, expdesc *v) { - /* prefixexp -> NAME | '(' expr ')' */ - switch (ls->t.token) { - case '(': { - int line = ls->linenumber; - next(ls); - expr(ls, v); - check_match(ls, ')', '(', line); - luaK_dischargevars(ls->fs, v); - return; - } - case TK_NAME: { - singlevar(ls, v, 1); - return; - } -#ifdef LUA_COMPATUPSYNTAX - case '%': { /* for compatibility only */ - TString *varname; - int line = ls->linenumber; - next(ls); /* skip `%' */ - varname = singlevar(ls, v, 1); - if (v->k != VUPVAL) - luaX_errorline(ls, "global upvalues are obsolete", - getstr(varname), line); - return; - } -#endif - default: { - luaX_syntaxerror(ls, "unexpected symbol"); - return; - } - } -} - - -static void primaryexp (LexState *ls, expdesc *v) { - /* primaryexp -> - prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */ - FuncState *fs = ls->fs; - prefixexp(ls, v); - for (;;) { - switch (ls->t.token) { - case '.': { /* field */ - luaY_field(ls, v); - break; - } - case '[': { /* `[' exp1 `]' */ - expdesc key; - luaK_exp2anyreg(fs, v); - luaY_index(ls, &key); - luaK_indexed(fs, v, &key); - break; - } - case ':': { /* `:' NAME funcargs */ - expdesc key; - next(ls); - checkname(ls, &key); - luaK_self(fs, v, &key); - funcargs(ls, v); - break; - } - case '(': case TK_STRING: case '{': { /* funcargs */ - luaK_exp2nextreg(fs, v); - funcargs(ls, v); - break; - } - default: return; - } - } -} - - -static void simpleexp (LexState *ls, expdesc *v) { - /* simpleexp -> NUMBER | STRING | NIL | constructor | FUNCTION body - | primaryexp */ - switch (ls->t.token) { - case TK_NUMBER: { - init_exp(v, VK, luaK_numberK(ls->fs, ls->t.seminfo.r)); - next(ls); /* must use `seminfo' before `next' */ - break; - } - case TK_STRING: { - codestring(ls, v, ls->t.seminfo.ts); - next(ls); /* must use `seminfo' before `next' */ - break; - } - case TK_NIL: { - init_exp(v, VNIL, 0); - next(ls); - break; - } - case TK_TRUE: { - init_exp(v, VTRUE, 0); - next(ls); - break; - } - case TK_FALSE: { - init_exp(v, VFALSE, 0); - next(ls); - break; - } - case '{': { /* constructor */ - constructor(ls, v); - break; - } - case TK_FUNCTION: { - next(ls); - body(ls, v, 0, ls->linenumber); - break; - } - default: { - primaryexp(ls, v); - break; - } - } -} - - -static UnOpr getunopr (int op) { - switch (op) { - case TK_NOT: return OPR_NOT; - case '-': return OPR_MINUS; - default: return OPR_NOUNOPR; - } -} - - -static BinOpr getbinopr (int op) { - switch (op) { - case '+': return OPR_ADD; - case '-': return OPR_SUB; - case '*': return OPR_MULT; - case '/': return OPR_DIV; - case '^': return OPR_POW; - case TK_CONCAT: return OPR_CONCAT; - case TK_NE: return OPR_NE; - case TK_EQ: return OPR_EQ; - case '<': return OPR_LT; - case TK_LE: return OPR_LE; - case '>': return OPR_GT; - case TK_GE: return OPR_GE; - case TK_AND: return OPR_AND; - case TK_OR: return OPR_OR; - default: return OPR_NOBINOPR; - } -} - - -static const struct { - lu_byte left; /* left priority for each binary operator */ - lu_byte right; /* right priority */ -} priority[] = { /* ORDER OPR */ - {6, 6}, {6, 6}, {7, 7}, {7, 7}, /* arithmetic */ - {10, 9}, {5, 4}, /* power and concat (right associative) */ - {3, 3}, {3, 3}, /* equality */ - {3, 3}, {3, 3}, {3, 3}, {3, 3}, /* order */ - {2, 2}, {1, 1} /* logical (and/or) */ -}; - -#define UNARY_PRIORITY 8 /* priority for unary operators */ - - -/* -** subexpr -> (simplexep | unop subexpr) { binop subexpr } -** where `binop' is any binary operator with a priority higher than `limit' -*/ -static BinOpr subexpr (LexState *ls, expdesc *v, int limit) { - BinOpr op; - UnOpr uop; - enterlevel(ls); - uop = getunopr(ls->t.token); - if (uop != OPR_NOUNOPR) { - next(ls); - subexpr(ls, v, UNARY_PRIORITY); - luaK_prefix(ls->fs, uop, v); - } - else simpleexp(ls, v); - /* expand while operators have priorities higher than `limit' */ - op = getbinopr(ls->t.token); - while (op != OPR_NOBINOPR && cast(int, priority[op].left) > limit) { - expdesc v2; - BinOpr nextop; - next(ls); - luaK_infix(ls->fs, op, v); - /* read sub-expression with higher priority */ - nextop = subexpr(ls, &v2, cast(int, priority[op].right)); - luaK_posfix(ls->fs, op, v, &v2); - op = nextop; - } - leavelevel(ls); - return op; /* return first untreated operator */ -} - - -static void expr (LexState *ls, expdesc *v) { - subexpr(ls, v, -1); -} - -/* }==================================================================== */ - - - -/* -** {====================================================================== -** Rules for Statements -** ======================================================================= -*/ - - -static int block_follow (int token) { - switch (token) { - case TK_ELSE: case TK_ELSEIF: case TK_END: - case TK_UNTIL: case TK_EOS: - return 1; - default: return 0; - } -} - - -static void block (LexState *ls) { - /* block -> chunk */ - FuncState *fs = ls->fs; - BlockCnt bl; - enterblock(fs, &bl, 0); - chunk(ls); - lua_assert(bl.breaklist == NO_JUMP); - leaveblock(fs); -} - - -/* -** structure to chain all variables in the left-hand side of an -** assignment -*/ -struct LHS_assign { - struct LHS_assign *prev; - expdesc v; /* variable (global, local, upvalue, or indexed) */ -}; - - -/* -** check whether, in an assignment to a local variable, the local variable -** is needed in a previous assignment (to a table). If so, save original -** local value in a safe place and use this safe copy in the previous -** assignment. -*/ -static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { - FuncState *fs = ls->fs; - int extra = fs->freereg; /* eventual position to save local variable */ - int conflict = 0; - for (; lh; lh = lh->prev) { - if (lh->v.k == VINDEXED) { - if (lh->v.info == v->info) { /* conflict? */ - conflict = 1; - lh->v.info = extra; /* previous assignment will use safe copy */ - } - if (lh->v.aux == v->info) { /* conflict? */ - conflict = 1; - lh->v.aux = extra; /* previous assignment will use safe copy */ - } - } - } - if (conflict) { - luaK_codeABC(fs, OP_MOVE, fs->freereg, v->info, 0); /* make copy */ - luaK_reserveregs(fs, 1); - } -} - - -static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { - expdesc e; - check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, - "syntax error"); - if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */ - struct LHS_assign nv; - nv.prev = lh; - primaryexp(ls, &nv.v); - if (nv.v.k == VLOCAL) - check_conflict(ls, lh, &nv.v); - assignment(ls, &nv, nvars+1); - } - else { /* assignment -> `=' explist1 */ - int nexps; - check(ls, '='); - nexps = explist1(ls, &e); - if (nexps != nvars) { - adjust_assign(ls, nvars, nexps, &e); - if (nexps > nvars) - ls->fs->freereg -= nexps - nvars; /* remove extra values */ - } - else { - luaK_setcallreturns(ls->fs, &e, 1); /* close last expression */ - luaK_storevar(ls->fs, &lh->v, &e); - return; /* avoid default */ - } - } - init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ - luaK_storevar(ls->fs, &lh->v, &e); -} - - -static void cond (LexState *ls, expdesc *v) { - /* cond -> exp */ - expr(ls, v); /* read condition */ - if (v->k == VNIL) v->k = VFALSE; /* `falses' are all equal here */ - luaK_goiftrue(ls->fs, v); - luaK_patchtohere(ls->fs, v->t); -} - - -/* -** The while statement optimizes its code by coding the condition -** after its body (and thus avoiding one jump in the loop). -*/ - -/* -** maximum size of expressions for optimizing `while' code -*/ -#ifndef MAXEXPWHILE -#define MAXEXPWHILE 100 -#endif - -/* -** the call `luaK_goiffalse' may grow the size of an expression by -** at most this: -*/ -#define EXTRAEXP 5 - -static void whilestat (LexState *ls, int line) { - /* whilestat -> WHILE cond DO block END */ - Instruction codeexp[MAXEXPWHILE + EXTRAEXP]; - int lineexp; - int i; - int sizeexp; - FuncState *fs = ls->fs; - int whileinit, blockinit, expinit; - expdesc v; - BlockCnt bl; - next(ls); /* skip WHILE */ - whileinit = luaK_jump(fs); /* jump to condition (which will be moved) */ - expinit = luaK_getlabel(fs); - expr(ls, &v); /* parse condition */ - if (v.k == VK) v.k = VTRUE; /* `trues' are all equal here */ - lineexp = ls->linenumber; - luaK_goiffalse(fs, &v); - luaK_concat(fs, &v.f, fs->jpc); - fs->jpc = NO_JUMP; - sizeexp = fs->pc - expinit; /* size of expression code */ - if (sizeexp > MAXEXPWHILE) - luaX_syntaxerror(ls, "`while' condition too complex"); - for (i = 0; i < sizeexp; i++) /* save `exp' code */ - codeexp[i] = fs->f->code[expinit + i]; - fs->pc = expinit; /* remove `exp' code */ - enterblock(fs, &bl, 1); - check(ls, TK_DO); - blockinit = luaK_getlabel(fs); - block(ls); - luaK_patchtohere(fs, whileinit); /* initial jump jumps to here */ - /* move `exp' back to code */ - if (v.t != NO_JUMP) v.t += fs->pc - expinit; - if (v.f != NO_JUMP) v.f += fs->pc - expinit; - for (i=0; i REPEAT block UNTIL cond */ - FuncState *fs = ls->fs; - int repeat_init = luaK_getlabel(fs); - expdesc v; - BlockCnt bl; - enterblock(fs, &bl, 1); - next(ls); - block(ls); - check_match(ls, TK_UNTIL, TK_REPEAT, line); - cond(ls, &v); - luaK_patchlist(fs, v.f, repeat_init); - leaveblock(fs); -} - - -static int exp1 (LexState *ls) { - expdesc e; - int k; - expr(ls, &e); - k = e.k; - luaK_exp2nextreg(ls->fs, &e); - return k; -} - - -static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { - BlockCnt bl; - FuncState *fs = ls->fs; - int prep, endfor; - adjustlocalvars(ls, nvars); /* scope for all variables */ - check(ls, TK_DO); - enterblock(fs, &bl, 1); /* loop block */ - prep = luaK_getlabel(fs); - block(ls); - luaK_patchtohere(fs, prep-1); - endfor = (isnum) ? luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP) : - luaK_codeABC(fs, OP_TFORLOOP, base, 0, nvars - 3); - luaK_fixline(fs, line); /* pretend that `OP_FOR' starts the loop */ - luaK_patchlist(fs, (isnum) ? endfor : luaK_jump(fs), prep); - leaveblock(fs); -} - - -static void fornum (LexState *ls, TString *varname, int line) { - /* fornum -> NAME = exp1,exp1[,exp1] DO body */ - FuncState *fs = ls->fs; - int base = fs->freereg; - new_localvar(ls, varname, 0); - new_localvarstr(ls, "(for limit)", 1); - new_localvarstr(ls, "(for step)", 2); - check(ls, '='); - exp1(ls); /* initial value */ - check(ls, ','); - exp1(ls); /* limit */ - if (testnext(ls, ',')) - exp1(ls); /* optional step */ - else { /* default step = 1 */ - luaK_codeABx(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1)); - luaK_reserveregs(fs, 1); - } - luaK_codeABC(fs, OP_SUB, fs->freereg - 3, fs->freereg - 3, fs->freereg - 1); - luaK_jump(fs); - forbody(ls, base, line, 3, 1); -} - - -static void forlist (LexState *ls, TString *indexname) { - /* forlist -> NAME {,NAME} IN explist1 DO body */ - FuncState *fs = ls->fs; - expdesc e; - int nvars = 0; - int line; - int base = fs->freereg; - new_localvarstr(ls, "(for generator)", nvars++); - new_localvarstr(ls, "(for state)", nvars++); - new_localvar(ls, indexname, nvars++); - while (testnext(ls, ',')) - new_localvar(ls, str_checkname(ls), nvars++); - check(ls, TK_IN); - line = ls->linenumber; - adjust_assign(ls, nvars, explist1(ls, &e), &e); - luaK_checkstack(fs, 3); /* extra space to call generator */ - luaK_codeAsBx(fs, OP_TFORPREP, base, NO_JUMP); - forbody(ls, base, line, nvars, 0); -} - - -static void forstat (LexState *ls, int line) { - /* forstat -> fornum | forlist */ - FuncState *fs = ls->fs; - TString *varname; - BlockCnt bl; - enterblock(fs, &bl, 0); /* block to control variable scope */ - next(ls); /* skip `for' */ - varname = str_checkname(ls); /* first variable name */ - switch (ls->t.token) { - case '=': fornum(ls, varname, line); break; - case ',': case TK_IN: forlist(ls, varname); break; - default: luaX_syntaxerror(ls, "`=' or `in' expected"); - } - check_match(ls, TK_END, TK_FOR, line); - leaveblock(fs); -} - - -static void test_then_block (LexState *ls, expdesc *v) { - /* test_then_block -> [IF | ELSEIF] cond THEN block */ - next(ls); /* skip IF or ELSEIF */ - cond(ls, v); - check(ls, TK_THEN); - block(ls); /* `then' part */ -} - - -static void ifstat (LexState *ls, int line) { - /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ - FuncState *fs = ls->fs; - expdesc v; - int escapelist = NO_JUMP; - test_then_block(ls, &v); /* IF cond THEN block */ - while (ls->t.token == TK_ELSEIF) { - luaK_concat(fs, &escapelist, luaK_jump(fs)); - luaK_patchtohere(fs, v.f); - test_then_block(ls, &v); /* ELSEIF cond THEN block */ - } - if (ls->t.token == TK_ELSE) { - luaK_concat(fs, &escapelist, luaK_jump(fs)); - luaK_patchtohere(fs, v.f); - next(ls); /* skip ELSE (after patch, for correct line info) */ - block(ls); /* `else' part */ - } - else - luaK_concat(fs, &escapelist, v.f); - luaK_patchtohere(fs, escapelist); - check_match(ls, TK_END, TK_IF, line); -} - - -static void localfunc (LexState *ls) { - expdesc v, b; - FuncState *fs = ls->fs; - new_localvar(ls, str_checkname(ls), 0); - init_exp(&v, VLOCAL, fs->freereg); - luaK_reserveregs(fs, 1); - adjustlocalvars(ls, 1); - body(ls, &b, 0, ls->linenumber); - luaK_storevar(fs, &v, &b); - /* debug information will only see the variable after this point! */ - getlocvar(fs, fs->nactvar - 1).startpc = fs->pc; -} - - -static void localstat (LexState *ls) { - /* stat -> LOCAL NAME {`,' NAME} [`=' explist1] */ - int nvars = 0; - int nexps; - expdesc e; - do { - new_localvar(ls, str_checkname(ls), nvars++); - } while (testnext(ls, ',')); - if (testnext(ls, '=')) - nexps = explist1(ls, &e); - else { - e.k = VVOID; - nexps = 0; - } - adjust_assign(ls, nvars, nexps, &e); - adjustlocalvars(ls, nvars); -} - - -static int funcname (LexState *ls, expdesc *v) { - /* funcname -> NAME {field} [`:' NAME] */ - int needself = 0; - singlevar(ls, v, 1); - while (ls->t.token == '.') - luaY_field(ls, v); - if (ls->t.token == ':') { - needself = 1; - luaY_field(ls, v); - } - return needself; -} - - -static void funcstat (LexState *ls, int line) { - /* funcstat -> FUNCTION funcname body */ - int needself; - expdesc v, b; - next(ls); /* skip FUNCTION */ - needself = funcname(ls, &v); - body(ls, &b, needself, line); - luaK_storevar(ls->fs, &v, &b); - luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ -} - - -static void exprstat (LexState *ls) { - /* stat -> func | assignment */ - FuncState *fs = ls->fs; - struct LHS_assign v; - primaryexp(ls, &v.v); - if (v.v.k == VCALL) { /* stat -> func */ - luaK_setcallreturns(fs, &v.v, 0); /* call statement uses no results */ - } - else { /* stat -> assignment */ - v.prev = NULL; - assignment(ls, &v, 1); - } -} - - -static void retstat (LexState *ls) { - /* stat -> RETURN explist */ - FuncState *fs = ls->fs; - expdesc e; - int first, nret; /* registers with returned values */ - next(ls); /* skip RETURN */ - if (block_follow(ls->t.token) || ls->t.token == ';') - first = nret = 0; /* return no values */ - else { - nret = explist1(ls, &e); /* optional return values */ - if (e.k == VCALL) { - luaK_setcallreturns(fs, &e, LUA_MULTRET); - if (nret == 1) { /* tail call? */ - SET_OPCODE(getcode(fs,&e), OP_TAILCALL); - lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); - } - first = fs->nactvar; - nret = LUA_MULTRET; /* return all values */ - } - else { - if (nret == 1) /* only one single value? */ - first = luaK_exp2anyreg(fs, &e); - else { - luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ - first = fs->nactvar; /* return all `active' values */ - lua_assert(nret == fs->freereg - first); - } - } - } - luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); -} - - -static void breakstat (LexState *ls) { - /* stat -> BREAK [NAME] */ - FuncState *fs = ls->fs; - BlockCnt *bl = fs->bl; - int upval = 0; - next(ls); /* skip BREAK */ - while (bl && !bl->isbreakable) { - upval |= bl->upval; - bl = bl->previous; - } - if (!bl) - luaX_syntaxerror(ls, "no loop to break"); - if (upval) - luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); - luaK_concat(fs, &bl->breaklist, luaK_jump(fs)); -} - - -static int statement (LexState *ls) { - int line = ls->linenumber; /* may be needed for error messages */ - switch (ls->t.token) { - case TK_IF: { /* stat -> ifstat */ - ifstat(ls, line); - return 0; - } - case TK_WHILE: { /* stat -> whilestat */ - whilestat(ls, line); - return 0; - } - case TK_DO: { /* stat -> DO block END */ - next(ls); /* skip DO */ - block(ls); - check_match(ls, TK_END, TK_DO, line); - return 0; - } - case TK_FOR: { /* stat -> forstat */ - forstat(ls, line); - return 0; - } - case TK_REPEAT: { /* stat -> repeatstat */ - repeatstat(ls, line); - return 0; - } - case TK_FUNCTION: { - funcstat(ls, line); /* stat -> funcstat */ - return 0; - } - case TK_LOCAL: { /* stat -> localstat */ - next(ls); /* skip LOCAL */ - if (testnext(ls, TK_FUNCTION)) /* local function? */ - localfunc(ls); - else - localstat(ls); - return 0; - } - case TK_RETURN: { /* stat -> retstat */ - retstat(ls); - return 1; /* must be last statement */ - } - case TK_BREAK: { /* stat -> breakstat */ - breakstat(ls); - return 1; /* must be last statement */ - } - default: { - exprstat(ls); - return 0; /* to avoid warnings */ - } - } -} - - -static void chunk (LexState *ls) { - /* chunk -> { stat [`;'] } */ - int islast = 0; - enterlevel(ls); - while (!islast && !block_follow(ls->t.token)) { - islast = statement(ls); - testnext(ls, ';'); - lua_assert(ls->fs->freereg >= ls->fs->nactvar); - ls->fs->freereg = ls->fs->nactvar; /* free registers */ - } - leavelevel(ls); -} - -/* }====================================================================== */ diff --git a/stepmania/src/lua-5.0/src/lparser.h b/stepmania/src/lua-5.0/src/lparser.h deleted file mode 100644 index a5d315e668..0000000000 --- a/stepmania/src/lua-5.0/src/lparser.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -** $Id$ -** Lua Parser -** See Copyright Notice in lua.h -*/ - -#ifndef lparser_h -#define lparser_h - -#include "llimits.h" -#include "lobject.h" -#include "ltable.h" -#include "lzio.h" - - -/* -** Expression descriptor -*/ - -typedef enum { - VVOID, /* no value */ - VNIL, - VTRUE, - VFALSE, - VK, /* info = index of constant in `k' */ - VLOCAL, /* info = local register */ - VUPVAL, /* info = index of upvalue in `upvalues' */ - VGLOBAL, /* info = index of table; aux = index of global name in `k' */ - VINDEXED, /* info = table register; aux = index register (or `k') */ - VJMP, /* info = instruction pc */ - VRELOCABLE, /* info = instruction pc */ - VNONRELOC, /* info = result register */ - VCALL /* info = result register */ -} expkind; - -typedef struct expdesc { - expkind k; - int info, aux; - int t; /* patch list of `exit when true' */ - int f; /* patch list of `exit when false' */ -} expdesc; - - -struct BlockCnt; /* defined in lparser.c */ - - -/* state needed to generate code for a given function */ -typedef struct FuncState { - Proto *f; /* current function header */ - Table *h; /* table to find (and reuse) elements in `k' */ - struct FuncState *prev; /* enclosing function */ - struct LexState *ls; /* lexical state */ - struct lua_State *L; /* copy of the Lua state */ - struct BlockCnt *bl; /* chain of current blocks */ - int pc; /* next position to code (equivalent to `ncode') */ - int lasttarget; /* `pc' of last `jump target' */ - int jpc; /* list of pending jumps to `pc' */ - int freereg; /* first free register */ - int nk; /* number of elements in `k' */ - int np; /* number of elements in `p' */ - int nlocvars; /* number of elements in `locvars' */ - int nactvar; /* number of active local variables */ - expdesc upvalues[MAXUPVALUES]; /* upvalues */ - int actvar[MAXVARS]; /* declared-variable stack */ -} FuncState; - - -Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff); - - -#endif diff --git a/stepmania/src/lua-5.0/src/lstate.c b/stepmania/src/lua-5.0/src/lstate.c deleted file mode 100644 index 4e39fec3db..0000000000 --- a/stepmania/src/lua-5.0/src/lstate.c +++ /dev/null @@ -1,220 +0,0 @@ -/* -** $Id$ -** Global State -** See Copyright Notice in lua.h -*/ - - -#include - -#define lstate_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lgc.h" -#include "llex.h" -#include "lmem.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" - - -/* -** macro to allow the inclusion of user information in Lua state -*/ -#ifndef LUA_USERSTATE -#define EXTRASPACE 0 -#else -union UEXTRASPACE {L_Umaxalign a; LUA_USERSTATE b;}; -#define EXTRASPACE (sizeof(union UEXTRASPACE)) -#endif - - - -/* -** you can change this function through the official API: -** call `lua_setpanicf' -*/ -static int default_panic (lua_State *L) { - UNUSED(L); - return 0; -} - - -static lua_State *mallocstate (lua_State *L) { - lu_byte *block = (lu_byte *)luaM_malloc(L, sizeof(lua_State) + EXTRASPACE); - if (block == NULL) return NULL; - else { - block += EXTRASPACE; - return cast(lua_State *, block); - } -} - - -static void freestate (lua_State *L, lua_State *L1) { - luaM_free(L, cast(lu_byte *, L1) - EXTRASPACE, - sizeof(lua_State) + EXTRASPACE); -} - - -static void stack_init (lua_State *L1, lua_State *L) { - L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TObject); - L1->stacksize = BASIC_STACK_SIZE + EXTRA_STACK; - L1->top = L1->stack; - L1->stack_last = L1->stack+(L1->stacksize - EXTRA_STACK)-1; - L1->base_ci = luaM_newvector(L, BASIC_CI_SIZE, CallInfo); - L1->ci = L1->base_ci; - L1->ci->state = CI_C; /* not a Lua function */ - setnilvalue(L1->top++); /* `function' entry for this `ci' */ - L1->base = L1->ci->base = L1->top; - L1->ci->top = L1->top + LUA_MINSTACK; - L1->size_ci = BASIC_CI_SIZE; - L1->end_ci = L1->base_ci + L1->size_ci; -} - - -static void freestack (lua_State *L, lua_State *L1) { - luaM_freearray(L, L1->base_ci, L1->size_ci, CallInfo); - luaM_freearray(L, L1->stack, L1->stacksize, TObject); -} - - -/* -** open parts that may cause memory-allocation errors -*/ -static void f_luaopen (lua_State *L, void *ud) { - /* create a new global state */ - global_State *g = luaM_new(NULL, global_State); - UNUSED(ud); - if (g == NULL) luaD_throw(L, LUA_ERRMEM); - L->l_G = g; - g->mainthread = L; - g->GCthreshold = 0; /* mark it as unfinished state */ - g->strt.size = 0; - g->strt.nuse = 0; - g->strt.hash = NULL; - setnilvalue(defaultmeta(L)); - setnilvalue(registry(L)); - luaZ_initbuffer(L, &g->buff); - g->panic = default_panic; - g->rootgc = NULL; - g->rootudata = NULL; - g->tmudata = NULL; - setnilvalue(gkey(g->dummynode)); - setnilvalue(gval(g->dummynode)); - g->dummynode->next = NULL; - g->nblocks = sizeof(lua_State) + sizeof(global_State); - stack_init(L, L); /* init stack */ - /* create default meta table with a dummy table, and then close the loop */ - defaultmeta(L)->tt = LUA_TTABLE; - sethvalue(defaultmeta(L), luaH_new(L, 0, 0)); - hvalue(defaultmeta(L))->metatable = hvalue(defaultmeta(L)); - sethvalue(gt(L), luaH_new(L, 0, 4)); /* table of globals */ - sethvalue(registry(L), luaH_new(L, 4, 4)); /* registry */ - luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ - luaT_init(L); - luaX_init(L); - luaS_fix(luaS_newliteral(L, MEMERRMSG)); - g->GCthreshold = 4*G(L)->nblocks; -} - - -static void preinit_state (lua_State *L) { - L->stack = NULL; - L->stacksize = 0; - L->errorJmp = NULL; - L->hook = NULL; - L->hookmask = L->hookinit = 0; - L->basehookcount = 0; - L->allowhook = 1; - resethookcount(L); - L->openupval = NULL; - L->size_ci = 0; - L->nCcalls = 0; - L->base_ci = L->ci = NULL; - L->errfunc = 0; - setnilvalue(gt(L)); -} - - -static void close_state (lua_State *L) { - luaF_close(L, L->stack); /* close all upvalues for this thread */ - if (G(L)) { /* close global state */ - luaC_sweep(L, 1); /* collect all elements */ - lua_assert(G(L)->rootgc == NULL); - lua_assert(G(L)->rootudata == NULL); - luaS_freeall(L); - luaZ_freebuffer(L, &G(L)->buff); - } - freestack(L, L); - if (G(L)) { - lua_assert(G(L)->nblocks == sizeof(lua_State) + sizeof(global_State)); - luaM_freelem(NULL, G(L)); - } - freestate(NULL, L); -} - - -lua_State *luaE_newthread (lua_State *L) { - lua_State *L1 = mallocstate(L); - luaC_link(L, valtogco(L1), LUA_TTHREAD); - preinit_state(L1); - L1->l_G = L->l_G; - stack_init(L1, L); /* init stack */ - setobj2n(gt(L1), gt(L)); /* share table of globals */ - return L1; -} - - -void luaE_freethread (lua_State *L, lua_State *L1) { - luaF_close(L1, L1->stack); /* close all upvalues for this thread */ - lua_assert(L1->openupval == NULL); - freestack(L, L1); - freestate(L, L1); -} - - -LUA_API lua_State *lua_open (void) { - lua_State *L = mallocstate(NULL); - if (L) { /* allocation OK? */ - L->tt = LUA_TTHREAD; - L->marked = 0; - L->next = L->gclist = NULL; - preinit_state(L); - L->l_G = NULL; - if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { - /* memory allocation error: free partial state */ - close_state(L); - L = NULL; - } - } - lua_userstateopen(L); - return L; -} - - -static void callallgcTM (lua_State *L, void *ud) { - UNUSED(ud); - luaC_callGCTM(L); /* call GC metamethods for all udata */ -} - - -LUA_API void lua_close (lua_State *L) { - lua_lock(L); - L = G(L)->mainthread; /* only the main thread can be closed */ - luaF_close(L, L->stack); /* close all upvalues for this thread */ - luaC_separateudata(L); /* separate udata that have GC metamethods */ - L->errfunc = 0; /* no error function during GC metamethods */ - do { /* repeat until no more errors */ - L->ci = L->base_ci; - L->base = L->top = L->ci->base; - L->nCcalls = 0; - } while (luaD_rawrunprotected(L, callallgcTM, NULL) != 0); - lua_assert(G(L)->tmudata == NULL); - close_state(L); -} - diff --git a/stepmania/src/lua-5.0/src/lstate.h b/stepmania/src/lua-5.0/src/lstate.h deleted file mode 100644 index 9cdf46a7dd..0000000000 --- a/stepmania/src/lua-5.0/src/lstate.h +++ /dev/null @@ -1,195 +0,0 @@ -/* -** $Id$ -** Global State -** See Copyright Notice in lua.h -*/ - -#ifndef lstate_h -#define lstate_h - -#include "lua.h" - -#include "lobject.h" -#include "ltm.h" -#include "lzio.h" - - -/* -** macros for thread synchronization inside Lua core machine: -** all accesses to the global state and to global objects are synchronized. -** Because threads can read the stack of other threads -** (when running garbage collection), -** a thread must also synchronize any write-access to its own stack. -** Unsynchronized accesses are allowed only when reading its own stack, -** or when reading immutable fields from global objects -** (such as string values and udata values). -*/ -#ifndef lua_lock -#define lua_lock(L) ((void) 0) -#endif - -#ifndef lua_unlock -#define lua_unlock(L) ((void) 0) -#endif - - -#ifndef lua_userstateopen -#define lua_userstateopen(l) -#endif - - - -struct lua_longjmp; /* defined in ldo.c */ - - -/* default meta table (both for tables and udata) */ -#define defaultmeta(L) (&G(L)->_defaultmeta) - -/* table of globals */ -#define gt(L) (&L->_gt) - -/* registry */ -#define registry(L) (&G(L)->_registry) - - -/* extra stack space to handle TM calls and some other extras */ -#define EXTRA_STACK 5 - - -#define BASIC_CI_SIZE 8 - -#define BASIC_STACK_SIZE (2*LUA_MINSTACK) - - - -typedef struct stringtable { - GCObject **hash; - ls_nstr nuse; /* number of elements */ - int size; -} stringtable; - - -/* -** informations about a call -*/ -typedef struct CallInfo { - StkId base; /* base for called function */ - StkId top; /* top for this function */ - int state; /* bit fields; see below */ - union { - struct { /* for Lua functions */ - const Instruction *savedpc; - const Instruction **pc; /* points to `pc' variable in `luaV_execute' */ - int tailcalls; /* number of tail calls lost under this entry */ - } l; - struct { /* for C functions */ - int dummy; /* just to avoid an empty struct */ - } c; - } u; -} CallInfo; - - -/* -** bit fields for `CallInfo.state' -*/ -#define CI_C (1<<0) /* 1 if function is a C function */ -/* 1 if (Lua) function has an active `luaV_execute' running it */ -#define CI_HASFRAME (1<<1) -/* 1 if Lua function is calling another Lua function (and therefore its - `pc' is being used by the other, and therefore CI_SAVEDPC is 1 too) */ -#define CI_CALLING (1<<2) -#define CI_SAVEDPC (1<<3) /* 1 if `savedpc' is updated */ -#define CI_YIELD (1<<4) /* 1 if thread is suspended */ - - -#define ci_func(ci) (clvalue((ci)->base - 1)) - - -/* -** `global state', shared by all threads of this state -*/ -typedef struct global_State { - stringtable strt; /* hash table for strings */ - GCObject *rootgc; /* list of (almost) all collectable objects */ - GCObject *rootudata; /* (separated) list of all userdata */ - GCObject *tmudata; /* list of userdata to be GC */ - Mbuffer buff; /* temporary buffer for string concatentation */ - lu_mem GCthreshold; - lu_mem nblocks; /* number of `bytes' currently allocated */ - lua_CFunction panic; /* to be called in unprotected errors */ - TObject _registry; - TObject _defaultmeta; - struct lua_State *mainthread; - Node dummynode[1]; /* common node array for all empty tables */ - TString *tmname[TM_N]; /* array with tag-method names */ -} global_State; - - -/* -** `per thread' state -*/ -struct lua_State { - CommonHeader; - StkId top; /* first free slot in the stack */ - StkId base; /* base of current function */ - global_State *l_G; - CallInfo *ci; /* call info for current function */ - StkId stack_last; /* last free slot in the stack */ - StkId stack; /* stack base */ - int stacksize; - CallInfo *end_ci; /* points after end of ci array*/ - CallInfo *base_ci; /* array of CallInfo's */ - unsigned short size_ci; /* size of array `base_ci' */ - unsigned short nCcalls; /* number of nested C calls */ - lu_byte hookmask; - lu_byte allowhook; - lu_byte hookinit; - int basehookcount; - int hookcount; - lua_Hook hook; - TObject _gt; /* table of globals */ - GCObject *openupval; /* list of open upvalues in this stack */ - GCObject *gclist; - struct lua_longjmp *errorJmp; /* current error recover point */ - ptrdiff_t errfunc; /* current error handling function (stack index) */ -}; - - -#define G(L) (L->l_G) - - -/* -** Union of all collectable objects -*/ -union GCObject { - GCheader gch; - union TString ts; - union Udata u; - union Closure cl; - struct Table h; - struct Proto p; - struct UpVal uv; - struct lua_State th; /* thread */ -}; - - -/* macros to convert a GCObject into a specific value */ -#define gcotots(o) check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts)) -#define gcotou(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) -#define gcotocl(o) check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl)) -#define gcotoh(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) -#define gcotop(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) -#define gcotouv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) -#define ngcotouv(o) \ - check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv)) -#define gcototh(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) - -/* macro to convert any value into a GCObject */ -#define valtogco(v) (cast(GCObject *, (v))) - - -lua_State *luaE_newthread (lua_State *L); -void luaE_freethread (lua_State *L, lua_State *L1); - -#endif - diff --git a/stepmania/src/lua-5.0/src/lstring.c b/stepmania/src/lua-5.0/src/lstring.c deleted file mode 100644 index ad68f26f14..0000000000 --- a/stepmania/src/lua-5.0/src/lstring.c +++ /dev/null @@ -1,102 +0,0 @@ -/* -** $Id$ -** String table (keeps all strings handled by Lua) -** See Copyright Notice in lua.h -*/ - - -#include - -#define lstring_c - -#include "lua.h" - -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" -#include "lstring.h" - - - -void luaS_freeall (lua_State *L) { - lua_assert(G(L)->strt.nuse==0); - luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); -} - - -void luaS_resize (lua_State *L, int newsize) { - GCObject **newhash = luaM_newvector(L, newsize, GCObject *); - stringtable *tb = &G(L)->strt; - int i; - for (i=0; isize; i++) { - GCObject *p = tb->hash[i]; - while (p) { /* for each node in the list */ - GCObject *next = p->gch.next; /* save next */ - lu_hash h = gcotots(p)->tsv.hash; - int h1 = lmod(h, newsize); /* new position */ - lua_assert(cast(int, h%newsize) == lmod(h, newsize)); - p->gch.next = newhash[h1]; /* chain it */ - newhash[h1] = p; - p = next; - } - } - luaM_freearray(L, tb->hash, tb->size, TString *); - tb->size = newsize; - tb->hash = newhash; -} - - -static TString *newlstr (lua_State *L, const char *str, size_t l, lu_hash h) { - TString *ts = cast(TString *, luaM_malloc(L, sizestring(l))); - stringtable *tb; - ts->tsv.len = l; - ts->tsv.hash = h; - ts->tsv.marked = 0; - ts->tsv.tt = LUA_TSTRING; - ts->tsv.reserved = 0; - memcpy(ts+1, str, l*sizeof(char)); - ((char *)(ts+1))[l] = '\0'; /* ending 0 */ - tb = &G(L)->strt; - h = lmod(h, tb->size); - ts->tsv.next = tb->hash[h]; /* chain new entry */ - tb->hash[h] = valtogco(ts); - tb->nuse++; - if (tb->nuse > cast(ls_nstr, tb->size) && tb->size <= MAX_INT/2) - luaS_resize(L, tb->size*2); /* too crowded */ - return ts; -} - - -TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { - GCObject *o; - lu_hash h = (lu_hash)l; /* seed */ - size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ - size_t l1; - for (l1=l; l1>=step; l1-=step) /* compute hash */ - h = h ^ ((h<<5)+(h>>2)+(unsigned char)(str[l1-1])); - for (o = G(L)->strt.hash[lmod(h, G(L)->strt.size)]; - o != NULL; - o = o->gch.next) { - TString *ts = gcotots(o); - if (ts->tsv.len == l && (memcmp(str, getstr(ts), l) == 0)) - return ts; - } - return newlstr(L, str, l, h); /* not found */ -} - - -Udata *luaS_newudata (lua_State *L, size_t s) { - Udata *u; - u = cast(Udata *, luaM_malloc(L, sizeudata(s))); - u->uv.marked = (1<<1); /* is not finalized */ - u->uv.tt = LUA_TUSERDATA; - u->uv.len = s; - u->uv.metatable = hvalue(defaultmeta(L)); - /* chain it on udata list */ - u->uv.next = G(L)->rootudata; - G(L)->rootudata = valtogco(u); - return u; -} - diff --git a/stepmania/src/lua-5.0/src/lstring.h b/stepmania/src/lua-5.0/src/lstring.h deleted file mode 100644 index 64583a93bb..0000000000 --- a/stepmania/src/lua-5.0/src/lstring.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -** $Id$ -** String table (keep all strings handled by Lua) -** See Copyright Notice in lua.h -*/ - -#ifndef lstring_h -#define lstring_h - - -#include "lobject.h" -#include "lstate.h" - - - -#define sizestring(l) (cast(lu_mem, sizeof(union TString))+ \ - (cast(lu_mem, l)+1)*sizeof(char)) - -#define sizeudata(l) (cast(lu_mem, sizeof(union Udata))+(l)) - -#define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) -#define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ - (sizeof(s)/sizeof(char))-1)) - -#define luaS_fix(s) ((s)->tsv.marked |= (1<<4)) - -void luaS_resize (lua_State *L, int newsize); -Udata *luaS_newudata (lua_State *L, size_t s); -void luaS_freeall (lua_State *L); -TString *luaS_newlstr (lua_State *L, const char *str, size_t l); - - -#endif diff --git a/stepmania/src/lua-5.0/src/ltable.c b/stepmania/src/lua-5.0/src/ltable.c deleted file mode 100644 index 93fe2cee91..0000000000 --- a/stepmania/src/lua-5.0/src/ltable.c +++ /dev/null @@ -1,509 +0,0 @@ -/* -** $Id$ -** Lua tables (hash) -** See Copyright Notice in lua.h -*/ - - -/* -** Implementation of tables (aka arrays, objects, or hash tables). -** Tables keep its elements in two parts: an array part and a hash part. -** Non-negative integer keys are all candidates to be kept in the array -** part. The actual size of the array is the largest `n' such that at -** least half the slots between 0 and n are in use. -** Hash uses a mix of chained scatter table with Brent's variation. -** A main invariant of these tables is that, if an element is not -** in its main position (i.e. the `original' position that its hash gives -** to it), then the colliding element is in its own main position. -** In other words, there are collisions only when two elements have the -** same main position (i.e. the same hash values for that table size). -** Because of that, the load factor of these tables can be 100% without -** performance penalties. -*/ - -#include - -#define ltable_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lgc.h" -#include "lmem.h" -#include "lobject.h" -#include "lstate.h" -#include "ltable.h" - - -/* -** max size of array part is 2^MAXBITS -*/ -#if BITS_INT > 26 -#define MAXBITS 24 -#else -#define MAXBITS (BITS_INT-2) -#endif - -/* check whether `x' < 2^MAXBITS */ -#define toobig(x) ((((x)-1) >> MAXBITS) != 0) - - -/* function to convert a lua_Number to int (with any rounding method) */ -#ifndef lua_number2int -#define lua_number2int(i,n) ((i)=(int)(n)) -#endif - - -#define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) - -#define hashstr(t,str) hashpow2(t, (str)->tsv.hash) -#define hashboolean(t,p) hashpow2(t, p) - - -/* -** for some types, it is better to avoid modulus by power of 2, as -** they tend to have many 2 factors. -*/ -#define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) - - -#define hashpointer(t,p) hashmod(t, IntPoint(p)) - - -/* -** number of ints inside a lua_Number -*/ -#define numints cast(int, sizeof(lua_Number)/sizeof(int)) - - -/* -** hash for lua_Numbers -*/ -static Node *hashnum (const Table *t, lua_Number n) { - unsigned int a[numints]; - int i; - n += 1; /* normalize number (avoid -0) */ - lua_assert(sizeof(a) <= sizeof(n)); - memcpy(a, &n, sizeof(a)); - for (i = 1; i < numints; i++) a[0] += a[i]; - return hashmod(t, cast(lu_hash, a[0])); -} - - - -/* -** returns the `main' position of an element in a table (that is, the index -** of its hash value) -*/ -Node *luaH_mainposition (const Table *t, const TObject *key) { - switch (ttype(key)) { - case LUA_TNUMBER: - return hashnum(t, nvalue(key)); - case LUA_TSTRING: - return hashstr(t, tsvalue(key)); - case LUA_TBOOLEAN: - return hashboolean(t, bvalue(key)); - case LUA_TLIGHTUSERDATA: - return hashpointer(t, pvalue(key)); - default: - return hashpointer(t, gcvalue(key)); - } -} - - -/* -** returns the index for `key' if `key' is an appropriate key to live in -** the array part of the table, -1 otherwise. -*/ -static int arrayindex (const TObject *key) { - if (ttisnumber(key)) { - int k; - lua_number2int(k, (nvalue(key))); - if (cast(lua_Number, k) == nvalue(key) && k >= 1 && !toobig(k)) - return k; - } - return -1; /* `key' did not match some condition */ -} - - -/* -** returns the index of a `key' for table traversals. First goes all -** elements in the array part, then elements in the hash part. The -** beginning and end of a traversal are signalled by -1. -*/ -static int luaH_index (lua_State *L, Table *t, StkId key) { - int i; - if (ttisnil(key)) return -1; /* first iteration */ - i = arrayindex(key); - if (0 <= i && i <= t->sizearray) { /* is `key' inside array part? */ - return i-1; /* yes; that's the index (corrected to C) */ - } - else { - const TObject *v = luaH_get(t, key); - if (v == &luaO_nilobject) - luaG_runerror(L, "invalid key for `next'"); - i = cast(int, (cast(const lu_byte *, v) - - cast(const lu_byte *, gval(gnode(t, 0)))) / sizeof(Node)); - return i + t->sizearray; /* hash elements are numbered after array ones */ - } -} - - -int luaH_next (lua_State *L, Table *t, StkId key) { - int i = luaH_index(L, t, key); /* find original element */ - for (i++; i < t->sizearray; i++) { /* try first array part */ - if (!ttisnil(&t->array[i])) { /* a non-nil value? */ - setnvalue(key, cast(lua_Number, i+1)); - setobj2s(key+1, &t->array[i]); - return 1; - } - } - for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ - if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ - setobj2s(key, gkey(gnode(t, i))); - setobj2s(key+1, gval(gnode(t, i))); - return 1; - } - } - return 0; /* no more elements */ -} - - -/* -** {============================================================= -** Rehash -** ============================================================== -*/ - - -static void computesizes (int nums[], int ntotal, int *narray, int *nhash) { - int i; - int a = nums[0]; /* number of elements smaller than 2^i */ - int na = a; /* number of elements to go to array part */ - int n = (na == 0) ? -1 : 0; /* (log of) optimal size for array part */ - for (i = 1; a < *narray && *narray >= twoto(i-1); i++) { - if (nums[i] > 0) { - a += nums[i]; - if (a >= twoto(i-1)) { /* more than half elements in use? */ - n = i; - na = a; - } - } - } - lua_assert(na <= *narray && *narray <= ntotal); - *nhash = ntotal - na; - *narray = (n == -1) ? 0 : twoto(n); - lua_assert(na <= *narray && na >= *narray/2); -} - - -static void numuse (const Table *t, int *narray, int *nhash) { - int nums[MAXBITS+1]; - int i, lg; - int totaluse = 0; - /* count elements in array part */ - for (i=0, lg=0; lg<=MAXBITS; lg++) { /* for each slice [2^(lg-1) to 2^lg) */ - int ttlg = twoto(lg); /* 2^lg */ - if (ttlg > t->sizearray) { - ttlg = t->sizearray; - if (i >= ttlg) break; - } - nums[lg] = 0; - for (; iarray[i])) { - nums[lg]++; - totaluse++; - } - } - } - for (; lg<=MAXBITS; lg++) nums[lg] = 0; /* reset other counts */ - *narray = totaluse; /* all previous uses were in array part */ - /* count elements in hash part */ - i = sizenode(t); - while (i--) { - Node *n = &t->node[i]; - if (!ttisnil(gval(n))) { - int k = arrayindex(gkey(n)); - if (k >= 0) { /* is `key' an appropriate array index? */ - nums[luaO_log2(k-1)+1]++; /* count as such */ - (*narray)++; - } - totaluse++; - } - } - computesizes(nums, totaluse, narray, nhash); -} - - -static void setarrayvector (lua_State *L, Table *t, int size) { - int i; - luaM_reallocvector(L, t->array, t->sizearray, size, TObject); - for (i=t->sizearray; iarray[i]); - t->sizearray = size; -} - - -static void setnodevector (lua_State *L, Table *t, int lsize) { - int i; - int size = twoto(lsize); - if (lsize > MAXBITS) - luaG_runerror(L, "table overflow"); - if (lsize == 0) { /* no elements to hash part? */ - t->node = G(L)->dummynode; /* use common `dummynode' */ - lua_assert(ttisnil(gkey(t->node))); /* assert invariants: */ - lua_assert(ttisnil(gval(t->node))); - lua_assert(t->node->next == NULL); /* (`dummynode' must be empty) */ - } - else { - t->node = luaM_newvector(L, size, Node); - for (i=0; inode[i].next = NULL; - setnilvalue(gkey(gnode(t, i))); - setnilvalue(gval(gnode(t, i))); - } - } - t->lsizenode = cast(lu_byte, lsize); - t->firstfree = gnode(t, size-1); /* first free position to be used */ -} - - -static void resize (lua_State *L, Table *t, int nasize, int nhsize) { - int i; - int oldasize = t->sizearray; - int oldhsize = t->lsizenode; - Node *nold; - Node temp[1]; - if (oldhsize) - nold = t->node; /* save old hash ... */ - else { /* old hash is `dummynode' */ - lua_assert(t->node == G(L)->dummynode); - temp[0] = t->node[0]; /* copy it to `temp' */ - nold = temp; - setnilvalue(gkey(G(L)->dummynode)); /* restate invariant */ - setnilvalue(gval(G(L)->dummynode)); - lua_assert(G(L)->dummynode->next == NULL); - } - if (nasize > oldasize) /* array part must grow? */ - setarrayvector(L, t, nasize); - /* create new hash part with appropriate size */ - setnodevector(L, t, nhsize); - /* re-insert elements */ - if (nasize < oldasize) { /* array part must shrink? */ - t->sizearray = nasize; - /* re-insert elements from vanishing slice */ - for (i=nasize; iarray[i])) - setobjt2t(luaH_setnum(L, t, i+1), &t->array[i]); - } - /* shrink array */ - luaM_reallocvector(L, t->array, oldasize, nasize, TObject); - } - /* re-insert elements in hash part */ - for (i = twoto(oldhsize) - 1; i >= 0; i--) { - Node *old = nold+i; - if (!ttisnil(gval(old))) - setobjt2t(luaH_set(L, t, gkey(old)), gval(old)); - } - if (oldhsize) - luaM_freearray(L, nold, twoto(oldhsize), Node); /* free old array */ -} - - -static void rehash (lua_State *L, Table *t) { - int nasize, nhsize; - numuse(t, &nasize, &nhsize); /* compute new sizes for array and hash parts */ - resize(L, t, nasize, luaO_log2(nhsize)+1); -} - - - -/* -** }============================================================= -*/ - - -Table *luaH_new (lua_State *L, int narray, int lnhash) { - Table *t = luaM_new(L, Table); - luaC_link(L, valtogco(t), LUA_TTABLE); - t->metatable = hvalue(defaultmeta(L)); - t->flags = cast(lu_byte, ~0); - /* temporary values (kept only if some malloc fails) */ - t->array = NULL; - t->sizearray = 0; - t->lsizenode = 0; - t->node = NULL; - setarrayvector(L, t, narray); - setnodevector(L, t, lnhash); - return t; -} - - -void luaH_free (lua_State *L, Table *t) { - if (t->lsizenode) - luaM_freearray(L, t->node, sizenode(t), Node); - luaM_freearray(L, t->array, t->sizearray, TObject); - luaM_freelem(L, t); -} - - -#if 0 -/* -** try to remove an element from a hash table; cannot move any element -** (because gc can call `remove' during a table traversal) -*/ -void luaH_remove (Table *t, Node *e) { - Node *mp = luaH_mainposition(t, gkey(e)); - if (e != mp) { /* element not in its main position? */ - while (mp->next != e) mp = mp->next; /* find previous */ - mp->next = e->next; /* remove `e' from its list */ - } - else { - if (e->next != NULL) ?? - } - lua_assert(ttisnil(gval(node))); - setnilvalue(gkey(e)); /* clear node `e' */ - e->next = NULL; -} -#endif - - -/* -** inserts a new key into a hash table; first, check whether key's main -** position is free. If not, check whether colliding node is in its main -** position or not: if it is not, move colliding node to an empty place and -** put new key in its main position; otherwise (colliding node is in its main -** position), new key goes to an empty position. -*/ -static TObject *newkey (lua_State *L, Table *t, const TObject *key) { - TObject *val; - Node *mp = luaH_mainposition(t, key); - if (!ttisnil(gval(mp))) { /* main position is not free? */ - Node *othern = luaH_mainposition(t, gkey(mp)); /* `mp' of colliding node */ - Node *n = t->firstfree; /* get a free place */ - if (othern != mp) { /* is colliding node out of its main position? */ - /* yes; move colliding node into free position */ - while (othern->next != mp) othern = othern->next; /* find previous */ - othern->next = n; /* redo the chain with `n' in place of `mp' */ - *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ - mp->next = NULL; /* now `mp' is free */ - setnilvalue(gval(mp)); - } - else { /* colliding node is in its own main position */ - /* new node will go into free position */ - n->next = mp->next; /* chain new position */ - mp->next = n; - mp = n; - } - } - setobj2t(gkey(mp), key); /* write barrier */ - lua_assert(ttisnil(gval(mp))); - for (;;) { /* correct `firstfree' */ - if (ttisnil(gkey(t->firstfree))) - return gval(mp); /* OK; table still has a free place */ - else if (t->firstfree == t->node) break; /* cannot decrement from here */ - else (t->firstfree)--; - } - /* no more free places; must create one */ - setbvalue(gval(mp), 0); /* avoid new key being removed */ - rehash(L, t); /* grow table */ - val = cast(TObject *, luaH_get(t, key)); /* get new position */ - lua_assert(ttisboolean(val)); - setnilvalue(val); - return val; -} - - -/* -** generic search function -*/ -static const TObject *luaH_getany (Table *t, const TObject *key) { - if (ttisnil(key)) return &luaO_nilobject; - else { - Node *n = luaH_mainposition(t, key); - do { /* check whether `key' is somewhere in the chain */ - if (luaO_rawequalObj(gkey(n), key)) return gval(n); /* that's it */ - else n = n->next; - } while (n); - return &luaO_nilobject; - } -} - - -/* -** search function for integers -*/ -const TObject *luaH_getnum (Table *t, int key) { - if (1 <= key && key <= t->sizearray) - return &t->array[key-1]; - else { - lua_Number nk = cast(lua_Number, key); - Node *n = hashnum(t, nk); - do { /* check whether `key' is somewhere in the chain */ - if (ttisnumber(gkey(n)) && nvalue(gkey(n)) == nk) - return gval(n); /* that's it */ - else n = n->next; - } while (n); - return &luaO_nilobject; - } -} - - -/* -** search function for strings -*/ -const TObject *luaH_getstr (Table *t, TString *key) { - Node *n = hashstr(t, key); - do { /* check whether `key' is somewhere in the chain */ - if (ttisstring(gkey(n)) && tsvalue(gkey(n)) == key) - return gval(n); /* that's it */ - else n = n->next; - } while (n); - return &luaO_nilobject; -} - - -/* -** main search function -*/ -const TObject *luaH_get (Table *t, const TObject *key) { - switch (ttype(key)) { - case LUA_TSTRING: return luaH_getstr(t, tsvalue(key)); - case LUA_TNUMBER: { - int k; - lua_number2int(k, (nvalue(key))); - if (cast(lua_Number, k) == nvalue(key)) /* is an integer index? */ - return luaH_getnum(t, k); /* use specialized version */ - /* else go through */ - } - default: return luaH_getany(t, key); - } -} - - -TObject *luaH_set (lua_State *L, Table *t, const TObject *key) { - const TObject *p = luaH_get(t, key); - t->flags = 0; - if (p != &luaO_nilobject) - return cast(TObject *, p); - else { - if (ttisnil(key)) luaG_runerror(L, "table index is nil"); - else if (ttisnumber(key) && nvalue(key) != nvalue(key)) - luaG_runerror(L, "table index is NaN"); - return newkey(L, t, key); - } -} - - -TObject *luaH_setnum (lua_State *L, Table *t, int key) { - const TObject *p = luaH_getnum(t, key); - if (p != &luaO_nilobject) - return cast(TObject *, p); - else { - TObject k; - setnvalue(&k, cast(lua_Number, key)); - return newkey(L, t, &k); - } -} - diff --git a/stepmania/src/lua-5.0/src/ltable.h b/stepmania/src/lua-5.0/src/ltable.h deleted file mode 100644 index 7b81c18367..0000000000 --- a/stepmania/src/lua-5.0/src/ltable.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** $Id$ -** Lua tables (hash) -** See Copyright Notice in lua.h -*/ - -#ifndef ltable_h -#define ltable_h - -#include "lobject.h" - - -#define gnode(t,i) (&(t)->node[i]) -#define gkey(n) (&(n)->i_key) -#define gval(n) (&(n)->i_val) - - -const TObject *luaH_getnum (Table *t, int key); -TObject *luaH_setnum (lua_State *L, Table *t, int key); -const TObject *luaH_getstr (Table *t, TString *key); -const TObject *luaH_get (Table *t, const TObject *key); -TObject *luaH_set (lua_State *L, Table *t, const TObject *key); -Table *luaH_new (lua_State *L, int narray, int lnhash); -void luaH_free (lua_State *L, Table *t); -int luaH_next (lua_State *L, Table *t, StkId key); - -/* exported only for debugging */ -Node *luaH_mainposition (const Table *t, const TObject *key); - - -#endif diff --git a/stepmania/src/lua-5.0/src/ltests.c b/stepmania/src/lua-5.0/src/ltests.c deleted file mode 100644 index ce30345816..0000000000 --- a/stepmania/src/lua-5.0/src/ltests.c +++ /dev/null @@ -1,852 +0,0 @@ -/* -** $Id$ -** Internal Module for Debugging of the Lua Implementation -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include -#include -#include - -#define ltests_c - -#include "lua.h" - -#include "lapi.h" -#include "lauxlib.h" -#include "lcode.h" -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lmem.h" -#include "lopcodes.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "lualib.h" - - - -/* -** The whole module only makes sense with LUA_DEBUG on -*/ -#ifdef LUA_DEBUG - - -#define lua_pushintegral(L,i) lua_pushnumber(L, cast(lua_Number, (i))) - - -static lua_State *lua_state = NULL; - -int islocked = 0; - - -#define func_at(L,k) (L->ci->base+(k) - 1) - - -static void setnameval (lua_State *L, const char *name, int val) { - lua_pushstring(L, name); - lua_pushintegral(L, val); - lua_settable(L, -3); -} - - -/* -** {====================================================================== -** Controlled version for realloc. -** ======================================================================= -*/ - -#define MARK 0x55 /* 01010101 (a nice pattern) */ - -#ifndef EXTERNMEMCHECK -/* full memory check */ -#define HEADER (sizeof(L_Umaxalign)) /* ensures maximum alignment for HEADER */ -#define MARKSIZE 16 /* size of marks after each block */ -#define blockhead(b) (cast(char *, b) - HEADER) -#define setsize(newblock, size) (*cast(size_t *, newblock) = size) -#define checkblocksize(b, size) (size == (*cast(size_t *, blockhead(b)))) -#define fillmem(mem,size) memset(mem, -MARK, size) -#else -/* external memory check: don't do it twice */ -#define HEADER 0 -#define MARKSIZE 0 -#define blockhead(b) (b) -#define setsize(newblock, size) /* empty */ -#define checkblocksize(b,size) (1) -#define fillmem(mem,size) /* empty */ -#endif - -unsigned long memdebug_numblocks = 0; -unsigned long memdebug_total = 0; -unsigned long memdebug_maxmem = 0; -unsigned long memdebug_memlimit = ULONG_MAX; - - -static void *checkblock (void *block, size_t size) { - void *b = blockhead(block); - int i; - for (i=0;i 0); - if (size == 0) { - freeblock(block, oldsize); - return NULL; - } - else if (size > oldsize && memdebug_total+size-oldsize > memdebug_memlimit) - return NULL; /* to test memory allocation errors */ - else { - void *newblock; - int i; - size_t realsize = HEADER+size+MARKSIZE; - size_t commonsize = (oldsize < size) ? oldsize : size; - if (realsize < size) return NULL; /* overflow! */ - newblock = malloc(realsize); /* alloc a new block */ - if (newblock == NULL) return NULL; - if (block) { - memcpy(cast(char *, newblock)+HEADER, block, commonsize); - freeblock(block, oldsize); /* erase (and check) old copy */ - } - /* initialize new part of the block with something `weird' */ - fillmem(cast(char *, newblock)+HEADER+commonsize, size-commonsize); - memdebug_total += size; - if (memdebug_total > memdebug_maxmem) - memdebug_maxmem = memdebug_total; - memdebug_numblocks++; - setsize(newblock, size); - for (i=0;icode[pc]; - OpCode o = GET_OPCODE(i); - const char *name = luaP_opnames[o]; - int line = getline(p, pc); - sprintf(buff, "(%4d) %4d - ", line, pc); - switch (getOpMode(o)) { - case iABC: - sprintf(buff+strlen(buff), "%-12s%4d %4d %4d", name, - GETARG_A(i), GETARG_B(i), GETARG_C(i)); - break; - case iABx: - sprintf(buff+strlen(buff), "%-12s%4d %4d", name, GETARG_A(i), GETARG_Bx(i)); - break; - case iAsBx: - sprintf(buff+strlen(buff), "%-12s%4d %4d", name, GETARG_A(i), GETARG_sBx(i)); - break; - } - return buff; -} - - -#if 0 -void luaI_printcode (Proto *pt, int size) { - int pc; - for (pc=0; pcl.p; - lua_newtable(L); - setnameval(L, "maxstack", p->maxstacksize); - setnameval(L, "numparams", p->numparams); - for (pc=0; pcsizecode; pc++) { - char buff[100]; - lua_pushintegral(L, pc+1); - lua_pushstring(L, buildop(p, pc, buff)); - lua_settable(L, -3); - } - return 1; -} - - -static int listk (lua_State *L) { - Proto *p; - int i; - luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), - 1, "Lua function expected"); - p = clvalue(func_at(L, 1))->l.p; - lua_newtable(L); - for (i=0; isizek; i++) { - lua_pushintegral(L, i+1); - luaA_pushobject(L, p->k+i); - lua_settable(L, -3); - } - return 1; -} - - -static int listlocals (lua_State *L) { - Proto *p; - int pc = luaL_checkint(L, 2) - 1; - int i = 0; - const char *name; - luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), - 1, "Lua function expected"); - p = clvalue(func_at(L, 1))->l.p; - while ((name = luaF_getlocalname(p, ++i, pc)) != NULL) - lua_pushstring(L, name); - return i-1; -} - -/* }====================================================== */ - - - - -static int get_limits (lua_State *L) { - lua_newtable(L); - setnameval(L, "BITS_INT", BITS_INT); - setnameval(L, "LFPF", LFIELDS_PER_FLUSH); - setnameval(L, "MAXVARS", MAXVARS); - setnameval(L, "MAXPARAMS", MAXPARAMS); - setnameval(L, "MAXSTACK", MAXSTACK); - setnameval(L, "MAXUPVALUES", MAXUPVALUES); - return 1; -} - - -static int mem_query (lua_State *L) { - if (lua_isnone(L, 1)) { - lua_pushintegral(L, memdebug_total); - lua_pushintegral(L, memdebug_numblocks); - lua_pushintegral(L, memdebug_maxmem); - return 3; - } - else { - memdebug_memlimit = luaL_checkint(L, 1); - return 0; - } -} - - -static int hash_query (lua_State *L) { - if (lua_isnone(L, 2)) { - luaL_argcheck(L, lua_type(L, 1) == LUA_TSTRING, 1, "string expected"); - lua_pushintegral(L, tsvalue(func_at(L, 1))->tsv.hash); - } - else { - TObject *o = func_at(L, 1); - Table *t; - luaL_checktype(L, 2, LUA_TTABLE); - t = hvalue(func_at(L, 2)); - lua_pushintegral(L, luaH_mainposition(t, o) - t->node); - } - return 1; -} - - -static int stacklevel (lua_State *L) { - unsigned long a = 0; - lua_pushintegral(L, (int)(L->top - L->stack)); - lua_pushintegral(L, (int)(L->stack_last - L->stack)); - lua_pushintegral(L, (int)(L->ci - L->base_ci)); - lua_pushintegral(L, (int)(L->end_ci - L->base_ci)); - lua_pushintegral(L, (unsigned long)&a); - return 5; -} - - -static int table_query (lua_State *L) { - const Table *t; - int i = luaL_optint(L, 2, -1); - luaL_checktype(L, 1, LUA_TTABLE); - t = hvalue(func_at(L, 1)); - if (i == -1) { - lua_pushintegral(L, t->sizearray); - lua_pushintegral(L, sizenode(t)); - lua_pushintegral(L, t->firstfree - t->node); - } - else if (i < t->sizearray) { - lua_pushintegral(L, i); - luaA_pushobject(L, &t->array[i]); - lua_pushnil(L); - } - else if ((i -= t->sizearray) < sizenode(t)) { - if (!ttisnil(gval(gnode(t, i))) || - ttisnil(gkey(gnode(t, i))) || - ttisnumber(gkey(gnode(t, i)))) { - luaA_pushobject(L, gkey(gnode(t, i))); - } - else - lua_pushstring(L, ""); - luaA_pushobject(L, gval(gnode(t, i))); - if (t->node[i].next) - lua_pushintegral(L, t->node[i].next - t->node); - else - lua_pushnil(L); - } - return 3; -} - - -static int string_query (lua_State *L) { - stringtable *tb = &G(L)->strt; - int s = luaL_optint(L, 2, 0) - 1; - if (s==-1) { - lua_pushintegral(L ,tb->nuse); - lua_pushintegral(L ,tb->size); - return 2; - } - else if (s < tb->size) { - GCObject *ts; - int n = 0; - for (ts = tb->hash[s]; ts; ts = ts->gch.next) { - setsvalue2s(L->top, gcotots(ts)); - incr_top(L); - n++; - } - return n; - } - return 0; -} - - -static int tref (lua_State *L) { - int level = lua_gettop(L); - int lock = luaL_optint(L, 2, 1); - luaL_checkany(L, 1); - lua_pushvalue(L, 1); - lua_pushintegral(L, lua_ref(L, lock)); - assert(lua_gettop(L) == level+1); /* +1 for result */ - return 1; -} - -static int getref (lua_State *L) { - int level = lua_gettop(L); - lua_getref(L, luaL_checkint(L, 1)); - assert(lua_gettop(L) == level+1); - return 1; -} - -static int unref (lua_State *L) { - int level = lua_gettop(L); - lua_unref(L, luaL_checkint(L, 1)); - assert(lua_gettop(L) == level); - return 0; -} - -static int metatable (lua_State *L) { - luaL_checkany(L, 1); - if (lua_isnone(L, 2)) { - if (lua_getmetatable(L, 1) == 0) - lua_pushnil(L); - } - else { - lua_settop(L, 2); - luaL_checktype(L, 2, LUA_TTABLE); - lua_setmetatable(L, 1); - } - return 1; -} - - -static int upvalue (lua_State *L) { - int n = luaL_checkint(L, 2); - luaL_checktype(L, 1, LUA_TFUNCTION); - if (lua_isnone(L, 3)) { - const char *name = lua_getupvalue(L, 1, n); - if (name == NULL) return 0; - lua_pushstring(L, name); - return 2; - } - else { - const char *name = lua_setupvalue(L, 1, n); - lua_pushstring(L, name); - return 1; - } -} - - -static int newuserdata (lua_State *L) { - size_t size = luaL_checkint(L, 1); - char *p = cast(char *, lua_newuserdata(L, size)); - while (size--) *p++ = '\0'; - return 1; -} - - -static int pushuserdata (lua_State *L) { - lua_pushlightuserdata(L, cast(void *, luaL_checkint(L, 1))); - return 1; -} - - -static int udataval (lua_State *L) { - lua_pushintegral(L, cast(int, lua_touserdata(L, 1))); - return 1; -} - - -static int doonnewstack (lua_State *L) { - lua_State *L1 = lua_newthread(L); - size_t l; - const char *s = luaL_checklstring(L, 1, &l); - int status = luaL_loadbuffer(L1, s, l, s); - if (status == 0) - status = lua_pcall(L1, 0, 0, 0); - lua_pushintegral(L, status); - return 1; -} - - -static int s2d (lua_State *L) { - lua_pushnumber(L, *cast(const double *, luaL_checkstring(L, 1))); - return 1; -} - -static int d2s (lua_State *L) { - double d = luaL_checknumber(L, 1); - lua_pushlstring(L, cast(char *, &d), sizeof(d)); - return 1; -} - - -static int newstate (lua_State *L) { - lua_State *L1 = lua_open(); - if (L1) { - lua_userstateopen(L1); /* init lock */ - lua_pushintegral(L, (unsigned long)L1); - } - else - lua_pushnil(L); - return 1; -} - - -static int loadlib (lua_State *L) { - static const luaL_reg libs[] = { - {"mathlibopen", luaopen_math}, - {"strlibopen", luaopen_string}, - {"iolibopen", luaopen_io}, - {"tablibopen", luaopen_table}, - {"dblibopen", luaopen_debug}, - {"baselibopen", luaopen_base}, - {NULL, NULL} - }; - lua_State *L1 = cast(lua_State *, - cast(unsigned long, luaL_checknumber(L, 1))); - lua_pushvalue(L1, LUA_GLOBALSINDEX); - luaL_openlib(L1, NULL, libs, 0); - return 0; -} - -static int closestate (lua_State *L) { - lua_State *L1 = cast(lua_State *, cast(unsigned long, luaL_checknumber(L, 1))); - lua_close(L1); - lua_unlock(L); /* close cannot unlock that */ - return 0; -} - -static int doremote (lua_State *L) { - lua_State *L1 = cast(lua_State *,cast(unsigned long,luaL_checknumber(L, 1))); - size_t lcode; - const char *code = luaL_checklstring(L, 2, &lcode); - int status; - lua_settop(L1, 0); - status = luaL_loadbuffer(L1, code, lcode, code); - if (status == 0) - status = lua_pcall(L1, 0, LUA_MULTRET, 0); - if (status != 0) { - lua_pushnil(L); - lua_pushintegral(L, status); - lua_pushstring(L, lua_tostring(L1, -1)); - return 3; - } - else { - int i = 0; - while (!lua_isnone(L1, ++i)) - lua_pushstring(L, lua_tostring(L1, i)); - lua_pop(L1, i-1); - return i-1; - } -} - - -static int log2_aux (lua_State *L) { - lua_pushintegral(L, luaO_log2(luaL_checkint(L, 1))); - return 1; -} - -static int int2fb_aux (lua_State *L) { - int b = luaO_int2fb(luaL_checkint(L, 1)); - lua_pushintegral(L, b); - lua_pushintegral(L, fb2int(b)); - return 2; -} - - -static int test_do (lua_State *L) { - const char *p = luaL_checkstring(L, 1); - if (*p == '@') - lua_dofile(L, p+1); - else - lua_dostring(L, p); - return lua_gettop(L); -} - - - -/* -** {====================================================== -** function to test the API with C. It interprets a kind of assembler -** language with calls to the API, so the test can be driven by Lua code -** ======================================================= -*/ - -static const char *const delimits = " \t\n,;"; - -static void skip (const char **pc) { - while (**pc != '\0' && strchr(delimits, **pc)) (*pc)++; -} - -static int getnum_aux (lua_State *L, const char **pc) { - int res = 0; - int sig = 1; - skip(pc); - if (**pc == '.') { - res = cast(int, lua_tonumber(L, -1)); - lua_pop(L, 1); - (*pc)++; - return res; - } - else if (**pc == '-') { - sig = -1; - (*pc)++; - } - while (isdigit(cast(int, **pc))) res = res*10 + (*(*pc)++) - '0'; - return sig*res; -} - -static const char *getname_aux (char *buff, const char **pc) { - int i = 0; - skip(pc); - while (**pc != '\0' && !strchr(delimits, **pc)) - buff[i++] = *(*pc)++; - buff[i] = '\0'; - return buff; -} - - -#define EQ(s1) (strcmp(s1, inst) == 0) - -#define getnum (getnum_aux(L, &pc)) -#define getname (getname_aux(buff, &pc)) - - -static int testC (lua_State *L) { - char buff[30]; - const char *pc = luaL_checkstring(L, 1); - for (;;) { - const char *inst = getname; - if EQ("") return 0; - else if EQ("isnumber") { - lua_pushintegral(L, lua_isnumber(L, getnum)); - } - else if EQ("isstring") { - lua_pushintegral(L, lua_isstring(L, getnum)); - } - else if EQ("istable") { - lua_pushintegral(L, lua_istable(L, getnum)); - } - else if EQ("iscfunction") { - lua_pushintegral(L, lua_iscfunction(L, getnum)); - } - else if EQ("isfunction") { - lua_pushintegral(L, lua_isfunction(L, getnum)); - } - else if EQ("isuserdata") { - lua_pushintegral(L, lua_isuserdata(L, getnum)); - } - else if EQ("isudataval") { - lua_pushintegral(L, lua_islightuserdata(L, getnum)); - } - else if EQ("isnil") { - lua_pushintegral(L, lua_isnil(L, getnum)); - } - else if EQ("isnull") { - lua_pushintegral(L, lua_isnone(L, getnum)); - } - else if EQ("tonumber") { - lua_pushnumber(L, lua_tonumber(L, getnum)); - } - else if EQ("tostring") { - const char *s = lua_tostring(L, getnum); - lua_pushstring(L, s); - } - else if EQ("strlen") { - lua_pushintegral(L, lua_strlen(L, getnum)); - } - else if EQ("tocfunction") { - lua_pushcfunction(L, lua_tocfunction(L, getnum)); - } - else if EQ("return") { - return getnum; - } - else if EQ("gettop") { - lua_pushintegral(L, lua_gettop(L)); - } - else if EQ("settop") { - lua_settop(L, getnum); - } - else if EQ("pop") { - lua_pop(L, getnum); - } - else if EQ("pushnum") { - lua_pushintegral(L, getnum); - } - else if EQ("pushnil") { - lua_pushnil(L); - } - else if EQ("pushbool") { - lua_pushboolean(L, getnum); - } - else if EQ("tobool") { - lua_pushintegral(L, lua_toboolean(L, getnum)); - } - else if EQ("pushvalue") { - lua_pushvalue(L, getnum); - } - else if EQ("pushcclosure") { - lua_pushcclosure(L, testC, getnum); - } - else if EQ("pushupvalues") { - lua_pushupvalues(L); - } - else if EQ("remove") { - lua_remove(L, getnum); - } - else if EQ("insert") { - lua_insert(L, getnum); - } - else if EQ("replace") { - lua_replace(L, getnum); - } - else if EQ("gettable") { - lua_gettable(L, getnum); - } - else if EQ("settable") { - lua_settable(L, getnum); - } - else if EQ("next") { - lua_next(L, -2); - } - else if EQ("concat") { - lua_concat(L, getnum); - } - else if EQ("lessthan") { - int a = getnum; - lua_pushboolean(L, lua_lessthan(L, a, getnum)); - } - else if EQ("equal") { - int a = getnum; - lua_pushboolean(L, lua_equal(L, a, getnum)); - } - else if EQ("rawcall") { - int narg = getnum; - int nres = getnum; - lua_call(L, narg, nres); - } - else if EQ("call") { - int narg = getnum; - int nres = getnum; - lua_pcall(L, narg, nres, 0); - } - else if EQ("loadstring") { - size_t sl; - const char *s = luaL_checklstring(L, getnum, &sl); - luaL_loadbuffer(L, s, sl, s); - } - else if EQ("loadfile") { - luaL_loadfile(L, luaL_checkstring(L, getnum)); - } - else if EQ("setmetatable") { - lua_setmetatable(L, getnum); - } - else if EQ("getmetatable") { - if (lua_getmetatable(L, getnum) == 0) - lua_pushnil(L); - } - else if EQ("type") { - lua_pushstring(L, lua_typename(L, lua_type(L, getnum))); - } - else if EQ("getn") { - int i = getnum; - lua_pushintegral(L, luaL_getn(L, i)); - } - else if EQ("setn") { - int i = getnum; - int n = cast(int, lua_tonumber(L, -1)); - luaL_setn(L, i, n); - lua_pop(L, 1); - } - else luaL_error(L, "unknown instruction %s", buff); - } - return 0; -} - -/* }====================================================== */ - - -/* -** {====================================================== -** tests for yield inside hooks -** ======================================================= -*/ - -static void yieldf (lua_State *L, lua_Debug *ar) { - lua_yield(L, 0); -} - -static int setyhook (lua_State *L) { - if (lua_isnoneornil(L, 1)) - lua_sethook(L, NULL, 0, 0); /* turn off hooks */ - else { - const char *smask = luaL_checkstring(L, 1); - int count = luaL_optint(L, 2, 0); - int mask = 0; - if (strchr(smask, 'l')) mask |= LUA_MASKLINE; - if (count > 0) mask |= LUA_MASKCOUNT; - lua_sethook(L, yieldf, mask, count); - } - return 0; -} - - -static int coresume (lua_State *L) { - int status; - lua_State *co = lua_tothread(L, 1); - luaL_argcheck(L, co, 1, "coroutine expected"); - status = lua_resume(co, 0); - if (status != 0) { - lua_pushboolean(L, 0); - lua_insert(L, -2); - return 2; /* return false + error message */ - } - else { - lua_pushboolean(L, 1); - return 1; - } -} - -/* }====================================================== */ - - - -static const struct luaL_reg tests_funcs[] = { - {"hash", hash_query}, - {"limits", get_limits}, - {"listcode", listcode}, - {"listk", listk}, - {"listlocals", listlocals}, - {"loadlib", loadlib}, - {"stacklevel", stacklevel}, - {"querystr", string_query}, - {"querytab", table_query}, - {"doit", test_do}, - {"testC", testC}, - {"ref", tref}, - {"getref", getref}, - {"unref", unref}, - {"d2s", d2s}, - {"s2d", s2d}, - {"metatable", metatable}, - {"upvalue", upvalue}, - {"newuserdata", newuserdata}, - {"pushuserdata", pushuserdata}, - {"udataval", udataval}, - {"doonnewstack", doonnewstack}, - {"newstate", newstate}, - {"closestate", closestate}, - {"doremote", doremote}, - {"log2", log2_aux}, - {"int2fb", int2fb_aux}, - {"totalmem", mem_query}, - {"resume", coresume}, - {"setyhook", setyhook}, - {NULL, NULL} -}; - - -static void fim (void) { - if (!islocked) - lua_close(lua_state); - lua_assert(memdebug_numblocks == 0); - lua_assert(memdebug_total == 0); -} - - -static int l_panic (lua_State *L) { - UNUSED(L); - fprintf(stderr, "unable to recover; exiting\n"); - return 0; -} - - -int luaB_opentests (lua_State *L) { - lua_atpanic(L, l_panic); - lua_userstateopen(L); /* init lock */ - lua_state = L; /* keep first state to be opened */ - luaL_openlib(L, "T", tests_funcs, 0); - atexit(fim); - return 0; -} - - -#undef main -int main (int argc, char *argv[]) { - char *limit = getenv("MEMLIMIT"); - if (limit) - memdebug_memlimit = strtoul(limit, NULL, 10); - l_main(argc, argv); - return 0; -} - -#endif diff --git a/stepmania/src/lua-5.0/src/ltm.c b/stepmania/src/lua-5.0/src/ltm.c deleted file mode 100644 index 0001cb9c05..0000000000 --- a/stepmania/src/lua-5.0/src/ltm.c +++ /dev/null @@ -1,70 +0,0 @@ -/* -** $Id$ -** Tag methods -** See Copyright Notice in lua.h -*/ - - -#include - -#define ltm_c - -#include "lua.h" - -#include "lobject.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" - - - -const char *const luaT_typenames[] = { - "nil", "boolean", "userdata", "number", - "string", "table", "function", "userdata", "thread" -}; - - -void luaT_init (lua_State *L) { - static const char *const luaT_eventname[] = { /* ORDER TM */ - "__index", "__newindex", - "__gc", "__mode", "__eq", - "__add", "__sub", "__mul", "__div", - "__pow", "__unm", "__lt", "__le", - "__concat", "__call" - }; - int i; - for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); - luaS_fix(G(L)->tmname[i]); /* never collect these names */ - } -} - - -/* -** function to be used with macro "fasttm": optimized for absence of -** tag methods -*/ -const TObject *luaT_gettm (Table *events, TMS event, TString *ename) { - const TObject *tm = luaH_getstr(events, ename); - lua_assert(event <= TM_EQ); - if (ttisnil(tm)) { /* no tag method? */ - events->flags |= cast(lu_byte, 1u<tmname[event]; - switch (ttype(o)) { - case LUA_TTABLE: - return luaH_getstr(hvalue(o)->metatable, ename); - case LUA_TUSERDATA: - return luaH_getstr(uvalue(o)->uv.metatable, ename); - default: - return &luaO_nilobject; - } -} - diff --git a/stepmania/src/lua-5.0/src/ltm.h b/stepmania/src/lua-5.0/src/ltm.h deleted file mode 100644 index b874c49907..0000000000 --- a/stepmania/src/lua-5.0/src/ltm.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -** $Id$ -** Tag methods -** See Copyright Notice in lua.h -*/ - -#ifndef ltm_h -#define ltm_h - - -#include "lobject.h" - - -/* -* WARNING: if you change the order of this enumeration, -* grep "ORDER TM" -*/ -typedef enum { - TM_INDEX, - TM_NEWINDEX, - TM_GC, - TM_MODE, - TM_EQ, /* last tag method with `fast' access */ - TM_ADD, - TM_SUB, - TM_MUL, - TM_DIV, - TM_POW, - TM_UNM, - TM_LT, - TM_LE, - TM_CONCAT, - TM_CALL, - TM_N /* number of elements in the enum */ -} TMS; - - - -#define gfasttm(g,et,e) \ - (((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) - -#define fasttm(l,et,e) gfasttm(G(l), et, e) - - -const TObject *luaT_gettm (Table *events, TMS event, TString *ename); -const TObject *luaT_gettmbyobj (lua_State *L, const TObject *o, TMS event); -void luaT_init (lua_State *L); - -extern const char *const luaT_typenames[]; - -#endif diff --git a/stepmania/src/lua-5.0/src/lundump.c b/stepmania/src/lua-5.0/src/lundump.c deleted file mode 100644 index 26a2b88ab2..0000000000 --- a/stepmania/src/lua-5.0/src/lundump.c +++ /dev/null @@ -1,286 +0,0 @@ -/* -** $Id$ -** load pre-compiled Lua chunks -** See Copyright Notice in lua.h -*/ - -#define lundump_c - -#include "lua.h" - -#include "ldebug.h" -#include "lfunc.h" -#include "lmem.h" -#include "lopcodes.h" -#include "lstring.h" -#include "lundump.h" -#include "lzio.h" - -#define LoadByte (lu_byte) ezgetc - -typedef struct { - lua_State* L; - ZIO* Z; - Mbuffer* b; - int swap; - const char* name; -} LoadState; - -static void unexpectedEOZ (LoadState* S) -{ - luaG_runerror(S->L,"unexpected end of file in %s",S->name); -} - -static int ezgetc (LoadState* S) -{ - int c=zgetc(S->Z); - if (c==EOZ) unexpectedEOZ(S); - return c; -} - -static void ezread (LoadState* S, void* b, int n) -{ - int r=luaZ_read(S->Z,b,n); - if (r!=0) unexpectedEOZ(S); -} - -static void LoadBlock (LoadState* S, void* b, size_t size) -{ - if (S->swap) - { - char* p=(char*) b+size-1; - int n=size; - while (n--) *p--=(char)ezgetc(S); - } - else - ezread(S,b,size); -} - -static void LoadVector (LoadState* S, void* b, int m, size_t size) -{ - if (S->swap) - { - char* q=(char*) b; - while (m--) - { - char* p=q+size-1; - int n=size; - while (n--) *p--=(char)ezgetc(S); - q+=size; - } - } - else - ezread(S,b,m*size); -} - -static int LoadInt (LoadState* S) -{ - int x; - LoadBlock(S,&x,sizeof(x)); - if (x<0) luaG_runerror(S->L,"bad integer in %s",S->name); - return x; -} - -static size_t LoadSize (LoadState* S) -{ - size_t x; - LoadBlock(S,&x,sizeof(x)); - return x; -} - -static lua_Number LoadNumber (LoadState* S) -{ - lua_Number x; - LoadBlock(S,&x,sizeof(x)); - return x; -} - -static TString* LoadString (LoadState* S) -{ - size_t size=LoadSize(S); - if (size==0) - return NULL; - else - { - char* s=luaZ_openspace(S->L,S->b,size); - ezread(S,s,size); - return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ - } -} - -static void LoadCode (LoadState* S, Proto* f) -{ - int size=LoadInt(S); - f->code=luaM_newvector(S->L,size,Instruction); - f->sizecode=size; - LoadVector(S,f->code,size,sizeof(*f->code)); -} - -static void LoadLocals (LoadState* S, Proto* f) -{ - int i,n; - n=LoadInt(S); - f->locvars=luaM_newvector(S->L,n,LocVar); - f->sizelocvars=n; - for (i=0; ilocvars[i].varname=LoadString(S); - f->locvars[i].startpc=LoadInt(S); - f->locvars[i].endpc=LoadInt(S); - } -} - -static void LoadLines (LoadState* S, Proto* f) -{ - int size=LoadInt(S); - f->lineinfo=luaM_newvector(S->L,size,int); - f->sizelineinfo=size; - LoadVector(S,f->lineinfo,size,sizeof(*f->lineinfo)); -} - -static void LoadUpvalues (LoadState* S, Proto* f) -{ - int i,n; - n=LoadInt(S); - if (n!=0 && n!=f->nups) - luaG_runerror(S->L,"bad nupvalues in %s: read %d; expected %d", - S->name,n,f->nups); - f->upvalues=luaM_newvector(S->L,n,TString*); - f->sizeupvalues=n; - for (i=0; iupvalues[i]=LoadString(S); -} - -static Proto* LoadFunction (LoadState* S, TString* p); - -static void LoadConstants (LoadState* S, Proto* f) -{ - int i,n; - n=LoadInt(S); - f->k=luaM_newvector(S->L,n,TObject); - f->sizek=n; - for (i=0; ik[i]; - int t=LoadByte(S); - switch (t) - { - case LUA_TNUMBER: - setnvalue(o,LoadNumber(S)); - break; - case LUA_TSTRING: - setsvalue2n(o,LoadString(S)); - break; - case LUA_TNIL: - setnilvalue(o); - break; - default: - luaG_runerror(S->L,"bad constant type (%d) in %s",t,S->name); - break; - } - } - n=LoadInt(S); - f->p=luaM_newvector(S->L,n,Proto*); - f->sizep=n; - for (i=0; ip[i]=LoadFunction(S,f->source); -} - -static Proto* LoadFunction (LoadState* S, TString* p) -{ - Proto* f=luaF_newproto(S->L); - f->source=LoadString(S); if (f->source==NULL) f->source=p; - f->lineDefined=LoadInt(S); - f->nups=LoadByte(S); - f->numparams=LoadByte(S); - f->is_vararg=LoadByte(S); - f->maxstacksize=LoadByte(S); - LoadLines(S,f); - LoadLocals(S,f); - LoadUpvalues(S,f); - LoadConstants(S,f); - LoadCode(S,f); -#ifndef TRUST_BINARIES - if (!luaG_checkcode(f)) luaG_runerror(S->L,"bad code in %s",S->name); -#endif - return f; -} - -static void LoadSignature (LoadState* S) -{ - const char* s=LUA_SIGNATURE; - while (*s!=0 && ezgetc(S)==*s) - ++s; - if (*s!=0) luaG_runerror(S->L,"bad signature in %s",S->name); -} - -static void TestSize (LoadState* S, int s, const char* what) -{ - int r=LoadByte(S); - if (r!=s) - luaG_runerror(S->L,"virtual machine mismatch in %s: " - "size of %s is %d but read %d",S->name,what,s,r); -} - -#define TESTSIZE(s,w) TestSize(S,s,w) -#define V(v) v/16,v%16 - -static void LoadHeader (LoadState* S) -{ - int version; - lua_Number x,tx=TEST_NUMBER; - LoadSignature(S); - version=LoadByte(S); - if (version>VERSION) - luaG_runerror(S->L,"%s too new: " - "read version %d.%d; expected at most %d.%d", - S->name,V(version),V(VERSION)); - if (versionL,"%s too old: " - "read version %d.%d; expected at least %d.%d", - S->name,V(version),V(VERSION0)); - S->swap=(luaU_endianness()!=LoadByte(S)); /* need to swap bytes? */ - TESTSIZE(sizeof(int),"int"); - TESTSIZE(sizeof(size_t), "size_t"); - TESTSIZE(sizeof(Instruction), "Instruction"); - TESTSIZE(SIZE_OP, "OP"); - TESTSIZE(SIZE_A, "A"); - TESTSIZE(SIZE_B, "B"); - TESTSIZE(SIZE_C, "C"); - TESTSIZE(sizeof(lua_Number), "number"); - x=LoadNumber(S); - if ((long)x!=(long)tx) /* disregard errors in last bits of fraction */ - luaG_runerror(S->L,"unknown number format in %s",S->name); -} - -static Proto* LoadChunk (LoadState* S) -{ - LoadHeader(S); - return LoadFunction(S,NULL); -} - -/* -** load precompiled chunk -*/ -Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff) -{ - LoadState S; - const char* s=zname(Z); - if (*s=='@' || *s=='=') - S.name=s+1; - else if (*s==LUA_SIGNATURE[0]) - S.name="binary string"; - else - S.name=s; - S.L=L; - S.Z=Z; - S.b=buff; - return LoadChunk(&S); -} - -/* -** find byte order -*/ -int luaU_endianness (void) -{ - int x=1; - return *(char*)&x; -} diff --git a/stepmania/src/lua-5.0/src/lundump.h b/stepmania/src/lua-5.0/src/lundump.h deleted file mode 100644 index e280d3694b..0000000000 --- a/stepmania/src/lua-5.0/src/lundump.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -** $Id$ -** load pre-compiled Lua chunks -** See Copyright Notice in lua.h -*/ - -#ifndef lundump_h -#define lundump_h - -#include "lobject.h" -#include "lzio.h" - -/* load one chunk; from lundump.c */ -Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff); - -/* find byte order; from lundump.c */ -int luaU_endianness (void); - -/* dump one chunk; from ldump.c */ -void luaU_dump (lua_State* L, const Proto* Main, lua_Chunkwriter w, void* data); - -/* print one chunk; from print.c */ -void luaU_print (const Proto* Main); - -/* definitions for headers of binary files */ -#define LUA_SIGNATURE "\033Lua" /* binary files start with "Lua" */ -#define VERSION 0x50 /* last format change was in 5.0 */ -#define VERSION0 0x50 /* last major change was in 5.0 */ - -/* a multiple of PI for testing native format */ -/* multiplying by 1E7 gives non-trivial integer values */ -#define TEST_NUMBER ((lua_Number)3.14159265358979323846E7) - -#endif diff --git a/stepmania/src/lua-5.0/src/lvm.c b/stepmania/src/lua-5.0/src/lvm.c deleted file mode 100644 index db221b5387..0000000000 --- a/stepmania/src/lua-5.0/src/lvm.c +++ /dev/null @@ -1,781 +0,0 @@ -/* -** $Id$ -** Lua virtual machine -** See Copyright Notice in lua.h -*/ - - -#include -#include -#include - -/* needed only when `lua_number2str' uses `sprintf' */ -#include - -#define lvm_c - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lgc.h" -#include "lobject.h" -#include "lopcodes.h" -#include "lstate.h" -#include "lstring.h" -#include "ltable.h" -#include "ltm.h" -#include "lvm.h" - - - -/* function to convert a lua_Number to a string */ -#ifndef lua_number2str -#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) -#endif - - -/* limit for table tag-method chains (to avoid loops) */ -#define MAXTAGLOOP 100 - - -const TObject *luaV_tonumber (const TObject *obj, TObject *n) { - lua_Number num; - if (ttisnumber(obj)) return obj; - if (ttisstring(obj) && luaO_str2d(svalue(obj), &num)) { - setnvalue(n, num); - return n; - } - else - return NULL; -} - - -int luaV_tostring (lua_State *L, StkId obj) { - if (!ttisnumber(obj)) - return 0; - else { - char s[32]; /* 16 digits, sign, point and \0 (+ some extra...) */ - lua_number2str(s, nvalue(obj)); - setsvalue2s(obj, luaS_new(L, s)); - return 1; - } -} - - -static void traceexec (lua_State *L) { - lu_byte mask = L->hookmask; - if (mask & LUA_MASKCOUNT) { /* instruction-hook set? */ - if (L->hookcount == 0) { - resethookcount(L); - luaD_callhook(L, LUA_HOOKCOUNT, -1); - return; - } - } - if (mask & LUA_MASKLINE) { - CallInfo *ci = L->ci; - Proto *p = ci_func(ci)->l.p; - int newline = getline(p, pcRel(*ci->u.l.pc, p)); - if (!L->hookinit) { - luaG_inithooks(L); - return; - } - lua_assert(ci->state & CI_HASFRAME); - if (pcRel(*ci->u.l.pc, p) == 0) /* tracing may be starting now? */ - ci->u.l.savedpc = *ci->u.l.pc; /* initialize `savedpc' */ - /* calls linehook when enters a new line or jumps back (loop) */ - if (*ci->u.l.pc <= ci->u.l.savedpc || - newline != getline(p, pcRel(ci->u.l.savedpc, p))) { - luaD_callhook(L, LUA_HOOKLINE, newline); - ci = L->ci; /* previous call may reallocate `ci' */ - } - ci->u.l.savedpc = *ci->u.l.pc; - } -} - - -static void callTMres (lua_State *L, const TObject *f, - const TObject *p1, const TObject *p2) { - setobj2s(L->top, f); /* push function */ - setobj2s(L->top+1, p1); /* 1st argument */ - setobj2s(L->top+2, p2); /* 2nd argument */ - luaD_checkstack(L, 3); /* cannot check before (could invalidate p1, p2) */ - L->top += 3; - luaD_call(L, L->top - 3, 1); - L->top--; /* result will be in L->top */ -} - - - -static void callTM (lua_State *L, const TObject *f, - const TObject *p1, const TObject *p2, const TObject *p3) { - setobj2s(L->top, f); /* push function */ - setobj2s(L->top+1, p1); /* 1st argument */ - setobj2s(L->top+2, p2); /* 2nd argument */ - setobj2s(L->top+3, p3); /* 3th argument */ - luaD_checkstack(L, 4); /* cannot check before (could invalidate p1...p3) */ - L->top += 4; - luaD_call(L, L->top - 4, 0); -} - - -static const TObject *luaV_index (lua_State *L, const TObject *t, - TObject *key, int loop) { - const TObject *tm = fasttm(L, hvalue(t)->metatable, TM_INDEX); - if (tm == NULL) return &luaO_nilobject; /* no TM */ - if (ttisfunction(tm)) { - callTMres(L, tm, t, key); - return L->top; - } - else return luaV_gettable(L, tm, key, loop); -} - -static const TObject *luaV_getnotable (lua_State *L, const TObject *t, - TObject *key, int loop) { - const TObject *tm = luaT_gettmbyobj(L, t, TM_INDEX); - if (ttisnil(tm)) - luaG_typeerror(L, t, "index"); - if (ttisfunction(tm)) { - callTMres(L, tm, t, key); - return L->top; - } - else return luaV_gettable(L, tm, key, loop); -} - - -/* -** Function to index a table. -** Receives the table at `t' and the key at `key'. -** leaves the result at `res'. -*/ -const TObject *luaV_gettable (lua_State *L, const TObject *t, TObject *key, - int loop) { - if (loop > MAXTAGLOOP) - luaG_runerror(L, "loop in gettable"); - if (ttistable(t)) { /* `t' is a table? */ - Table *h = hvalue(t); - const TObject *v = luaH_get(h, key); /* do a primitive get */ - if (!ttisnil(v)) return v; - else return luaV_index(L, t, key, loop+1); - } - else return luaV_getnotable(L, t, key, loop+1); -} - - -/* -** Receives table at `t', key at `key' and value at `val'. -*/ -void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) { - const TObject *tm; - int loop = 0; - do { - if (ttistable(t)) { /* `t' is a table? */ - Table *h = hvalue(t); - TObject *oldval = luaH_set(L, h, key); /* do a primitive set */ - if (!ttisnil(oldval) || /* result is no nil? */ - (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ - setobj2t(oldval, val); /* write barrier */ - return; - } - /* else will try the tag method */ - } - else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) - luaG_typeerror(L, t, "index"); - if (ttisfunction(tm)) { - callTM(L, tm, t, key, val); - return; - } - t = tm; /* else repeat with `tm' */ - } while (++loop <= MAXTAGLOOP); - luaG_runerror(L, "loop in settable"); -} - - -static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2, - StkId res, TMS event) { - ptrdiff_t result = savestack(L, res); - const TObject *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ - if (ttisnil(tm)) - tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ - if (!ttisfunction(tm)) return 0; - callTMres(L, tm, p1, p2); - res = restorestack(L, result); /* previous call may change stack */ - setobjs2s(res, L->top); - return 1; -} - - -static const TObject *get_compTM (lua_State *L, Table *mt1, Table *mt2, - TMS event) { - const TObject *tm1 = fasttm(L, mt1, event); - const TObject *tm2; - if (tm1 == NULL) return NULL; /* no metamethod */ - if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ - tm2 = fasttm(L, mt2, event); - if (tm2 == NULL) return NULL; /* no metamethod */ - if (luaO_rawequalObj(tm1, tm2)) /* same metamethods? */ - return tm1; - return NULL; -} - - -static int call_orderTM (lua_State *L, const TObject *p1, const TObject *p2, - TMS event) { - const TObject *tm1 = luaT_gettmbyobj(L, p1, event); - const TObject *tm2; - if (ttisnil(tm1)) return -1; /* no metamethod? */ - tm2 = luaT_gettmbyobj(L, p2, event); - if (!luaO_rawequalObj(tm1, tm2)) /* different metamethods? */ - return -1; - callTMres(L, tm1, p1, p2); - return !l_isfalse(L->top); -} - - -static int luaV_strcmp (const TString *ls, const TString *rs) { - const char *l = getstr(ls); - size_t ll = ls->tsv.len; - const char *r = getstr(rs); - size_t lr = rs->tsv.len; - for (;;) { - int temp = strcoll(l, r); - if (temp != 0) return temp; - else { /* strings are equal up to a `\0' */ - size_t len = strlen(l); /* index of first `\0' in both strings */ - if (len == lr) /* r is finished? */ - return (len == ll) ? 0 : 1; - else if (len == ll) /* l is finished? */ - return -1; /* l is smaller than r (because r is not finished) */ - /* both strings longer than `len'; go on comparing (after the `\0') */ - len++; - l += len; ll -= len; r += len; lr -= len; - } - } -} - - -int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r) { - int res; - if (ttype(l) != ttype(r)) - return luaG_ordererror(L, l, r); - else if (ttisnumber(l)) - return nvalue(l) < nvalue(r); - else if (ttisstring(l)) - return luaV_strcmp(tsvalue(l), tsvalue(r)) < 0; - else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) - return res; - return luaG_ordererror(L, l, r); -} - - -static int luaV_lessequal (lua_State *L, const TObject *l, const TObject *r) { - int res; - if (ttype(l) != ttype(r)) - return luaG_ordererror(L, l, r); - else if (ttisnumber(l)) - return nvalue(l) <= nvalue(r); - else if (ttisstring(l)) - return luaV_strcmp(tsvalue(l), tsvalue(r)) <= 0; - else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ - return res; - else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ - return !res; - return luaG_ordererror(L, l, r); -} - - -int luaV_equalval (lua_State *L, const TObject *t1, const TObject *t2) { - const TObject *tm; - lua_assert(ttype(t1) == ttype(t2)); - switch (ttype(t1)) { - case LUA_TNIL: return 1; - case LUA_TNUMBER: return nvalue(t1) == nvalue(t2); - case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ - case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); - case LUA_TUSERDATA: { - if (uvalue(t1) == uvalue(t2)) return 1; - tm = get_compTM(L, uvalue(t1)->uv.metatable, uvalue(t2)->uv.metatable, - TM_EQ); - break; /* will try TM */ - } - case LUA_TTABLE: { - if (hvalue(t1) == hvalue(t2)) return 1; - tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); - break; /* will try TM */ - } - default: return gcvalue(t1) == gcvalue(t2); - } - if (tm == NULL) return 0; /* no TM? */ - callTMres(L, tm, t1, t2); /* call TM */ - return !l_isfalse(L->top); -} - - -void luaV_concat (lua_State *L, int total, int last) { - do { - StkId top = L->base + last + 1; - int n = 2; /* number of elements handled in this pass (at least 2) */ - if (!tostring(L, top-2) || !tostring(L, top-1)) { - if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) - luaG_concaterror(L, top-2, top-1); - } else if (tsvalue(top-1)->tsv.len > 0) { /* if len=0, do nothing */ - /* at least two string values; get as many as possible */ - lu_mem tl = cast(lu_mem, tsvalue(top-1)->tsv.len) + - cast(lu_mem, tsvalue(top-2)->tsv.len); - char *buffer; - int i; - while (n < total && tostring(L, top-n-1)) { /* collect total length */ - tl += tsvalue(top-n-1)->tsv.len; - n++; - } - if (tl > MAX_SIZET) luaG_runerror(L, "string size overflow"); - buffer = luaZ_openspace(L, &G(L)->buff, tl); - tl = 0; - for (i=n; i>0; i--) { /* concat all strings */ - size_t l = tsvalue(top-i)->tsv.len; - memcpy(buffer+tl, svalue(top-i), l); - tl += l; - } - setsvalue2s(top-n, luaS_newlstr(L, buffer, tl)); - } - total -= n-1; /* got `n' strings to create 1 new */ - last -= n-1; - } while (total > 1); /* repeat until only 1 result left */ -} - - -static void Arith (lua_State *L, StkId ra, - const TObject *rb, const TObject *rc, TMS op) { - TObject tempb, tempc; - const TObject *b, *c; - if ((b = luaV_tonumber(rb, &tempb)) != NULL && - (c = luaV_tonumber(rc, &tempc)) != NULL) { - switch (op) { - case TM_ADD: setnvalue(ra, nvalue(b) + nvalue(c)); break; - case TM_SUB: setnvalue(ra, nvalue(b) - nvalue(c)); break; - case TM_MUL: setnvalue(ra, nvalue(b) * nvalue(c)); break; - case TM_DIV: setnvalue(ra, nvalue(b) / nvalue(c)); break; - case TM_POW: { - const TObject *f = luaH_getstr(hvalue(gt(L)), G(L)->tmname[TM_POW]); - ptrdiff_t res = savestack(L, ra); - if (!ttisfunction(f)) - luaG_runerror(L, "`__pow' (`^' operator) is not a function"); - callTMres(L, f, b, c); - ra = restorestack(L, res); /* previous call may change stack */ - setobjs2s(ra, L->top); - break; - } - default: lua_assert(0); break; - } - } - else if (!call_binTM(L, rb, rc, ra, op)) - luaG_aritherror(L, rb, rc); -} - - - -/* -** some macros for common tasks in `luaV_execute' -*/ - -#define runtime_check(L, c) { if (!(c)) return 0; } - -#define RA(i) (base+GETARG_A(i)) -/* to be used after possible stack reallocation */ -#define XRA(i) (L->base+GETARG_A(i)) -#define RB(i) (base+GETARG_B(i)) -#define RKB(i) ((GETARG_B(i) < MAXSTACK) ? RB(i) : k+GETARG_B(i)-MAXSTACK) -#define RC(i) (base+GETARG_C(i)) -#define RKC(i) ((GETARG_C(i) < MAXSTACK) ? RC(i) : k+GETARG_C(i)-MAXSTACK) -#define KBx(i) (k+GETARG_Bx(i)) - - -#define dojump(pc, i) ((pc) += (i)) - - -StkId luaV_execute (lua_State *L) { - LClosure *cl; - TObject *k; - const Instruction *pc; - callentry: /* entry point when calling new functions */ - if (L->hookmask & LUA_MASKCALL) { - L->ci->u.l.pc = &pc; - luaD_callhook(L, LUA_HOOKCALL, -1); - } - retentry: /* entry point when returning to old functions */ - L->ci->u.l.pc = &pc; - lua_assert(L->ci->state == CI_SAVEDPC || - L->ci->state == (CI_SAVEDPC | CI_CALLING)); - L->ci->state = CI_HASFRAME; /* activate frame */ - pc = L->ci->u.l.savedpc; - cl = &clvalue(L->base - 1)->l; - k = cl->p->k; - /* main loop of interpreter */ - for (;;) { - const Instruction i = *pc++; - StkId base, ra; - if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && - (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { - traceexec(L); - if (L->ci->state & CI_YIELD) { /* did hook yield? */ - L->ci->u.l.savedpc = pc - 1; - L->ci->state = CI_YIELD | CI_SAVEDPC; - return NULL; - } - } - /* warning!! several calls may realloc the stack and invalidate `ra' */ - base = L->base; - ra = RA(i); - lua_assert(L->ci->state & CI_HASFRAME); - lua_assert(base == L->ci->base); - lua_assert(L->top <= L->stack + L->stacksize && L->top >= base); - lua_assert(L->top == L->ci->top || - GET_OPCODE(i) == OP_CALL || GET_OPCODE(i) == OP_TAILCALL || - GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO); - switch (GET_OPCODE(i)) { - case OP_MOVE: { - setobjs2s(ra, RB(i)); - break; - } - case OP_LOADK: { - setobj2s(ra, KBx(i)); - break; - } - case OP_LOADBOOL: { - setbvalue(ra, GETARG_B(i)); - if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ - break; - } - case OP_LOADNIL: { - TObject *rb = RB(i); - do { - setnilvalue(rb--); - } while (rb >= ra); - break; - } - case OP_GETUPVAL: { - int b = GETARG_B(i); - setobj2s(ra, cl->upvals[b]->v); - break; - } - case OP_GETGLOBAL: { - TObject *rb = KBx(i); - const TObject *v; - lua_assert(ttisstring(rb) && ttistable(&cl->g)); - v = luaH_getstr(hvalue(&cl->g), tsvalue(rb)); - if (!ttisnil(v)) { setobj2s(ra, v); } - else - setobj2s(XRA(i), luaV_index(L, &cl->g, rb, 0)); - break; - } - case OP_GETTABLE: { - StkId rb = RB(i); - TObject *rc = RKC(i); - if (ttistable(rb)) { - const TObject *v = luaH_get(hvalue(rb), rc); - if (!ttisnil(v)) { setobj2s(ra, v); } - else - setobj2s(XRA(i), luaV_index(L, rb, rc, 0)); - } - else - setobj2s(XRA(i), luaV_getnotable(L, rb, rc, 0)); - break; - } - case OP_SETGLOBAL: { - lua_assert(ttisstring(KBx(i)) && ttistable(&cl->g)); - luaV_settable(L, &cl->g, KBx(i), ra); - break; - } - case OP_SETUPVAL: { - int b = GETARG_B(i); - setobj(cl->upvals[b]->v, ra); /* write barrier */ - break; - } - case OP_SETTABLE: { - luaV_settable(L, ra, RKB(i), RKC(i)); - break; - } - case OP_NEWTABLE: { - int b = GETARG_B(i); - b = fb2int(b); - sethvalue(ra, luaH_new(L, b, GETARG_C(i))); - luaC_checkGC(L); - break; - } - case OP_SELF: { - StkId rb = RB(i); - TObject *rc = RKC(i); - runtime_check(L, ttisstring(rc)); - setobjs2s(ra+1, rb); - if (ttistable(rb)) { - const TObject *v = luaH_getstr(hvalue(rb), tsvalue(rc)); - if (!ttisnil(v)) { setobj2s(ra, v); } - else - setobj2s(XRA(i), luaV_index(L, rb, rc, 0)); - } - else - setobj2s(XRA(i), luaV_getnotable(L, rb, rc, 0)); - break; - } - case OP_ADD: { - TObject *rb = RKB(i); - TObject *rc = RKC(i); - if (ttisnumber(rb) && ttisnumber(rc)) { - setnvalue(ra, nvalue(rb) + nvalue(rc)); - } - else - Arith(L, ra, rb, rc, TM_ADD); - break; - } - case OP_SUB: { - TObject *rb = RKB(i); - TObject *rc = RKC(i); - if (ttisnumber(rb) && ttisnumber(rc)) { - setnvalue(ra, nvalue(rb) - nvalue(rc)); - } - else - Arith(L, ra, rb, rc, TM_SUB); - break; - } - case OP_MUL: { - TObject *rb = RKB(i); - TObject *rc = RKC(i); - if (ttisnumber(rb) && ttisnumber(rc)) { - setnvalue(ra, nvalue(rb) * nvalue(rc)); - } - else - Arith(L, ra, rb, rc, TM_MUL); - break; - } - case OP_DIV: { - TObject *rb = RKB(i); - TObject *rc = RKC(i); - if (ttisnumber(rb) && ttisnumber(rc)) { - setnvalue(ra, nvalue(rb) / nvalue(rc)); - } - else - Arith(L, ra, rb, rc, TM_DIV); - break; - } - case OP_POW: { - Arith(L, ra, RKB(i), RKC(i), TM_POW); - break; - } - case OP_UNM: { - const TObject *rb = RB(i); - TObject temp; - if (tonumber(rb, &temp)) { - setnvalue(ra, -nvalue(rb)); - } - else { - setnilvalue(&temp); - if (!call_binTM(L, RB(i), &temp, ra, TM_UNM)) - luaG_aritherror(L, RB(i), &temp); - } - break; - } - case OP_NOT: { - int res = l_isfalse(RB(i)); /* next assignment may change this value */ - setbvalue(ra, res); - break; - } - case OP_CONCAT: { - int b = GETARG_B(i); - int c = GETARG_C(i); - luaV_concat(L, c-b+1, c); /* may change `base' (and `ra') */ - base = L->base; - setobjs2s(RA(i), base+b); - luaC_checkGC(L); - break; - } - case OP_JMP: { - dojump(pc, GETARG_sBx(i)); - break; - } - case OP_EQ: { - if (equalobj(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; - else dojump(pc, GETARG_sBx(*pc) + 1); - break; - } - case OP_LT: { - if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; - else dojump(pc, GETARG_sBx(*pc) + 1); - break; - } - case OP_LE: { - if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; - else dojump(pc, GETARG_sBx(*pc) + 1); - break; - } - case OP_TEST: { - TObject *rb = RB(i); - if (l_isfalse(rb) == GETARG_C(i)) pc++; - else { - setobjs2s(ra, rb); - dojump(pc, GETARG_sBx(*pc) + 1); - } - break; - } - case OP_CALL: - case OP_TAILCALL: { - StkId firstResult; - int b = GETARG_B(i); - int nresults; - if (b != 0) L->top = ra+b; /* else previous instruction set top */ - nresults = GETARG_C(i) - 1; - firstResult = luaD_precall(L, ra); - if (firstResult) { - if (firstResult > L->top) { /* yield? */ - lua_assert(L->ci->state == (CI_C | CI_YIELD)); - (L->ci - 1)->u.l.savedpc = pc; - (L->ci - 1)->state = CI_SAVEDPC; - return NULL; - } - /* it was a C function (`precall' called it); adjust results */ - luaD_poscall(L, nresults, firstResult); - if (nresults >= 0) L->top = L->ci->top; - } - else { /* it is a Lua function */ - if (GET_OPCODE(i) == OP_CALL) { /* regular call? */ - (L->ci-1)->u.l.savedpc = pc; /* save `pc' to return later */ - (L->ci-1)->state = (CI_SAVEDPC | CI_CALLING); - } - else { /* tail call: put new frame in place of previous one */ - int aux; - base = (L->ci - 1)->base; /* `luaD_precall' may change the stack */ - ra = RA(i); - if (L->openupval) luaF_close(L, base); - for (aux = 0; ra+aux < L->top; aux++) /* move frame down */ - setobjs2s(base+aux-1, ra+aux); - (L->ci - 1)->top = L->top = base+aux; /* correct top */ - lua_assert(L->ci->state & CI_SAVEDPC); - (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc; - (L->ci - 1)->u.l.tailcalls++; /* one more call lost */ - (L->ci - 1)->state = CI_SAVEDPC; - L->ci--; /* remove new frame */ - L->base = L->ci->base; - } - goto callentry; - } - break; - } - case OP_RETURN: { - CallInfo *ci = L->ci - 1; /* previous function frame */ - int b = GETARG_B(i); - if (b != 0) L->top = ra+b-1; - lua_assert(L->ci->state & CI_HASFRAME); - if (L->openupval) luaF_close(L, base); - L->ci->state = CI_SAVEDPC; /* deactivate current function */ - L->ci->u.l.savedpc = pc; - /* previous function was running `here'? */ - if (!(ci->state & CI_CALLING)) { - lua_assert((ci->state & CI_C) || ci->u.l.pc != &pc); - return ra; /* no: return */ - } - else { /* yes: continue its execution */ - int nresults; - lua_assert(ttisfunction(ci->base - 1) && (ci->state & CI_SAVEDPC)); - lua_assert(GET_OPCODE(*(ci->u.l.savedpc - 1)) == OP_CALL); - nresults = GETARG_C(*(ci->u.l.savedpc - 1)) - 1; - luaD_poscall(L, nresults, ra); - if (nresults >= 0) L->top = L->ci->top; - goto retentry; - } - } - case OP_FORLOOP: { - lua_Number step, idx, limit; - const TObject *plimit = ra+1; - const TObject *pstep = ra+2; - if (!ttisnumber(ra)) - luaG_runerror(L, "`for' initial value must be a number"); - if (!tonumber(plimit, ra+1)) - luaG_runerror(L, "`for' limit must be a number"); - if (!tonumber(pstep, ra+2)) - luaG_runerror(L, "`for' step must be a number"); - step = nvalue(pstep); - idx = nvalue(ra) + step; /* increment index */ - limit = nvalue(plimit); - if (step > 0 ? idx <= limit : idx >= limit) { - dojump(pc, GETARG_sBx(i)); /* jump back */ - chgnvalue(ra, idx); /* update index */ - } - break; - } - case OP_TFORLOOP: { - int nvar = GETARG_C(i) + 1; - StkId cb = ra + nvar + 2; /* call base */ - setobjs2s(cb, ra); - setobjs2s(cb+1, ra+1); - setobjs2s(cb+2, ra+2); - L->top = cb+3; /* func. + 2 args (state and index) */ - luaD_call(L, cb, nvar); - L->top = L->ci->top; - ra = XRA(i) + 2; /* final position of first result */ - cb = ra + nvar; - do { /* move results to proper positions */ - nvar--; - setobjs2s(ra+nvar, cb+nvar); - } while (nvar > 0); - if (ttisnil(ra)) /* break loop? */ - pc++; /* skip jump (break loop) */ - else - dojump(pc, GETARG_sBx(*pc) + 1); /* jump back */ - break; - } - case OP_TFORPREP: { /* for compatibility only */ - if (ttistable(ra)) { - setobjs2s(ra+1, ra); - setobj2s(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next"))); - } - dojump(pc, GETARG_sBx(i)); - break; - } - case OP_SETLIST: - case OP_SETLISTO: { - int bc; - int n; - Table *h; - runtime_check(L, ttistable(ra)); - h = hvalue(ra); - bc = GETARG_Bx(i); - if (GET_OPCODE(i) == OP_SETLIST) - n = (bc&(LFIELDS_PER_FLUSH-1)) + 1; - else { - n = L->top - ra - 1; - L->top = L->ci->top; - } - bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */ - for (; n > 0; n--) - setobj2t(luaH_setnum(L, h, bc+n), ra+n); /* write barrier */ - break; - } - case OP_CLOSE: { - luaF_close(L, ra); - break; - } - case OP_CLOSURE: { - Proto *p; - Closure *ncl; - int nup, j; - p = cl->p->p[GETARG_Bx(i)]; - nup = p->nups; - ncl = luaF_newLclosure(L, nup, &cl->g); - ncl->l.p = p; - for (j=0; jl.upvals[j] = cl->upvals[GETARG_B(*pc)]; - else { - lua_assert(GET_OPCODE(*pc) == OP_MOVE); - ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)); - } - } - setclvalue(ra, ncl); - luaC_checkGC(L); - break; - } - } - } -} - - diff --git a/stepmania/src/lua-5.0/src/lvm.h b/stepmania/src/lua-5.0/src/lvm.h deleted file mode 100644 index 73deae4eda..0000000000 --- a/stepmania/src/lua-5.0/src/lvm.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -** $Id$ -** Lua virtual machine -** See Copyright Notice in lua.h -*/ - -#ifndef lvm_h -#define lvm_h - - -#include "ldo.h" -#include "lobject.h" -#include "ltm.h" - - -#define tostring(L,o) ((ttype(o) == LUA_TSTRING) || (luaV_tostring(L, o))) - -#define tonumber(o,n) (ttype(o) == LUA_TNUMBER || \ - (((o) = luaV_tonumber(o,n)) != NULL)) - -#define equalobj(L,o1,o2) \ - (ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2)) - - -int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r); -int luaV_equalval (lua_State *L, const TObject *t1, const TObject *t2); -const TObject *luaV_tonumber (const TObject *obj, TObject *n); -int luaV_tostring (lua_State *L, StkId obj); -const TObject *luaV_gettable (lua_State *L, const TObject *t, TObject *key, - int loop); -void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val); -StkId luaV_execute (lua_State *L); -void luaV_concat (lua_State *L, int total, int last); - -#endif diff --git a/stepmania/src/lua-5.0/src/lzio.c b/stepmania/src/lua-5.0/src/lzio.c deleted file mode 100644 index 5a49621890..0000000000 --- a/stepmania/src/lua-5.0/src/lzio.c +++ /dev/null @@ -1,81 +0,0 @@ -/* -** $Id$ -** a generic input stream interface -** See Copyright Notice in lua.h -*/ - - -#include - -#define lzio_c - -#include "lua.h" - -#include "llimits.h" -#include "lmem.h" -#include "lzio.h" - - -int luaZ_fill (ZIO *z) { - size_t size; - const char *buff = z->reader(NULL, z->data, &size); - if (buff == NULL || size == 0) return EOZ; - z->n = size - 1; - z->p = buff; - return char2int(*(z->p++)); -} - - -int luaZ_lookahead (ZIO *z) { - if (z->n == 0) { - int c = luaZ_fill(z); - if (c == EOZ) return c; - z->n++; - z->p--; - } - return char2int(*z->p); -} - - -void luaZ_init (ZIO *z, lua_Chunkreader reader, void *data, const char *name) { - z->reader = reader; - z->data = data; - z->name = name; - z->n = 0; - z->p = NULL; -} - - -/* --------------------------------------------------------------- read --- */ -size_t luaZ_read (ZIO *z, void *b, size_t n) { - while (n) { - size_t m; - if (z->n == 0) { - if (luaZ_fill(z) == EOZ) - return n; /* return number of missing bytes */ - else { - ++z->n; /* filbuf removed first byte; put back it */ - --z->p; - } - } - m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ - memcpy(b, z->p, m); - z->n -= m; - z->p += m; - b = (char *)b + m; - n -= m; - } - return 0; -} - -/* ------------------------------------------------------------------------ */ -char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { - if (n > buff->buffsize) { - if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; - luaM_reallocvector(L, buff->buffer, buff->buffsize, n, char); - buff->buffsize = n; - } - return buff->buffer; -} - - diff --git a/stepmania/src/lua-5.0/src/lzio.h b/stepmania/src/lua-5.0/src/lzio.h deleted file mode 100644 index 17ed5efd57..0000000000 --- a/stepmania/src/lua-5.0/src/lzio.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -** $Id$ -** Buffered streams -** See Copyright Notice in lua.h -*/ - - -#ifndef lzio_h -#define lzio_h - -#include "lua.h" - - -#define EOZ (-1) /* end of stream */ - -typedef struct Zio ZIO; - - -#define char2int(c) cast(int, cast(unsigned char, (c))) - -#define zgetc(z) (((z)->n--)>0 ? char2int(*(z)->p++) : luaZ_fill(z)) - -#define zname(z) ((z)->name) - -void luaZ_init (ZIO *z, lua_Chunkreader reader, void *data, const char *name); -size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ -int luaZ_lookahead (ZIO *z); - - - -typedef struct Mbuffer { - char *buffer; - size_t buffsize; -} Mbuffer; - - -char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); - -#define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) - -#define luaZ_sizebuffer(buff) ((buff)->buffsize) -#define luaZ_buffer(buff) ((buff)->buffer) - -#define luaZ_resizebuffer(L, buff, size) \ - (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ - (buff)->buffsize = size) - -#define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) - - -/* --------- Private Part ------------------ */ - -struct Zio { - size_t n; /* bytes still unread */ - const char *p; /* current position in buffer */ - lua_Chunkreader reader; - void* data; /* additional data */ - const char *name; -}; - - -int luaZ_fill (ZIO *z); - -#endif