aboutsummaryrefslogtreecommitdiff
path: root/ltable.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-10-30 14:25:59 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-10-30 14:25:59 -0300
commit43c8e5bded052801f54a7439d18933b83570eb82 (patch)
tree97f6d1e020110e14c798537c7bbb1f90feed4044 /ltable.h
parentb8b709b6d40c5c18d9b8ef33bb50afc55f048ab8 (diff)
downloadlua-43c8e5bded052801f54a7439d18933b83570eb82.tar.gz
lua-43c8e5bded052801f54a7439d18933b83570eb82.tar.bz2
lua-43c8e5bded052801f54a7439d18933b83570eb82.zip
Full abstraction for representation of array values
Diffstat (limited to 'ltable.h')
-rw-r--r--ltable.h21
1 files changed, 17 insertions, 4 deletions
diff --git a/ltable.h b/ltable.h
index 5ec7b447..371e721d 100644
--- a/ltable.h
+++ b/ltable.h
@@ -51,20 +51,33 @@
51*/ 51*/
52 52
53 53
54struct ArrayCell {
55 lu_byte tt;
56 Value value;
57};
58
54 59
55/* fast access to components of array values */ 60/* fast access to components of array values */
56#define getArrTag(t,k) (&(t)->array[k - 1].tt_) 61#define getArrTag(t,k) (&(t)->array[k - 1].tt)
57#define getArrVal(t,k) (&(t)->array[k - 1].value_) 62#define getArrVal(t,k) (&(t)->array[k - 1].value)
58 63
59#define tagisempty(tag) (novariant(tag) == LUA_TNIL) 64#define tagisempty(tag) (novariant(tag) == LUA_TNIL)
60 65
61#define arr2val(h,k,tag,res) \ 66
67#define farr2val(h,k,tag,res) \
62 ((res)->tt_ = tag, (res)->value_ = *getArrVal(h,k)) 68 ((res)->tt_ = tag, (res)->value_ = *getArrVal(h,k))
63 69
64#define val2arr(h,k,tag,val) \ 70#define fval2arr(h,k,tag,val) \
65 (*tag = (val)->tt_, *getArrVal(h,k) = (val)->value_) 71 (*tag = (val)->tt_, *getArrVal(h,k) = (val)->value_)
66 72
67 73
74#define obj2arr(h,k,val) \
75 (*getArrTag(h,k) = (val)->tt_, *getArrVal(h,k) = (val)->value_)
76
77#define arr2obj(h,k,val) \
78 ((val)->tt_ = *getArrTag(h,k), (val)->value_ = *getArrVal(h,k))
79
80
68LUAI_FUNC int luaH_getshortstr (Table *t, TString *key, TValue *res); 81LUAI_FUNC int luaH_getshortstr (Table *t, TString *key, TValue *res);
69LUAI_FUNC int luaH_getstr (Table *t, TString *key, TValue *res); 82LUAI_FUNC int luaH_getstr (Table *t, TString *key, TValue *res);
70LUAI_FUNC int luaH_get (Table *t, const TValue *key, TValue *res); 83LUAI_FUNC int luaH_get (Table *t, const TValue *key, TValue *res);