commit 1ede98157db12ded9c6be1ed8ab8742bcf6c046d
parent 3e52573c722190f4e5f9b996fe8eb7927b65e2a8
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 4 Jul 2002 14:57:40 -0300
strings are always `strong' in weaktables
Diffstat:
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/lbaselib.c b/lbaselib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lbaselib.c,v 1.88 2002/06/26 20:36:17 roberto Exp roberto $
+** $Id: lbaselib.c,v 1.89 2002/07/01 19:23:58 roberto Exp roberto $
** Basic library
** See Copyright Notice in lua.h
*/
@@ -571,11 +571,11 @@ static void base_open (lua_State *L) {
/* `newproxy' needs a weaktable as upvalue */
lua_pushliteral(L, "newproxy");
lua_newtable(L); /* new table `w' */
- lua_newtable(L); /* create `w's metatable */
+ lua_pushvalue(L, -1); /* `w' will be its own metatable */
+ lua_setmetatable(L, -2);
lua_pushliteral(L, "__mode");
lua_pushliteral(L, "k");
lua_rawset(L, -3); /* metatable(w).__mode = "k" */
- lua_setmetatable(L, -2);
lua_pushcclosure(L, luaB_newproxy, 1);
lua_rawset(L, -3); /* set global `newproxy' */
lua_rawset(L, -1); /* set global _G */
diff --git a/lgc.c b/lgc.c
@@ -1,5 +1,5 @@
/*
-** $Id: lgc.c,v 1.139 2002/06/25 19:17:42 roberto Exp roberto $
+** $Id: lgc.c,v 1.140 2002/07/01 17:06:58 roberto Exp roberto $
** Garbage Collector
** See Copyright Notice in lua.h
*/
@@ -263,15 +263,16 @@ static void propagatemarks (GCState *st) {
static int hasmark (const TObject *o) {
switch (ttype(o)) {
- case LUA_TSTRING:
- return tsvalue(o)->tsv.marked;
case LUA_TUSERDATA:
return isudmarked(uvalue(o));
case LUA_TTABLE:
return ismarked(hvalue(o));
case LUA_TFUNCTION:
return clvalue(o)->c.marked;
- default: /* number, nil, boolean */
+ case LUA_TSTRING:
+ strmark(tsvalue(o)); /* strings are `values', so are never weak */
+ /* go through */
+ default: /* number, nil, boolean, udataval */
return 1;
}
}