From 43c8e5bded052801f54a7439d18933b83570eb82 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 30 Oct 2023 14:25:59 -0300 Subject: Full abstraction for representation of array values --- ltable.h | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'ltable.h') diff --git a/ltable.h b/ltable.h index 5ec7b447..371e721d 100644 --- a/ltable.h +++ b/ltable.h @@ -51,20 +51,33 @@ */ +struct ArrayCell { + lu_byte tt; + Value value; +}; + /* fast access to components of array values */ -#define getArrTag(t,k) (&(t)->array[k - 1].tt_) -#define getArrVal(t,k) (&(t)->array[k - 1].value_) +#define getArrTag(t,k) (&(t)->array[k - 1].tt) +#define getArrVal(t,k) (&(t)->array[k - 1].value) #define tagisempty(tag) (novariant(tag) == LUA_TNIL) -#define arr2val(h,k,tag,res) \ + +#define farr2val(h,k,tag,res) \ ((res)->tt_ = tag, (res)->value_ = *getArrVal(h,k)) -#define val2arr(h,k,tag,val) \ +#define fval2arr(h,k,tag,val) \ (*tag = (val)->tt_, *getArrVal(h,k) = (val)->value_) +#define obj2arr(h,k,val) \ + (*getArrTag(h,k) = (val)->tt_, *getArrVal(h,k) = (val)->value_) + +#define arr2obj(h,k,val) \ + ((val)->tt_ = *getArrTag(h,k), (val)->value_ = *getArrVal(h,k)) + + LUAI_FUNC int luaH_getshortstr (Table *t, TString *key, TValue *res); LUAI_FUNC int luaH_getstr (Table *t, TString *key, TValue *res); LUAI_FUNC int luaH_get (Table *t, const TValue *key, TValue *res); -- cgit v1.2.3-55-g6feb