diff options
author | Li Jin <dragon-fly@qq.com> | 2021-03-03 21:31:01 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2021-03-03 21:33:37 +0800 |
commit | 1df786307c1983b8ce693e3916081a8bcd4e95ae (patch) | |
tree | 6c7aeb2198d825877fd3d179c394b7a5c1f06a17 /src/lua/ldblib.c | |
parent | 66168b112b707172b9035edf8c1daed469781e06 (diff) | |
download | yuescript-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.c | 7 |
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 | */ |
35 | static void checkstack (lua_State *L, lua_State *L1, int n) { | 35 | static 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); |