aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/lapi.c b/lapi.c
index 3ea3d0aa..aa2ee735 100644
--- a/lapi.c
+++ b/lapi.c
@@ -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);