diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-11-01 17:17:21 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-11-01 17:17:21 -0300 |
| commit | 3d2bd1359d17228b62752f6edae86b6a1579c6d4 (patch) | |
| tree | e8dd50ab1eaead1ed5920b6f0cdfe619bb458241 | |
| parent | 8047b2d03eaaeee44871a11f8d3a3135f2639b1a (diff) | |
| parent | 9ede317c70ad82279f2e3962eb52904a17bf4b55 (diff) | |
| download | lua-3d2bd1359d17228b62752f6edae86b6a1579c6d4.tar.gz lua-3d2bd1359d17228b62752f6edae86b6a1579c6d4.tar.bz2 lua-3d2bd1359d17228b62752f6edae86b6a1579c6d4.zip | |
Merge branch 'master' into nextversion
| -rw-r--r-- | lgc.c | 14 | ||||
| -rw-r--r-- | lgc.h | 2 | ||||
| -rw-r--r-- | lstate.c | 12 |
3 files changed, 16 insertions, 12 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 | ||
| @@ -190,6 +190,8 @@ LUAI_FUNC void luaC_step (lua_State *L); | |||
| 190 | LUAI_FUNC void luaC_runtilstate (lua_State *L, int statesmask); | 190 | LUAI_FUNC void luaC_runtilstate (lua_State *L, int statesmask); |
| 191 | LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); | 191 | LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); |
| 192 | LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz); | 192 | LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz); |
| 193 | LUAI_FUNC GCObject *luaC_newobjdt (lua_State *L, int tt, size_t sz, | ||
| 194 | size_t offset); | ||
| 193 | LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); | 195 | LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); |
| 194 | LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o); | 196 | LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o); |
| 195 | LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); | 197 | LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); |
| @@ -284,18 +284,14 @@ static void close_state (lua_State *L) { | |||
| 284 | 284 | ||
| 285 | 285 | ||
| 286 | LUA_API lua_State *lua_newthread (lua_State *L) { | 286 | LUA_API lua_State *lua_newthread (lua_State *L) { |
| 287 | global_State *g; | 287 | global_State *g = G(L); |
| 288 | GCObject *o; | ||
| 288 | lua_State *L1; | 289 | lua_State *L1; |
| 289 | lua_lock(L); | 290 | lua_lock(L); |
| 290 | g = G(L); | ||
| 291 | luaC_checkGC(L); | 291 | luaC_checkGC(L); |
| 292 | /* create new thread */ | 292 | /* create new thread */ |
| 293 | L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; | 293 | o = luaC_newobjdt(L, LUA_TTHREAD, sizeof(LX), offsetof(LX, l)); |
| 294 | L1->marked = luaC_white(g); | 294 | L1 = gco2th(o); |
| 295 | L1->tt = LUA_VTHREAD; | ||
| 296 | /* link it on list 'allgc' */ | ||
| 297 | L1->next = g->allgc; | ||
| 298 | g->allgc = obj2gco(L1); | ||
| 299 | /* anchor it on L stack */ | 295 | /* anchor it on L stack */ |
| 300 | setthvalue2s(L, L->top.p, L1); | 296 | setthvalue2s(L, L->top.p, L1); |
| 301 | api_incr_top(L); | 297 | api_incr_top(L); |
