From b1141427991dea7a96597f2aacdedf243b60decd Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 26 Aug 2003 09:04:13 -0300 Subject: new auxiliary function `luaH_setstr' --- ldo.c | 7 +++---- ltable.c | 14 +++++++++++++- ltable.h | 3 ++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ldo.c b/ldo.c index c6fd0b59..2b5dfdbf 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 1.221 2003/07/16 20:51:47 roberto Exp roberto $ +** $Id: ldo.c,v 1.222 2003/08/25 19:51:54 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -198,7 +198,6 @@ void luaD_callhook (lua_State *L, int event, int line) { static void adjust_varargs (lua_State *L, int nfixargs, StkId base) { int i; Table *htab; - TObject nname; int actual = L->top - base; /* actual number of arguments */ if (actual < nfixargs) { luaD_checkstack(L, nfixargs - actual); @@ -210,8 +209,8 @@ static void adjust_varargs (lua_State *L, int nfixargs, StkId base) { for (i=0; itop - actual + i); /* store counter in field `n' */ - setsvalue(&nname, luaS_newliteral(L, "n")); - setnvalue(luaH_set(L, htab, &nname), cast(lua_Number, actual)); + setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), + cast(lua_Number, actual)); L->top -= actual; /* remove extra elements from the stack */ sethvalue(L->top, htab); incr_top(L); diff --git a/ltable.c b/ltable.c index ed247d4e..c3bce93a 100644 --- a/ltable.c +++ b/ltable.c @@ -1,5 +1,5 @@ /* -** $Id: ltable.c,v 1.133 2003/04/28 13:31:46 roberto Exp roberto $ +** $Id: ltable.c,v 1.134 2003/04/28 19:26:16 roberto Exp roberto $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ @@ -511,3 +511,15 @@ TObject *luaH_setnum (lua_State *L, Table *t, int key) { } } + +TObject *luaH_setstr (lua_State *L, Table *t, TString *key) { + const TObject *p = luaH_getstr(t, key); + if (p != &luaO_nilobject) + return cast(TObject *, p); + else { + TObject k; + setsvalue(&k, key); + return newkey(L, t, &k); + } +} + diff --git a/ltable.h b/ltable.h index 3218b69b..5a4076bc 100644 --- a/ltable.h +++ b/ltable.h @@ -1,5 +1,5 @@ /* -** $Id: ltable.h,v 1.43 2002/11/07 16:03:33 roberto Exp roberto $ +** $Id: ltable.h,v 1.44 2003/03/18 12:50:04 roberto Exp roberto $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ @@ -18,6 +18,7 @@ const TObject *luaH_getnum (Table *t, int key); TObject *luaH_setnum (lua_State *L, Table *t, int key); const TObject *luaH_getstr (Table *t, TString *key); +TObject *luaH_setstr (lua_State *L, Table *t, TString *key); const TObject *luaH_get (Table *t, const TObject *key); TObject *luaH_set (lua_State *L, Table *t, const TObject *key); Table *luaH_new (lua_State *L, int narray, int lnhash); -- cgit v1.2.3-55-g6feb