11/*
2- ** $Id: lapi.c,v 2.292 2018/06/01 17:40:38 roberto Exp roberto $
2+ ** $Id: lapi.c,v 2.293 2018/06/15 17:30:52 roberto Exp roberto $
33** Lua API
44** See Copyright Notice in lua.h
55*/
@@ -37,13 +37,10 @@ const char lua_ident[] =
3737 "$LuaAuthors: " LUA_AUTHORS " $" ;
3838
3939
40- /* value at a non-valid index */
4140
42- static const TValue nonvalidvaluep = { NILCONSTANT };
43- #define NONVALIDVALUE cast(TValue *, &nonvalidvaluep )
41+ /* test for a valid index */
42+ #define isvalid ( L , o ) (!ttisnil(o) || o != &G(L)->nilvalue )
4443
45- /* corresponding test */
46- #define isvalid (o ) ((o) != &nonvalidvaluep)
4744
4845/* test for pseudo index */
4946#define ispseudo (i ) ((i) <= LUA_REGISTRYINDEX)
@@ -57,7 +54,7 @@ static TValue *index2value (lua_State *L, int idx) {
5754 if (idx > 0 ) {
5855 StkId o = ci -> func + idx ;
5956 api_check (L , idx <= L -> ci -> top - (ci -> func + 1 ), "unacceptable index" );
60- if (o >= L -> top ) return NONVALIDVALUE ;
57+ if (o >= L -> top ) return & G ( L ) -> nilvalue ;
6158 else return s2v (o );
6259 }
6360 else if (!ispseudo (idx )) { /* negative index */
@@ -70,10 +67,10 @@ static TValue *index2value (lua_State *L, int idx) {
7067 idx = LUA_REGISTRYINDEX - idx ;
7168 api_check (L , idx <= MAXUPVAL + 1 , "upvalue index too large" );
7269 if (ttislcf (s2v (ci -> func ))) /* light C function? */
73- return NONVALIDVALUE ; /* it has no upvalues */
70+ return & G ( L ) -> nilvalue ; /* it has no upvalues */
7471 else {
7572 CClosure * func = clCvalue (s2v (ci -> func ));
76- return (idx <= func -> nupvalues ) ? & func -> upvalue [idx - 1 ] : NONVALIDVALUE ;
73+ return (idx <= func -> nupvalues ) ? & func -> upvalue [idx - 1 ] : & G ( L ) -> nilvalue ;
7774 }
7875 }
7976}
@@ -225,7 +222,7 @@ LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) {
225222 lua_lock (L );
226223 fr = index2value (L , fromidx );
227224 to = index2value (L , toidx );
228- api_check (l , isvalid (to ), "invalid index" );
225+ api_check (l , isvalid (L , to ), "invalid index" );
229226 setobj (L , to , fr );
230227 if (isupvalue (toidx )) /* function upvalue? */
231228 luaC_barrier (L , clCvalue (s2v (L -> ci -> func )), fr );
@@ -251,7 +248,7 @@ LUA_API void lua_pushvalue (lua_State *L, int idx) {
251248
252249LUA_API int lua_type (lua_State * L , int idx ) {
253250 const TValue * o = index2value (L , idx );
254- return (isvalid (o ) ? ttype (o ) : LUA_TNONE );
251+ return (isvalid (L , o ) ? ttype (o ) : LUA_TNONE );
255252}
256253
257254
@@ -296,7 +293,7 @@ LUA_API int lua_isuserdata (lua_State *L, int idx) {
296293LUA_API int lua_rawequal (lua_State * L , int index1 , int index2 ) {
297294 const TValue * o1 = index2value (L , index1 );
298295 const TValue * o2 = index2value (L , index2 );
299- return (isvalid (o1 ) && isvalid (o2 )) ? luaV_rawequalobj (o1 , o2 ) : 0 ;
296+ return (isvalid (L , o1 ) && isvalid (L , o2 )) ? luaV_rawequalobj (o1 , o2 ) : 0 ;
300297}
301298
302299
@@ -323,7 +320,7 @@ LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) {
323320 lua_lock (L ); /* may call tag method */
324321 o1 = index2value (L , index1 );
325322 o2 = index2value (L , index2 );
326- if (isvalid (o1 ) && isvalid (o2 )) {
323+ if (isvalid (L , o1 ) && isvalid (L , o2 )) {
327324 switch (op ) {
328325 case LUA_OPEQ : i = luaV_equalobj (L , o1 , o2 ); break ;
329326 case LUA_OPLT : i = luaV_lessthan (L , o1 , o2 ); break ;
0 commit comments