aboutsummaryrefslogtreecommitdiff
path: root/src/lua/ldblib.c
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2021-03-03 21:31:01 +0800
committerLi Jin <dragon-fly@qq.com>2021-03-03 21:33:37 +0800
commit1df786307c1983b8ce693e3916081a8bcd4e95ae (patch)
tree6c7aeb2198d825877fd3d179c394b7a5c1f06a17 /src/lua/ldblib.c
parent66168b112b707172b9035edf8c1daed469781e06 (diff)
downloadyuescript-1df786307c1983b8ce693e3916081a8bcd4e95ae.tar.gz
yuescript-1df786307c1983b8ce693e3916081a8bcd4e95ae.tar.bz2
yuescript-1df786307c1983b8ce693e3916081a8bcd4e95ae.zip
add new metatable syntax for issue #41, fix reusing local variable issue, update built-in Lua.
Diffstat (limited to 'src/lua/ldblib.c')
-rw-r--r--src/lua/ldblib.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lua/ldblib.c b/src/lua/ldblib.c
index 15593bf..6dcbaa9 100644
--- a/src/lua/ldblib.c
+++ b/src/lua/ldblib.c
@@ -33,7 +33,7 @@ static const char *const HOOKKEY = "_HOOKKEY";
33** checked. 33** checked.
34*/ 34*/
35static void checkstack (lua_State *L, lua_State *L1, int n) { 35static void checkstack (lua_State *L, lua_State *L1, int n) {
36 if (L != L1 && !lua_checkstack(L1, n)) 36 if (l_unlikely(L != L1 && !lua_checkstack(L1, n)))
37 luaL_error(L, "stack overflow"); 37 luaL_error(L, "stack overflow");
38} 38}
39 39
@@ -152,6 +152,7 @@ static int db_getinfo (lua_State *L) {
152 lua_State *L1 = getthread(L, &arg); 152 lua_State *L1 = getthread(L, &arg);
153 const char *options = luaL_optstring(L, arg+2, "flnSrtu"); 153 const char *options = luaL_optstring(L, arg+2, "flnSrtu");
154 checkstack(L, L1, 3); 154 checkstack(L, L1, 3);
155 luaL_argcheck(L, options[0] != '>', arg + 2, "invalid option '>'");
155 if (lua_isfunction(L, arg + 1)) { /* info about a function? */ 156 if (lua_isfunction(L, arg + 1)) { /* info about a function? */
156 options = lua_pushfstring(L, ">%s", options); /* add '>' to 'options' */ 157 options = lua_pushfstring(L, ">%s", options); /* add '>' to 'options' */
157 lua_pushvalue(L, arg + 1); /* move function to 'L1' stack */ 158 lua_pushvalue(L, arg + 1); /* move function to 'L1' stack */
@@ -212,7 +213,7 @@ static int db_getlocal (lua_State *L) {
212 lua_Debug ar; 213 lua_Debug ar;
213 const char *name; 214 const char *name;
214 int level = (int)luaL_checkinteger(L, arg + 1); 215 int level = (int)luaL_checkinteger(L, arg + 1);
215 if (!lua_getstack(L1, level, &ar)) /* out of range? */ 216 if (l_unlikely(!lua_getstack(L1, level, &ar))) /* out of range? */
216 return luaL_argerror(L, arg+1, "level out of range"); 217 return luaL_argerror(L, arg+1, "level out of range");
217 checkstack(L, L1, 1); 218 checkstack(L, L1, 1);
218 name = lua_getlocal(L1, &ar, nvar); 219 name = lua_getlocal(L1, &ar, nvar);
@@ -237,7 +238,7 @@ static int db_setlocal (lua_State *L) {
237 lua_Debug ar; 238 lua_Debug ar;
238 int level = (int)luaL_checkinteger(L, arg + 1); 239 int level = (int)luaL_checkinteger(L, arg + 1);
239 int nvar = (int)luaL_checkinteger(L, arg + 2); 240 int nvar = (int)luaL_checkinteger(L, arg + 2);
240 if (!lua_getstack(L1, level, &ar)) /* out of range? */ 241 if (l_unlikely(!lua_getstack(L1, level, &ar))) /* out of range? */
241 return luaL_argerror(L, arg+1, "level out of range"); 242 return luaL_argerror(L, arg+1, "level out of range");
242 luaL_checkany(L, arg+3); 243 luaL_checkany(L, arg+3);
243 lua_settop(L, arg+3); 244 lua_settop(L, arg+3);