From 9aec500a2691d2b13c307d143868c8a4fab33220 Mon Sep 17 00:00:00 2001
From: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 17 Jul 2014 14:27:49 -0300
Subject: no need for field 'gch' anymore

---
 lgc.c     | 64 +++++++++++++++++++++++++++++++--------------------------------
 lgc.h     | 16 ++++++++--------
 lobject.h | 10 ++++------
 lstate.h  | 26 +++++++++-----------------
 ltests.c  | 36 +++++++++++++++++------------------
 5 files changed, 71 insertions(+), 81 deletions(-)

diff --git a/lgc.c b/lgc.c
index 495eb4ac..24278dab 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.c,v 2.183 2014/05/25 19:08:32 roberto Exp roberto $
+** $Id: lgc.c,v 2.184 2014/06/30 19:48:08 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -62,10 +62,10 @@
 */
 #define maskcolors	(~(bitmask(BLACKBIT) | WHITEBITS))
 #define makewhite(g,x)	\
- (gch(x)->marked = cast_byte((gch(x)->marked & maskcolors) | luaC_white(g)))
+ (x->marked = cast_byte((x->marked & maskcolors) | luaC_white(g)))
 
-#define white2gray(x)	resetbits(gch(x)->marked, WHITEBITS)
-#define black2gray(x)	resetbit(gch(x)->marked, BLACKBIT)
+#define white2gray(x)	resetbits(x->marked, WHITEBITS)
+#define black2gray(x)	resetbit(x->marked, BLACKBIT)
 
 
 #define valiswhite(x)   (iscollectable(x) && iswhite(gcvalue(x)))
@@ -141,7 +141,7 @@ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
   global_State *g = G(L);
   lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o));
   lua_assert(g->gcstate != GCSpause);
-  lua_assert(gch(o)->tt != LUA_TTABLE);  /* tables use a back barrier */
+  lua_assert(o->tt != LUA_TTABLE);  /* tables use a back barrier */
   if (keepinvariant(g))  /* must keep invariant? */
     reallymarkobject(g, v);  /* restore invariant */
   else {  /* sweep phase */
@@ -159,7 +159,7 @@ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
 */
 void luaC_barrierback_ (lua_State *L, GCObject *o) {
   global_State *g = G(L);
-  lua_assert(isblack(o) && !isdead(g, o) && gch(o)->tt == LUA_TTABLE);
+  lua_assert(isblack(o) && !isdead(g, o) && o->tt == LUA_TTABLE);
   black2gray(o);  /* make object gray (again) */
   gco2t(o)->gclist = g->grayagain;
   g->grayagain = o;
@@ -185,8 +185,8 @@ void luaC_fix (lua_State *L, GCObject *o) {
   global_State *g = G(L);
   lua_assert(g->allgc == o);  /* object must be 1st in 'allgc' list! */
   white2gray(o);  /* they will be gray forever */
-  g->allgc = o->gch.next;  /* remove object from 'allgc' list */
-  o->gch.next = g->fixedgc;  /* link it to 'fixedgc' list */
+  g->allgc = o->next;  /* remove object from 'allgc' list */
+  o->next = g->fixedgc;  /* link it to 'fixedgc' list */
   g->fixedgc = o;
 }
 
@@ -198,9 +198,9 @@ void luaC_fix (lua_State *L, GCObject *o) {
 GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) {
   global_State *g = G(L);
   GCObject *o = cast(GCObject *, luaM_newobject(L, novariant(tt), sz));
-  gch(o)->marked = luaC_white(g);
-  gch(o)->tt = tt;
-  gch(o)->next = g->allgc;
+  o->marked = luaC_white(g);
+  o->tt = tt;
+  o->next = g->allgc;
   g->allgc = o;
   return o;
 }
@@ -225,7 +225,7 @@ GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) {
 static void reallymarkobject (global_State *g, GCObject *o) {
  reentry:
   white2gray(o);
-  switch (gch(o)->tt) {
+  switch (o->tt) {
     case LUA_TSHRSTR:
     case LUA_TLNGSTR: {
       gray2black(o);
@@ -288,7 +288,7 @@ static void markmt (global_State *g) {
 */
 static void markbeingfnz (global_State *g) {
   GCObject *o;
-  for (o = g->tobefnz; o != NULL; o = gch(o)->next)
+  for (o = g->tobefnz; o != NULL; o = o->next)
     markobject(g, o);
 }
 
@@ -528,7 +528,7 @@ static void propagatemark (global_State *g) {
   GCObject *o = g->gray;
   lua_assert(isgray(o));
   gray2black(o);
-  switch (gch(o)->tt) {
+  switch (o->tt) {
     case LUA_TTABLE: {
       Table *h = gco2t(o);
       g->gray = h->gclist;  /* remove from 'gray' list */
@@ -685,7 +685,7 @@ static void freeLclosure (lua_State *L, LClosure *cl) {
 
 
 static void freeobj (lua_State *L, GCObject *o) {
-  switch (gch(o)->tt) {
+  switch (o->tt) {
     case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break;
     case LUA_TLCL: {
       freeLclosure(L, gco2lcl(o));
@@ -727,14 +727,14 @@ static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) {
   int white = luaC_white(g);  /* current white */
   while (*p != NULL && count-- > 0) {
     GCObject *curr = *p;
-    int marked = gch(curr)->marked;
+    int marked = curr->marked;
     if (isdeadm(ow, marked)) {  /* is 'curr' dead? */
-      *p = gch(curr)->next;  /* remove 'curr' from list */
+      *p = curr->next;  /* remove 'curr' from list */
       freeobj(L, curr);  /* erase 'curr' */
     }
     else {  /* update marks */
-      gch(curr)->marked = cast_byte((marked & maskcolors) | white);
-      p = &gch(curr)->next;  /* go to next element */
+      curr->marked = cast_byte((marked & maskcolors) | white);
+      p = &curr->next;  /* go to next element */
     }
   }
   return (*p == NULL) ? NULL : p;
@@ -781,10 +781,10 @@ static void checkSizes (lua_State *L, global_State *g) {
 static GCObject *udata2finalize (global_State *g) {
   GCObject *o = g->tobefnz;  /* get first element */
   lua_assert(tofinalize(o));
-  g->tobefnz = gch(o)->next;  /* remove it from 'tobefnz' list */
-  gch(o)->next = g->allgc;  /* return it to 'allgc' list */
+  g->tobefnz = o->next;  /* remove it from 'tobefnz' list */
+  o->next = g->allgc;  /* return it to 'allgc' list */
   g->allgc = o;
-  resetbit(gch(o)->marked, FINALIZEDBIT);  /* object is "normal" again */
+  resetbit(o->marked, FINALIZEDBIT);  /* object is "normal" again */
   if (issweepphase(g))
     makewhite(g, o);  /* "sweep" object */
   return o;
@@ -859,7 +859,7 @@ static void callallpendingfinalizers (lua_State *L, int propagateerrors) {
 */
 static GCObject **findlast (GCObject **p) {
   while (*p != NULL)
-    p = &gch(*p)->next;
+    p = &(*p)->next;
   return p;
 }
 
@@ -875,12 +875,12 @@ static void separatetobefnz (global_State *g, int all) {
   while ((curr = *p) != NULL) {  /* traverse all finalizable objects */
     lua_assert(tofinalize(curr));
     if (!(iswhite(curr) || all))  /* not being collected? */
-      p = &gch(curr)->next;  /* don't bother with it */
+      p = &curr->next;  /* don't bother with it */
     else {
-      *p = gch(curr)->next;  /* remove 'curr' from "fin" list */
-      gch(curr)->next = *lastnext;  /* link at the end of 'tobefnz' list */
+      *p = curr->next;  /* remove 'curr' from "fin" list */
+      curr->next = *lastnext;  /* link at the end of 'tobefnz' list */
       *lastnext = curr;
-      lastnext = &gch(curr)->next;
+      lastnext = &curr->next;
     }
   }
 }
@@ -899,15 +899,15 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) {
     GCObject **p;
     if (issweepphase(g)) {
       makewhite(g, o);  /* "sweep" object 'o' */
-      if (g->sweepgc == &o->gch.next)  /* should not remove 'sweepgc' object */
+      if (g->sweepgc == &o->next)  /* should not remove 'sweepgc' object */
         g->sweepgc = sweeptolive(L, g->sweepgc, NULL);  /* change 'sweepgc' */
     }
     /* search for pointer pointing to 'o' */
-    for (p = &g->allgc; *p != o; p = &gch(*p)->next) { /* empty */ }
-    *p = o->gch.next;  /* remove 'o' from 'allgc' list */
-    o->gch.next = g->finobj;  /* link it in "fin" list */
+    for (p = &g->allgc; *p != o; p = &(*p)->next) { /* empty */ }
+    *p = o->next;  /* remove 'o' from 'allgc' list */
+    o->next = g->finobj;  /* link it in "fin" list */
     g->finobj = o;
-    l_setbit(o->gch.marked, FINALIZEDBIT);  /* mark it as such */
+    l_setbit(o->marked, FINALIZEDBIT);  /* mark it as such */
   }
 }
 
diff --git a/lgc.h b/lgc.h
index c94b91ce..1d0403f3 100644
--- a/lgc.h
+++ b/lgc.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.h,v 2.81 2014/02/18 13:46:26 roberto Exp roberto $
+** $Id: lgc.h,v 2.82 2014/03/19 18:51:16 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -84,19 +84,19 @@
 #define WHITEBITS	bit2mask(WHITE0BIT, WHITE1BIT)
 
 
-#define iswhite(x)      testbits((x)->gch.marked, WHITEBITS)
-#define isblack(x)      testbit((x)->gch.marked, BLACKBIT)
+#define iswhite(x)      testbits((x)->marked, WHITEBITS)
+#define isblack(x)      testbit((x)->marked, BLACKBIT)
 #define isgray(x)  /* neither white nor black */  \
-	(!testbits((x)->gch.marked, WHITEBITS | bitmask(BLACKBIT)))
+	(!testbits((x)->marked, WHITEBITS | bitmask(BLACKBIT)))
 
-#define tofinalize(x)	testbit((x)->gch.marked, FINALIZEDBIT)
+#define tofinalize(x)	testbit((x)->marked, FINALIZEDBIT)
 
 #define otherwhite(g)	((g)->currentwhite ^ WHITEBITS)
 #define isdeadm(ow,m)	(!(((m) ^ WHITEBITS) & (ow)))
-#define isdead(g,v)	isdeadm(otherwhite(g), (v)->gch.marked)
+#define isdead(g,v)	isdeadm(otherwhite(g), (v)->marked)
 
-#define changewhite(x)	((x)->gch.marked ^= WHITEBITS)
-#define gray2black(x)	l_setbit((x)->gch.marked, BLACKBIT)
+#define changewhite(x)	((x)->marked ^= WHITEBITS)
+#define gray2black(x)	l_setbit((x)->marked, BLACKBIT)
 
 #define luaC_white(g)	cast(lu_byte, (g)->currentwhite & WHITEBITS)
 
diff --git a/lobject.h b/lobject.h
index d55a347f..05008668 100644
--- a/lobject.h
+++ b/lobject.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.h,v 2.94 2014/06/19 18:39:36 roberto Exp roberto $
+** $Id: lobject.h,v 2.95 2014/07/17 17:09:50 roberto Exp roberto $
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
 */
@@ -85,9 +85,7 @@ typedef struct GCObject GCObject;
 ** Common type has only the common header
 */
 struct GCObject {
-  struct {
-    CommonHeader;
-  } gch;
+  CommonHeader;
 };
 
 
@@ -179,7 +177,7 @@ typedef struct lua_TValue TValue;
 
 
 /* Macros for internal tests */
-#define righttt(obj)		(ttype(obj) == gcvalue(obj)->gch.tt)
+#define righttt(obj)		(ttype(obj) == gcvalue(obj)->tt)
 
 #define checkliveness(g,obj) \
 	lua_longassert(!iscollectable(obj) || \
@@ -208,7 +206,7 @@ typedef struct lua_TValue TValue;
 
 #define setgcovalue(L,obj,x) \
   { TValue *io = (obj); GCObject *i_g=(x); \
-    val_(io).gc = i_g; settt_(io, ctb(gch(i_g)->tt)); }
+    val_(io).gc = i_g; settt_(io, ctb(i_g->tt)); }
 
 #define setsvalue(L,obj,x) \
   { TValue *io = (obj); TString *x_ = (x); \
diff --git a/lstate.h b/lstate.h
index e7feb099..dafaefea 100644
--- a/lstate.h
+++ b/lstate.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 2.108 2014/07/17 13:53:37 roberto Exp roberto $
+** $Id: lstate.h,v 2.109 2014/07/17 17:09:50 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -183,29 +183,21 @@ union GCUnion {
 };
 
 
-#define gch(o)		(&(o)->gch)
-
 #define cast_u(o)	cast(union GCUnion *, (o))
 
 /* macros to convert a GCObject into a specific value */
 #define rawgco2ts(o)  \
-	check_exp(novariant((o)->gch.tt) == LUA_TSTRING, &((cast_u(o))->ts))
+	check_exp(novariant((o)->tt) == LUA_TSTRING, &((cast_u(o))->ts))
 #define gco2ts(o)	(&rawgco2ts(o)->tsv)
-#define rawgco2u(o)  \
-	check_exp((o)->gch.tt == LUA_TUSERDATA, &((cast_u(o))->u))
+#define rawgco2u(o)  check_exp((o)->tt == LUA_TUSERDATA, &((cast_u(o))->u))
 #define gco2u(o)	(&rawgco2u(o)->uv)
-#define gco2lcl(o)  \
-	check_exp((o)->gch.tt == LUA_TLCL, &((cast_u(o))->cl.l))
-#define gco2ccl(o)  \
-	check_exp((o)->gch.tt == LUA_TCCL, &((cast_u(o))->cl.c))
+#define gco2lcl(o)  check_exp((o)->tt == LUA_TLCL, &((cast_u(o))->cl.l))
+#define gco2ccl(o)  check_exp((o)->tt == LUA_TCCL, &((cast_u(o))->cl.c))
 #define gco2cl(o)  \
-	check_exp(novariant((o)->gch.tt) == LUA_TFUNCTION, &((cast_u(o))->cl))
-#define gco2t(o)  \
-	check_exp((o)->gch.tt == LUA_TTABLE, &((cast_u(o))->h))
-#define gco2p(o)  \
-	check_exp((o)->gch.tt == LUA_TPROTO, &((cast_u(o))->p))
-#define gco2th(o)  \
-	check_exp((o)->gch.tt == LUA_TTHREAD, &((cast_u(o))->th))
+	check_exp(novariant((o)->tt) == LUA_TFUNCTION, &((cast_u(o))->cl))
+#define gco2t(o)  check_exp((o)->tt == LUA_TTABLE, &((cast_u(o))->h))
+#define gco2p(o)  check_exp((o)->tt == LUA_TPROTO, &((cast_u(o))->p))
+#define gco2th(o)  check_exp((o)->tt == LUA_TTHREAD, &((cast_u(o))->th))
 
 
 /* macro to convert any Lua object into a GCObject */
diff --git a/ltests.c b/ltests.c
index 803b3be2..f054b2f0 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.c,v 2.175 2014/07/16 14:51:36 roberto Exp roberto $
+** $Id: ltests.c,v 2.176 2014/07/17 13:53:37 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -190,8 +190,8 @@ static int testobjref1 (global_State *g, GCObject *f, GCObject *t) {
 
 static void printobj (global_State *g, GCObject *o) {
   printf("||%s(%p)-%c(%02X)||",
-           ttypename(novariant(gch(o)->tt)), (void *)o,
-           isdead(g,o)?'d':isblack(o)?'b':iswhite(o)?'w':'g', gch(o)->marked);
+           ttypename(novariant(o->tt)), (void *)o,
+           isdead(g,o)?'d':isblack(o)?'b':iswhite(o)?'w':'g', o->marked);
 }
 
 
@@ -316,7 +316,7 @@ static void checkobject (global_State *g, GCObject *o, int maybedead) {
     lua_assert(maybedead);
   else {
     lua_assert(g->gcstate != GCSpause || iswhite(o));
-    switch (gch(o)->tt) {
+    switch (o->tt) {
       case LUA_TUSERDATA: {
         TValue uservalue;
         Table *mt = gco2u(o)->metatable;
@@ -362,9 +362,9 @@ static void checkgraylist (global_State *g, GCObject *o) {
   ((void)g);  /* better to keep it available if we need to print an object */
   while (o) {
     lua_assert(isgray(o));
-    lua_assert(!testbit(o->gch.marked, TESTGRAYBIT));
-    l_setbit(o->gch.marked, TESTGRAYBIT);
-    switch (gch(o)->tt) {
+    lua_assert(!testbit(o->marked, TESTGRAYBIT));
+    l_setbit(o->marked, TESTGRAYBIT);
+    switch (o->tt) {
       case LUA_TTABLE: o = gco2t(o)->gclist; break;
       case LUA_TLCL: o = gco2lcl(o)->gclist; break;
       case LUA_TCCL: o = gco2ccl(o)->gclist; break;
@@ -391,12 +391,12 @@ static void markgrays (global_State *g) {
 
 
 static void checkgray (global_State *g, GCObject *o) {
-  for (; o != NULL; o = gch(o)->next) {
+  for (; o != NULL; o = o->next) {
     if (isgray(o)) {
-      lua_assert(!keepinvariant(g) || testbit(o->gch.marked, TESTGRAYBIT));
-      resetbit(o->gch.marked, TESTGRAYBIT);
+      lua_assert(!keepinvariant(g) || testbit(o->marked, TESTGRAYBIT));
+      resetbit(o->marked, TESTGRAYBIT);
     }
-    lua_assert(!testbit(o->gch.marked, TESTGRAYBIT));
+    lua_assert(!testbit(o->marked, TESTGRAYBIT));
   }
 }
 
@@ -415,29 +415,29 @@ int lua_checkmemory (lua_State *L) {
   lua_assert(g->sweepgc == NULL || issweepphase(g));
   markgrays(g);
   /* check 'fixedgc' list */
-  for (o = g->fixedgc; o != NULL; o = gch(o)->next) {
-    lua_assert(gch(o)->tt == LUA_TSHRSTR && isgray(o));
+  for (o = g->fixedgc; o != NULL; o = o->next) {
+    lua_assert(o->tt == LUA_TSHRSTR && isgray(o));
   }
   /* check 'allgc' list */
   checkgray(g, g->allgc);
   maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswpallgc);
-  for (o = g->allgc; o != NULL; o = gch(o)->next) {
+  for (o = g->allgc; o != NULL; o = o->next) {
     checkobject(g, o, maybedead);
     lua_assert(!tofinalize(o));
   }
   /* check 'finobj' list */
   checkgray(g, g->finobj);
-  for (o = g->finobj; o != NULL; o = gch(o)->next) {
+  for (o = g->finobj; o != NULL; o = o->next) {
     checkobject(g, o, 0);
     lua_assert(tofinalize(o));
-    lua_assert(gch(o)->tt == LUA_TUSERDATA || gch(o)->tt == LUA_TTABLE);
+    lua_assert(o->tt == LUA_TUSERDATA || o->tt == LUA_TTABLE);
   }
   /* check 'tobefnz' list */
   checkgray(g, g->tobefnz);
-  for (o = g->tobefnz; o != NULL; o = gch(o)->next) {
+  for (o = g->tobefnz; o != NULL; o = o->next) {
     checkobject(g, o, 0);
     lua_assert(tofinalize(o));
-    lua_assert(gch(o)->tt == LUA_TUSERDATA || gch(o)->tt == LUA_TTABLE);
+    lua_assert(o->tt == LUA_TUSERDATA || o->tt == LUA_TTABLE);
   }
   return 0;
 }
-- 
cgit v1.2.3-55-g6feb