diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-11-26 12:32:31 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-11-26 12:32:31 -0200 |
commit | 9b7a12c46d85666e0e60efd79b39495589e497e8 (patch) | |
tree | c69acde3d3e300fa0db87004045e7599cbbca7a2 /lapi.c | |
parent | 5b33e398557d7afad4a916bb483e9894e4b9b3d4 (diff) | |
download | lua-9b7a12c46d85666e0e60efd79b39495589e497e8.tar.gz lua-9b7a12c46d85666e0e60efd79b39495589e497e8.tar.bz2 lua-9b7a12c46d85666e0e60efd79b39495589e497e8.zip |
finalizers (__gc) for tables
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 2.139 2010/10/25 20:31:11 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.141 2010/11/18 19:15:00 roberto Exp roberto $ |
3 | ** Lua API | 3 | ** Lua API |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -760,13 +760,14 @@ LUA_API int lua_setmetatable (lua_State *L, int objindex) { | |||
760 | hvalue(obj)->metatable = mt; | 760 | hvalue(obj)->metatable = mt; |
761 | if (mt) | 761 | if (mt) |
762 | luaC_objbarrierback(L, gcvalue(obj), mt); | 762 | luaC_objbarrierback(L, gcvalue(obj), mt); |
763 | luaC_checkfinalizer(L, gcvalue(obj), mt); | ||
763 | break; | 764 | break; |
764 | } | 765 | } |
765 | case LUA_TUSERDATA: { | 766 | case LUA_TUSERDATA: { |
766 | uvalue(obj)->metatable = mt; | 767 | uvalue(obj)->metatable = mt; |
767 | if (mt) { | 768 | if (mt) { |
768 | luaC_objbarrier(L, rawuvalue(obj), mt); | 769 | luaC_objbarrier(L, rawuvalue(obj), mt); |
769 | luaC_checkfinalizer(L, rawuvalue(obj)); | 770 | luaC_checkfinalizer(L, gcvalue(obj), mt); |
770 | } | 771 | } |
771 | break; | 772 | break; |
772 | } | 773 | } |