|
1 | 1 | /* |
2 | | -** $Id: lapi.c,v 2.229 2014/07/19 15:09:37 roberto Exp roberto $ |
| 2 | +** $Id: lapi.c,v 2.230 2014/07/21 16:02:57 roberto Exp roberto $ |
3 | 3 | ** Lua API |
4 | 4 | ** See Copyright Notice in lua.h |
5 | 5 | */ |
@@ -44,6 +44,9 @@ const char lua_ident[] = |
44 | 44 | /* test for pseudo index */ |
45 | 45 | #define ispseudo(i) ((i) <= LUA_REGISTRYINDEX) |
46 | 46 |
|
| 47 | +/* test for upvalue */ |
| 48 | +#define isupvalue(i) ((i) < LUA_REGISTRYINDEX) |
| 49 | + |
47 | 50 | /* test for valid but not pseudo index */ |
48 | 51 | #define isstackindex(i, o) (isvalid(o) && !ispseudo(i)) |
49 | 52 |
|
@@ -214,31 +217,17 @@ LUA_API void lua_rotate (lua_State *L, int idx, int n) { |
214 | 217 | } |
215 | 218 |
|
216 | 219 |
|
217 | | -static void moveto (lua_State *L, TValue *fr, int idx) { |
218 | | - TValue *to = index2addr(L, idx); |
| 220 | +LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { |
| 221 | + TValue *fr, *to; |
| 222 | + lua_lock(L); |
| 223 | + fr = index2addr(L, fromidx); |
| 224 | + to = index2addr(L, toidx); |
219 | 225 | api_checkvalidindex(to); |
220 | 226 | setobj(L, to, fr); |
221 | | - if (idx < LUA_REGISTRYINDEX) /* function upvalue? */ |
| 227 | + if (isupvalue(toidx)) /* function upvalue? */ |
222 | 228 | luaC_barrier(L, clCvalue(L->ci->func), fr); |
223 | 229 | /* LUA_REGISTRYINDEX does not need gc barrier |
224 | 230 | (collector revisits it before finishing collection) */ |
225 | | -} |
226 | | - |
227 | | - |
228 | | -LUA_API void lua_replace (lua_State *L, int idx) { |
229 | | - lua_lock(L); |
230 | | - api_checknelems(L, 1); |
231 | | - moveto(L, L->top - 1, idx); |
232 | | - L->top--; |
233 | | - lua_unlock(L); |
234 | | -} |
235 | | - |
236 | | - |
237 | | -LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { |
238 | | - TValue *fr; |
239 | | - lua_lock(L); |
240 | | - fr = index2addr(L, fromidx); |
241 | | - moveto(L, fr, toidx); |
242 | 231 | lua_unlock(L); |
243 | 232 | } |
244 | 233 |
|
|
0 commit comments