aboutsummaryrefslogtreecommitdiff
path: root/ltable.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2024-03-21 11:23:21 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2024-03-21 11:23:21 -0300
commit0593256707ceddb1bc9cd4b25b822a7fbcfedd66 (patch)
tree6c6859b94086b71b27409b565ed34c114f03e7f8 /ltable.h
parentce6f5502c99ce9a367e25b678e375db6f8164d73 (diff)
downloadlua-0593256707ceddb1bc9cd4b25b822a7fbcfedd66.tar.gz
lua-0593256707ceddb1bc9cd4b25b822a7fbcfedd66.tar.bz2
lua-0593256707ceddb1bc9cd4b25b822a7fbcfedd66.zip
'luaH_get' functions return tag of the result
Undoing previous commit. Returning TValue increases code size without any visible gains. Returning the tag is a little simpler than returning a special code (HOK/HNOTFOUND) and the tag is useful by itself in some cases.
Diffstat (limited to 'ltable.h')
-rw-r--r--ltable.h29
1 files changed, 16 insertions, 13 deletions
diff --git a/ltable.h b/ltable.h
index 10dae5c7..1f2ea3ee 100644
--- a/ltable.h
+++ b/ltable.h
@@ -46,11 +46,12 @@
46 46
47 47
48 48
49#define luaH_fastgeti(t,k,res,aux) \ 49#define luaH_fastgeti(t,k,res,tag) \
50 { Table *h = t; lua_Unsigned u = l_castS2U(k); \ 50 { Table *h = t; lua_Unsigned u = l_castS2U(k); \
51 if ((u - 1u < h->alimit)) arr2objV(h,u,aux); \ 51 if ((u - 1u < h->alimit)) { \
52 else aux = luaH_getint(h, u); \ 52 tag = *getArrTag(h,(u)-1u); \
53 if (!isemptyV(aux)) setobjV(cast(lua_State*, NULL), res, aux); } 53 if (!tagisempty(tag)) { farr2val(h, u, tag, res); }} \
54 else { tag = luaH_getint(h, u, res); }}
54 55
55 56
56#define luaH_fastseti(t,k,val,hres) \ 57#define luaH_fastseti(t,k,val,hres) \
@@ -69,6 +70,8 @@
69#define HFIRSTNODE 3 70#define HFIRSTNODE 3
70 71
71/* 72/*
73** 'luaH_get*' operations set 'res', unless the value is absent, and
74** return the tag of the result,
72** The 'luaH_pset*' (pre-set) operations set the given value and return 75** The 'luaH_pset*' (pre-set) operations set the given value and return
73** HOK, unless the original value is absent. In that case, if the key 76** HOK, unless the original value is absent. In that case, if the key
74** is really absent, they return HNOTFOUND. Otherwise, if there is a 77** is really absent, they return HNOTFOUND. Otherwise, if there is a
@@ -85,7 +88,8 @@
85/* 88/*
86** The array part of a table is represented by an array of cells. 89** The array part of a table is represented by an array of cells.
87** Each cell is composed of NM tags followed by NM values, so that 90** Each cell is composed of NM tags followed by NM values, so that
88** no space is wasted in padding. 91** no space is wasted in padding. The last cell may be incomplete,
92** that is, it may have fewer than NM values.
89*/ 93*/
90#define NM cast_uint(sizeof(Value)) 94#define NM cast_uint(sizeof(Value))
91 95
@@ -105,10 +109,8 @@ struct ArrayCell {
105/* 109/*
106** Move TValues to/from arrays, using Lua indices 110** Move TValues to/from arrays, using Lua indices
107*/ 111*/
108#define arr2objV(h,k,val) \ 112#define arr2obj(h,k,val) \
109 ((val).tt_ = *getArrTag(h,(k)-1u), (val).value_ = *getArrVal(h,(k)-1u)) 113 ((val)->tt_ = *getArrTag(h,(k)-1u), (val)->value_ = *getArrVal(h,(k)-1u))
110
111#define arr2obj(h,k,val) arr2objV(h,k,*(val))
112 114
113#define obj2arr(h,k,val) \ 115#define obj2arr(h,k,val) \
114 (*getArrTag(h,(k)-1u) = (val)->tt_, *getArrVal(h,(k)-1u) = (val)->value_) 116 (*getArrTag(h,(k)-1u) = (val)->tt_, *getArrVal(h,(k)-1u) = (val)->value_)
@@ -126,11 +128,12 @@ struct ArrayCell {
126 (*tag = (val)->tt_, *getArrVal(h,(k)-1u) = (val)->value_) 128 (*tag = (val)->tt_, *getArrVal(h,(k)-1u) = (val)->value_)
127 129
128 130
129LUAI_FUNC TValue luaH_get (Table *t, const TValue *key); 131LUAI_FUNC int luaH_get (Table *t, const TValue *key, TValue *res);
130LUAI_FUNC TValue luaH_getshortstr (Table *t, TString *key); 132LUAI_FUNC int luaH_getshortstr (Table *t, TString *key, TValue *res);
131LUAI_FUNC TValue luaH_getstr (Table *t, TString *key); 133LUAI_FUNC int luaH_getstr (Table *t, TString *key, TValue *res);
132LUAI_FUNC TValue luaH_getint (Table *t, lua_Integer key); 134LUAI_FUNC int luaH_getint (Table *t, lua_Integer key, TValue *res);
133 135
136/* Special get for metamethods */
134LUAI_FUNC const TValue *luaH_Hgetshortstr (Table *t, TString *key); 137LUAI_FUNC const TValue *luaH_Hgetshortstr (Table *t, TString *key);
135 138
136LUAI_FUNC TString *luaH_getstrkey (Table *t, TString *key); 139LUAI_FUNC TString *luaH_getstrkey (Table *t, TString *key);