浏览代码

Removed compatibility option LUA_COMPAT_GCPARAMS

The meaning of different GC parameters changed, so there is point in
supporting old values for them. The new code simply ignores the
parameters when changing the GC mode, so the incompatibility is small.
Roberto Ierusalimschy 1 年之前
父节点
当前提交
e81f586001
共有 6 个文件被更改,包括 20 次插入53 次删除
  1. 0 14
      lapi.c
  2. 3 20
      lbaselib.c
  3. 0 2
      ltests.h
  4. 1 1
      lua.c
  5. 1 1
      testes/gc.lua
  6. 15 15
      testes/gengc.lua

+ 0 - 14
lapi.c

@@ -1186,25 +1186,11 @@ LUA_API int lua_gc (lua_State *L, int what, ...) {
       break;
       break;
     }
     }
     case LUA_GCGEN: {
     case LUA_GCGEN: {
-#if defined(LUA_COMPAT_GCPARAMS)
-      int minormul = va_arg(argp, int);
-      int minormajor = va_arg(argp, int);
-      if (minormul > 0) setgcparam(g, MINORMUL, minormul);
-      if (minormajor > 0) setgcparam(g, MINORMAJOR, minormajor);
-#endif
       res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
       res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
       luaC_changemode(L, KGC_GENMINOR);
       luaC_changemode(L, KGC_GENMINOR);
       break;
       break;
     }
     }
     case LUA_GCINC: {
     case LUA_GCINC: {
-#if defined(LUA_COMPAT_GCPARAMS)
-      int pause = va_arg(argp, int);
-      int stepmul = va_arg(argp, int);
-      int stepsize = va_arg(argp, int);
-      if (pause > 0) setgcparam(g, PAUSE, pause);
-      if (stepmul > 0) setgcparam(g, STEPMUL, stepmul);
-      if (stepsize > 0) setgcparam(g, STEPSIZE, 1u << stepsize);
-#endif
       res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
       res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
       luaC_changemode(L, KGC_INC);
       luaC_changemode(L, KGC_INC);
       break;
       break;

+ 3 - 20
lbaselib.c

@@ -213,8 +213,7 @@ static int luaB_collectgarbage (lua_State *L) {
       return 1;
       return 1;
     }
     }
     case LUA_GCSTEP: {
     case LUA_GCSTEP: {
-      int step = (int)luaL_optinteger(L, 2, 0);
-      int res = lua_gc(L, o, step);
+      int res = lua_gc(L, o);
       checkvalres(res);
       checkvalres(res);
       lua_pushboolean(L, res);
       lua_pushboolean(L, res);
       return 1;
       return 1;
@@ -226,26 +225,10 @@ static int luaB_collectgarbage (lua_State *L) {
       return 1;
       return 1;
     }
     }
     case LUA_GCGEN: {
     case LUA_GCGEN: {
-#if defined(LUA_COMPAT_GCPARAMS)
-      int minormul = (int)luaL_optinteger(L, 2, -1);
-      int majorminor = (int)luaL_optinteger(L, 3, -1);
-#else
-      int minormul = 0;
-      int majorminor = 0;
-#endif
-      return pushmode(L, lua_gc(L, o, minormul, majorminor));
+      return pushmode(L, lua_gc(L, o));
     }
     }
     case LUA_GCINC: {
     case LUA_GCINC: {
-#if defined(LUA_COMPAT_GCPARAMS)
-      int pause = (int)luaL_optinteger(L, 2, -1);
-      int stepmul = (int)luaL_optinteger(L, 3, -1);
-      int stepsize = (int)luaL_optinteger(L, 4, -1);
-#else
-      int pause = 0;
-      int stepmul = 0;
-      int stepsize = 0;
-#endif
-      return pushmode(L, lua_gc(L, o, pause, stepmul, stepsize));
+      return pushmode(L, lua_gc(L, o));
     }
     }
     case LUA_GCSETPARAM: {
     case LUA_GCSETPARAM: {
       static const char *const params[] = {
       static const char *const params[] = {

+ 0 - 2
ltests.h

@@ -15,8 +15,6 @@
 #define LUA_COMPAT_MATHLIB
 #define LUA_COMPAT_MATHLIB
 #define LUA_COMPAT_LT_LE
 #define LUA_COMPAT_LT_LE
 
 
-#define LUA_COMPAT_GCPARAMS
-
 
 
 #define LUA_DEBUG
 #define LUA_DEBUG
 
 

+ 1 - 1
lua.c

@@ -646,7 +646,7 @@ static int pmain (lua_State *L) {
   luai_openlibs(L);  /* open standard libraries */
   luai_openlibs(L);  /* open standard libraries */
   createargtable(L, argv, argc, script);  /* create table 'arg' */
   createargtable(L, argv, argc, script);  /* create table 'arg' */
   lua_gc(L, LUA_GCRESTART);  /* start GC... */
   lua_gc(L, LUA_GCRESTART);  /* start GC... */
-  lua_gc(L, LUA_GCGEN, 0, 0);  /* ...in generational mode */
+  lua_gc(L, LUA_GCGEN);  /* ...in generational mode */
   if (!(args & has_E)) {  /* no option '-E'? */
   if (!(args & has_E)) {  /* no option '-E'? */
     if (handle_luainit(L) != LUA_OK)  /* run LUA_INIT */
     if (handle_luainit(L) != LUA_OK)  /* run LUA_INIT */
       return 0;  /* error running LUA_INIT */
       return 0;  /* error running LUA_INIT */

+ 1 - 1
testes/gc.lua

@@ -504,7 +504,7 @@ end
 do
 do
   collectgarbage()
   collectgarbage()
   collectgarbage"stop"
   collectgarbage"stop"
-  collectgarbage("step", 0)   -- steps should not unblock the collector
+  collectgarbage("step")   -- steps should not unblock the collector
   local x = gcinfo()
   local x = gcinfo()
   repeat
   repeat
     for i=1,1000 do _ENV.a = {} end   -- no collection during the loop
     for i=1,1000 do _ENV.a = {} end   -- no collection during the loop

+ 15 - 15
testes/gengc.lua

@@ -24,12 +24,12 @@ do
   assert(not T or (T.gcage(U) == "touched1" and T.gcage(U[1]) == "new"))
   assert(not T or (T.gcage(U) == "touched1" and T.gcage(U[1]) == "new"))
 
 
   -- both U and the table survive one more collection
   -- both U and the table survive one more collection
-  collectgarbage("step", 0)
+  collectgarbage("step")
   assert(not T or (T.gcage(U) == "touched2" and T.gcage(U[1]) == "survival"))
   assert(not T or (T.gcage(U) == "touched2" and T.gcage(U[1]) == "survival"))
 
 
   -- both U and the table survive yet another collection
   -- both U and the table survive yet another collection
   -- now everything is old
   -- now everything is old
-  collectgarbage("step", 0)
+  collectgarbage("step")
   assert(not T or (T.gcage(U) == "old" and T.gcage(U[1]) == "old1"))
   assert(not T or (T.gcage(U) == "old" and T.gcage(U[1]) == "old1"))
 
 
   -- data was not corrupted
   -- data was not corrupted
@@ -46,10 +46,10 @@ do
   assert(not T or T.gcage(old) == "old")
   assert(not T or T.gcage(old) == "old")
   setmetatable(old, {})    -- new table becomes OLD0 (barrier)
   setmetatable(old, {})    -- new table becomes OLD0 (barrier)
   assert(not T or T.gcage(getmetatable(old)) == "old0")
   assert(not T or T.gcage(getmetatable(old)) == "old0")
-  collectgarbage("step", 0)   -- new table becomes OLD1 and firstold1
+  collectgarbage("step")   -- new table becomes OLD1 and firstold1
   assert(not T or T.gcage(getmetatable(old)) == "old1")
   assert(not T or T.gcage(getmetatable(old)) == "old1")
   setmetatable(getmetatable(old), {__gc = foo})  -- get it out of allgc list
   setmetatable(getmetatable(old), {__gc = foo})  -- get it out of allgc list
-  collectgarbage("step", 0)   -- should not seg. fault
+  collectgarbage("step")   -- should not seg. fault
 end
 end
 
 
 
 
@@ -65,18 +65,18 @@ do   -- bug in 5.4.0
     A[1] = obj     -- anchor object
     A[1] = obj     -- anchor object
     assert(not T or T.gcage(obj) == "old1")
     assert(not T or T.gcage(obj) == "old1")
     obj = nil      -- remove it from the stack
     obj = nil      -- remove it from the stack
-    collectgarbage("step", 0)   -- do a young collection
+    collectgarbage("step")   -- do a young collection
     print(getmetatable(A[1]).x)   -- metatable was collected
     print(getmetatable(A[1]).x)   -- metatable was collected
   end
   end
 
 
   collectgarbage()   -- make A old
   collectgarbage()   -- make A old
   local obj = {}     -- create a new object
   local obj = {}     -- create a new object
-  collectgarbage("step", 0)   -- make it a survival
+  collectgarbage("step")   -- make it a survival
   assert(not T or T.gcage(obj) == "survival")
   assert(not T or T.gcage(obj) == "survival")
   setmetatable(obj, {__gc = gcf, x = "+"})   -- create its metatable
   setmetatable(obj, {__gc = gcf, x = "+"})   -- create its metatable
   assert(not T or T.gcage(getmetatable(obj)) == "new")
   assert(not T or T.gcage(getmetatable(obj)) == "new")
   obj = nil   -- clear object
   obj = nil   -- clear object
-  collectgarbage("step", 0)   -- will call obj's finalizer
+  collectgarbage("step")   -- will call obj's finalizer
 end
 end
 
 
 
 
@@ -94,13 +94,13 @@ do   -- another bug in 5.4.0
     end
     end
   )
   )
   local _, f = coroutine.resume(co)   -- create closure over 'x' in coroutine
   local _, f = coroutine.resume(co)   -- create closure over 'x' in coroutine
-  collectgarbage("step", 0)   -- make upvalue a survival
+  collectgarbage("step")   -- make upvalue a survival
   old[1] = {"hello"}    -- 'old' go to grayagain as 'touched1'
   old[1] = {"hello"}    -- 'old' go to grayagain as 'touched1'
   coroutine.resume(co, {123})     -- its value will be new
   coroutine.resume(co, {123})     -- its value will be new
   co = nil
   co = nil
-  collectgarbage("step", 0)   -- hit the barrier
+  collectgarbage("step")   -- hit the barrier
   assert(f() == 123 and old[1][1] == "hello")
   assert(f() == 123 and old[1][1] == "hello")
-  collectgarbage("step", 0)   -- run the collector once more
+  collectgarbage("step")   -- run the collector once more
   -- make sure old[1] was not collected
   -- make sure old[1] was not collected
   assert(f() == 123 and old[1][1] == "hello")
   assert(f() == 123 and old[1][1] == "hello")
 end
 end
@@ -112,12 +112,12 @@ do   -- bug introduced in commit 9cf3299fa
   assert(not T or T.gcage(t) == "old")
   assert(not T or T.gcage(t) == "old")
   t[1] = {10}
   t[1] = {10}
   assert(not T or (T.gcage(t) == "touched1" and T.gccolor(t) == "gray"))
   assert(not T or (T.gcage(t) == "touched1" and T.gccolor(t) == "gray"))
-  collectgarbage("step", 0)   -- minor collection
+  collectgarbage("step")   -- minor collection
   assert(not T or (T.gcage(t) == "touched2" and T.gccolor(t) == "black"))
   assert(not T or (T.gcage(t) == "touched2" and T.gccolor(t) == "black"))
-  collectgarbage("step", 0)   -- minor collection
+  collectgarbage("step")   -- minor collection
   assert(not T or T.gcage(t) == "old")   -- t should be black, but it was gray
   assert(not T or T.gcage(t) == "old")   -- t should be black, but it was gray
   t[1] = {10}      -- no barrier here, so t was still old
   t[1] = {10}      -- no barrier here, so t was still old
-  collectgarbage("step", 0)   -- minor collection
+  collectgarbage("step")   -- minor collection
   -- t, being old, is ignored by the collection, so it is not cleared
   -- t, being old, is ignored by the collection, so it is not cleared
   assert(t[1] == nil)   -- fails with the bug
   assert(t[1] == nil)   -- fails with the bug
 end
 end
@@ -144,13 +144,13 @@ do
          T.gcage(debug.getuservalue(U)) == "new")
          T.gcage(debug.getuservalue(U)) == "new")
 
 
   -- both U and the table survive one more collection
   -- both U and the table survive one more collection
-  collectgarbage("step", 0)
+  collectgarbage("step")
   assert(T.gcage(U) == "touched2" and
   assert(T.gcage(U) == "touched2" and
          T.gcage(debug.getuservalue(U)) == "survival")
          T.gcage(debug.getuservalue(U)) == "survival")
 
 
   -- both U and the table survive yet another collection
   -- both U and the table survive yet another collection
   -- now everything is old
   -- now everything is old
-  collectgarbage("step", 0)
+  collectgarbage("step")
   assert(T.gcage(U) == "old" and
   assert(T.gcage(U) == "old" and
          T.gcage(debug.getuservalue(U)) == "old1")
          T.gcage(debug.getuservalue(U)) == "old1")