lua

A copy of the Lua development repository
Log | Files | Refs | README

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:
Mlbaselib.c | 6+++---
Mlgc.c | 9+++++----
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; } }