ソースを参照

new auxiliary function `luaH_setstr'

Roberto Ierusalimschy 22 年 前
コミット
b114142799
3 ファイル変更18 行追加6 行削除
  1. 3 4
      ldo.c
  2. 13 1
      ltable.c
  3. 2 1
      ltable.h

+ 3 - 4
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; i<actual; i++)  /* put extra arguments into `arg' table */
     setobj2n(luaH_setnum(L, htab, i+1), L->top - 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);

+ 13 - 1
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);
+  }
+}
+

+ 2 - 1
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);