diff options
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -1186,27 +1186,37 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { | |||
1186 | break; | 1186 | break; |
1187 | } | 1187 | } |
1188 | case LUA_GCGEN: { | 1188 | case LUA_GCGEN: { |
1189 | #if defined(LUA_COMPAT_GCPARAMS) | ||
1189 | int minormul = va_arg(argp, int); | 1190 | int minormul = va_arg(argp, int); |
1190 | int minormajor = va_arg(argp, int); | 1191 | int minormajor = va_arg(argp, int); |
1191 | int majorminor = va_arg(argp, int); | 1192 | if (minormul > 0) setgcparam(g, MINORMUL, minormul); |
1193 | if (minormajor > 0) setgcparam(g, MINORMAJOR, minormajor); | ||
1194 | #endif | ||
1192 | res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN; | 1195 | res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN; |
1193 | setgcparam(g, gcpgenminormul, minormul); | ||
1194 | setgcparam(g, gcpminormajor, minormajor); | ||
1195 | setgcparam(g, gcpmajorminor, majorminor); | ||
1196 | luaC_changemode(L, KGC_GENMINOR); | 1196 | luaC_changemode(L, KGC_GENMINOR); |
1197 | break; | 1197 | break; |
1198 | } | 1198 | } |
1199 | case LUA_GCINC: { | 1199 | case LUA_GCINC: { |
1200 | #if defined(LUA_COMPAT_GCPARAMS) | ||
1200 | int pause = va_arg(argp, int); | 1201 | int pause = va_arg(argp, int); |
1201 | int stepmul = va_arg(argp, int); | 1202 | int stepmul = va_arg(argp, int); |
1202 | int stepsize = va_arg(argp, int); | 1203 | int stepsize = va_arg(argp, int); |
1204 | if (pause > 0) setgcparam(g, PAUSE, pause); | ||
1205 | if (stepmul > 0) setgcparam(g, STEPMUL, stepmul); | ||
1206 | if (stepsize > 0) setgcparam(g, STEPSIZE, 1u << stepsize); | ||
1207 | #endif | ||
1203 | res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN; | 1208 | res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN; |
1204 | setgcparam(g, gcppause, pause); | ||
1205 | setgcparam(g, gcpstepmul, stepmul); | ||
1206 | setgcparam(g, gcpstepsize, stepsize); | ||
1207 | luaC_changemode(L, KGC_INC); | 1209 | luaC_changemode(L, KGC_INC); |
1208 | break; | 1210 | break; |
1209 | } | 1211 | } |
1212 | case LUA_GCSETPARAM: { | ||
1213 | int param = va_arg(argp, int); | ||
1214 | int value = va_arg(argp, int); | ||
1215 | api_check(L, 0 <= param && param < LUA_GCPN, "invalid parameter"); | ||
1216 | res = luaO_applyparam(g->gcparams[param], 100); | ||
1217 | g->gcparams[param] = luaO_codeparam(value); | ||
1218 | break; | ||
1219 | } | ||
1210 | default: res = -1; /* invalid option */ | 1220 | default: res = -1; /* invalid option */ |
1211 | } | 1221 | } |
1212 | va_end(argp); | 1222 | va_end(argp); |