MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / lua_gc

Function lua_gc

third-party/lua-5.2.4/src/lapi.c:1021–1096  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1019*/
1020
1021LUA_API int lua_gc (lua_State *L, int what, int data) {
1022 int res = 0;
1023 global_State *g;
1024 lua_lock(L);
1025 g = G(L);
1026 switch (what) {
1027 case LUA_GCSTOP: {
1028 g->gcrunning = 0;
1029 break;
1030 }
1031 case LUA_GCRESTART: {
1032 luaE_setdebt(g, 0);
1033 g->gcrunning = 1;
1034 break;
1035 }
1036 case LUA_GCCOLLECT: {
1037 luaC_fullgc(L, 0);
1038 break;
1039 }
1040 case LUA_GCCOUNT: {
1041 /* GC values are expressed in Kbytes: #bytes/2^10 */
1042 res = cast_int(gettotalbytes(g) >> 10);
1043 break;
1044 }
1045 case LUA_GCCOUNTB: {
1046 res = cast_int(gettotalbytes(g) & 0x3ff);
1047 break;
1048 }
1049 case LUA_GCSTEP: {
1050 if (g->gckind == KGC_GEN) { /* generational mode? */
1051 res = (g->GCestimate == 0); /* true if it will do major collection */
1052 luaC_forcestep(L); /* do a single step */
1053 }
1054 else {
1055 lu_mem debt = cast(lu_mem, data) * 1024 - GCSTEPSIZE;
1056 if (g->gcrunning)
1057 debt += g->GCdebt; /* include current debt */
1058 luaE_setdebt(g, debt);
1059 luaC_forcestep(L);
1060 if (g->gcstate == GCSpause) /* end of cycle? */
1061 res = 1; /* signal it */
1062 }
1063 break;
1064 }
1065 case LUA_GCSETPAUSE: {
1066 res = g->gcpause;
1067 g->gcpause = data;
1068 break;
1069 }
1070 case LUA_GCSETMAJORINC: {
1071 res = g->gcmajorinc;
1072 g->gcmajorinc = data;
1073 break;
1074 }
1075 case LUA_GCSETSTEPMUL: {
1076 res = g->gcstepmul;
1077 g->gcstepmul = data;
1078 break;

Callers 3

reportFunction · 0.70
pmainFunction · 0.70
luaB_collectgarbageFunction · 0.70

Calls 4

luaC_forcestepFunction · 0.85
luaE_setdebtFunction · 0.70
luaC_fullgcFunction · 0.70
luaC_changemodeFunction · 0.70

Tested by

no test coverage detected