diff options
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -252,12 +252,13 @@ void luaC_fix (lua_State *L, GCObject *o) { | |||
252 | 252 | ||
253 | 253 | ||
254 | /* | 254 | /* |
255 | ** create a new collectable object (with given type and size) and link | 255 | ** create a new collectable object (with given type, size, and offset) |
256 | ** it to 'allgc' list. | 256 | ** and link it to 'allgc' list. |
257 | */ | 257 | */ |
258 | GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) { | 258 | GCObject *luaC_newobjdt (lua_State *L, int tt, size_t sz, size_t offset) { |
259 | global_State *g = G(L); | 259 | global_State *g = G(L); |
260 | GCObject *o = cast(GCObject *, luaM_newobject(L, novariant(tt), sz)); | 260 | char *p = cast_charp(luaM_newobject(L, novariant(tt), sz)); |
261 | GCObject *o = cast(GCObject *, p + offset); | ||
261 | o->marked = luaC_white(g); | 262 | o->marked = luaC_white(g); |
262 | o->tt = tt; | 263 | o->tt = tt; |
263 | o->next = g->allgc; | 264 | o->next = g->allgc; |
@@ -265,6 +266,11 @@ GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) { | |||
265 | return o; | 266 | return o; |
266 | } | 267 | } |
267 | 268 | ||
269 | |||
270 | GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) { | ||
271 | return luaC_newobjdt(L, tt, sz, 0); | ||
272 | } | ||
273 | |||
268 | /* }====================================================== */ | 274 | /* }====================================================== */ |
269 | 275 | ||
270 | 276 | ||