| 460 | |
| 461 | |
| 462 | static void checkrefs (global_State *g, GCObject *o) { |
| 463 | switch (o->tt) { |
| 464 | case LUA_VUSERDATA: { |
| 465 | checkudata(g, gco2u(o)); |
| 466 | break; |
| 467 | } |
| 468 | case LUA_VUPVAL: { |
| 469 | checkvalref(g, o, gco2upv(o)->v.p); |
| 470 | break; |
| 471 | } |
| 472 | case LUA_VTABLE: { |
| 473 | checktable(g, gco2t(o)); |
| 474 | break; |
| 475 | } |
| 476 | case LUA_VTHREAD: { |
| 477 | checkstack(g, gco2th(o)); |
| 478 | break; |
| 479 | } |
| 480 | case LUA_VLCL: { |
| 481 | checkLclosure(g, gco2lcl(o)); |
| 482 | break; |
| 483 | } |
| 484 | case LUA_VCCL: { |
| 485 | checkCclosure(g, gco2ccl(o)); |
| 486 | break; |
| 487 | } |
| 488 | case LUA_VPROTO: { |
| 489 | checkproto(g, gco2p(o)); |
| 490 | break; |
| 491 | } |
| 492 | case LUA_VSHRSTR: |
| 493 | case LUA_VLNGSTR: { |
| 494 | assert(!isgray(o)); /* strings are never gray */ |
| 495 | break; |
| 496 | } |
| 497 | default: assert(0); |
| 498 | } |
| 499 | } |
| 500 | |
| 501 | |
| 502 | /* |
no test coverage detected