diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-12-17 15:45:13 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-12-17 15:45:13 -0300 |
| commit | c646e57fd6307bd891e4e50ef5d6ee56b34e4cac (patch) | |
| tree | e8f2d8a7bcb9f5c51ddc03f94f576f2fc6f43f06 /lapi.c | |
| parent | e0ab13c62f2c1af0af955f173beb3ea6473e8064 (diff) | |
| download | lua-c646e57fd6307bd891e4e50ef5d6ee56b34e4cac.tar.gz lua-c646e57fd6307bd891e4e50ef5d6ee56b34e4cac.tar.bz2 lua-c646e57fd6307bd891e4e50ef5d6ee56b34e4cac.zip | |
Joined common code in 'lua_rawset' and 'lua_rawsetp'
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 31 |
1 files changed, 14 insertions, 17 deletions
| @@ -848,42 +848,39 @@ LUA_API void lua_seti (lua_State *L, int idx, lua_Integer n) { | |||
| 848 | } | 848 | } |
| 849 | 849 | ||
| 850 | 850 | ||
| 851 | LUA_API void lua_rawset (lua_State *L, int idx) { | 851 | static void aux_rawset (lua_State *L, int idx, TValue *key, int n) { |
| 852 | Table *t; | 852 | Table *t; |
| 853 | TValue *slot; | 853 | TValue *slot; |
| 854 | lua_lock(L); | 854 | lua_lock(L); |
| 855 | api_checknelems(L, 2); | 855 | api_checknelems(L, n); |
| 856 | t = gettable(L, idx); | 856 | t = gettable(L, idx); |
| 857 | slot = luaH_set(L, t, s2v(L->top - 2)); | 857 | slot = luaH_set(L, t, key); |
| 858 | setobj2t(L, slot, s2v(L->top - 1)); | 858 | setobj2t(L, slot, s2v(L->top - 1)); |
| 859 | L->top -= n; | ||
| 859 | invalidateTMcache(t); | 860 | invalidateTMcache(t); |
| 860 | luaC_barrierback(L, obj2gco(t), s2v(L->top - 1)); | 861 | luaC_barrierback(L, obj2gco(t), s2v(L->top - 1)); |
| 861 | L->top -= 2; | ||
| 862 | lua_unlock(L); | 862 | lua_unlock(L); |
| 863 | } | 863 | } |
| 864 | 864 | ||
| 865 | 865 | ||
| 866 | LUA_API void lua_rawseti (lua_State *L, int idx, lua_Integer n) { | 866 | LUA_API void lua_rawset (lua_State *L, int idx) { |
| 867 | Table *t; | 867 | aux_rawset(L, idx, s2v(L->top - 2), 2); |
| 868 | lua_lock(L); | ||
| 869 | api_checknelems(L, 1); | ||
| 870 | t = gettable(L, idx); | ||
| 871 | luaH_setint(L, t, n, s2v(L->top - 1)); | ||
| 872 | luaC_barrierback(L, obj2gco(t), s2v(L->top - 1)); | ||
| 873 | L->top--; | ||
| 874 | lua_unlock(L); | ||
| 875 | } | 868 | } |
| 876 | 869 | ||
| 877 | 870 | ||
| 878 | LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { | 871 | LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { |
| 872 | TValue k; | ||
| 873 | setpvalue(&k, cast_voidp(p)); | ||
| 874 | aux_rawset(L, idx, &k, 1); | ||
| 875 | } | ||
| 876 | |||
| 877 | |||
| 878 | LUA_API void lua_rawseti (lua_State *L, int idx, lua_Integer n) { | ||
| 879 | Table *t; | 879 | Table *t; |
| 880 | TValue k, *slot; | ||
| 881 | lua_lock(L); | 880 | lua_lock(L); |
| 882 | api_checknelems(L, 1); | 881 | api_checknelems(L, 1); |
| 883 | t = gettable(L, idx); | 882 | t = gettable(L, idx); |
| 884 | setpvalue(&k, cast_voidp(p)); | 883 | luaH_setint(L, t, n, s2v(L->top - 1)); |
| 885 | slot = luaH_set(L, t, &k); | ||
| 886 | setobj2t(L, slot, s2v(L->top - 1)); | ||
| 887 | luaC_barrierback(L, obj2gco(t), s2v(L->top - 1)); | 884 | luaC_barrierback(L, obj2gco(t), s2v(L->top - 1)); |
| 888 | L->top--; | 885 | L->top--; |
| 889 | lua_unlock(L); | 886 | lua_unlock(L); |
