CHDK_DE Vorschauversion  Trunk Rev. 5294
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
lgc.h-Dateireferenz
#include "lobject.h"
+ Include-Abhängigkeitsdiagramm für lgc.h:
+ Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define GCSpause   0
 
#define GCSpropagate   1
 
#define GCSsweepstring   2
 
#define GCSsweep   3
 
#define GCSfinalize   4
 
#define resetbits(x, m)   ((x) &= cast(lu_byte, ~(m)))
 
#define setbits(x, m)   ((x) |= (m))
 
#define testbits(x, m)   ((x) & (m))
 
#define bitmask(b)   (1<<(b))
 
#define bit2mask(b1, b2)   (bitmask(b1) | bitmask(b2))
 
#define l_setbit(x, b)   setbits(x, bitmask(b))
 
#define resetbit(x, b)   resetbits(x, bitmask(b))
 
#define testbit(x, b)   testbits(x, bitmask(b))
 
#define set2bits(x, b1, b2)   setbits(x, (bit2mask(b1, b2)))
 
#define reset2bits(x, b1, b2)   resetbits(x, (bit2mask(b1, b2)))
 
#define test2bits(x, b1, b2)   testbits(x, (bit2mask(b1, b2)))
 
#define WHITE0BIT   0
 
#define WHITE1BIT   1
 
#define BLACKBIT   2
 
#define FINALIZEDBIT   3
 
#define KEYWEAKBIT   3
 
#define VALUEWEAKBIT   4
 
#define FIXEDBIT   5
 
#define SFIXEDBIT   6
 
#define WHITEBITS   bit2mask(WHITE0BIT, WHITE1BIT)
 
#define iswhite(x)   test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT)
 
#define isblack(x)   testbit((x)->gch.marked, BLACKBIT)
 
#define isgray(x)   (!isblack(x) && !iswhite(x))
 
#define otherwhite(g)   (g->currentwhite ^ WHITEBITS)
 
#define isdead(g, v)   ((v)->gch.marked & otherwhite(g) & WHITEBITS)
 
#define changewhite(x)   ((x)->gch.marked ^= WHITEBITS)
 
#define gray2black(x)   l_setbit((x)->gch.marked, BLACKBIT)
 
#define valiswhite(x)   (iscollectable(x) && iswhite(gcvalue(x)))
 
#define luaC_white(g)   cast(lu_byte, (g)->currentwhite & WHITEBITS)
 
#define luaC_checkGC(L)
 
#define luaC_barrier(L, p, v)
 
#define luaC_barriert(L, t, v)
 
#define luaC_objbarrier(L, p, o)
 
#define luaC_objbarriert(L, t, o)   { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); }
 

Funktionen

LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all)
 
LUAI_FUNC void luaC_callGCTM (lua_State *L)
 
LUAI_FUNC void luaC_freeall (lua_State *L)
 
LUAI_FUNC void luaC_step (lua_State *L)
 
LUAI_FUNC void luaC_fullgc (lua_State *L)
 
LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt)
 
LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv)
 
LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v)
 
LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t)
 

Makro-Dokumentation

#define bit2mask (   b1,
  b2 
)    (bitmask(b1) | bitmask(b2))

Definiert in Zeile 31 der Datei lgc.h.

#define bitmask (   b)    (1<<(b))

Definiert in Zeile 30 der Datei lgc.h.

#define BLACKBIT   2

Definiert in Zeile 56 der Datei lgc.h.

#define changewhite (   x)    ((x)->gch.marked ^= WHITEBITS)

Definiert in Zeile 72 der Datei lgc.h.

#define FINALIZEDBIT   3

Definiert in Zeile 57 der Datei lgc.h.

#define FIXEDBIT   5

Definiert in Zeile 60 der Datei lgc.h.

#define GCSfinalize   4

Definiert in Zeile 21 der Datei lgc.h.

#define GCSpause   0

Definiert in Zeile 17 der Datei lgc.h.

#define GCSpropagate   1

Definiert in Zeile 18 der Datei lgc.h.

#define GCSsweep   3

Definiert in Zeile 20 der Datei lgc.h.

#define GCSsweepstring   2

Definiert in Zeile 19 der Datei lgc.h.

#define gray2black (   x)    l_setbit((x)->gch.marked, BLACKBIT)

Definiert in Zeile 73 der Datei lgc.h.

#define isblack (   x)    testbit((x)->gch.marked, BLACKBIT)

Definiert in Zeile 66 der Datei lgc.h.

#define isdead (   g,
 
)    ((v)->gch.marked & otherwhite(g) & WHITEBITS)

Definiert in Zeile 70 der Datei lgc.h.

#define isgray (   x)    (!isblack(x) && !iswhite(x))

Definiert in Zeile 67 der Datei lgc.h.

#define iswhite (   x)    test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT)

Definiert in Zeile 65 der Datei lgc.h.

#define KEYWEAKBIT   3

Definiert in Zeile 58 der Datei lgc.h.

#define l_setbit (   x,
 
)    setbits(x, bitmask(b))

Definiert in Zeile 32 der Datei lgc.h.

#define luaC_barrier (   L,
  p,
 
)
Wert:
{ if (valiswhite(v) && isblack(obj2gco(p))) \
luaC_barrierf(L,obj2gco(p),gcvalue(v)); }

Definiert in Zeile 86 der Datei lgc.h.

#define luaC_barriert (   L,
  t,
 
)
Wert:
{ if (valiswhite(v) && isblack(obj2gco(t))) \
luaC_barrierback(L,t); }

Definiert in Zeile 89 der Datei lgc.h.

#define luaC_checkGC (   L)
Wert:
{ \
condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); \
if (G(L)->totalbytes >= G(L)->GCthreshold) \
luaC_step(L); }

Definiert in Zeile 80 der Datei lgc.h.

#define luaC_objbarrier (   L,
  p,
  o 
)
Wert:
{ if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \
luaC_barrierf(L,obj2gco(p),obj2gco(o)); }

Definiert in Zeile 92 der Datei lgc.h.

#define luaC_objbarriert (   L,
  t,
  o 
)    { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); }

Definiert in Zeile 96 der Datei lgc.h.

#define luaC_white (   g)    cast(lu_byte, (g)->currentwhite & WHITEBITS)

Definiert in Zeile 77 der Datei lgc.h.

#define otherwhite (   g)    (g->currentwhite ^ WHITEBITS)

Definiert in Zeile 69 der Datei lgc.h.

#define reset2bits (   x,
  b1,
  b2 
)    resetbits(x, (bit2mask(b1, b2)))

Definiert in Zeile 36 der Datei lgc.h.

#define resetbit (   x,
 
)    resetbits(x, bitmask(b))

Definiert in Zeile 33 der Datei lgc.h.

#define resetbits (   x,
  m 
)    ((x) &= cast(lu_byte, ~(m)))

Definiert in Zeile 27 der Datei lgc.h.

#define set2bits (   x,
  b1,
  b2 
)    setbits(x, (bit2mask(b1, b2)))

Definiert in Zeile 35 der Datei lgc.h.

#define setbits (   x,
  m 
)    ((x) |= (m))

Definiert in Zeile 28 der Datei lgc.h.

#define SFIXEDBIT   6

Definiert in Zeile 61 der Datei lgc.h.

#define test2bits (   x,
  b1,
  b2 
)    testbits(x, (bit2mask(b1, b2)))

Definiert in Zeile 37 der Datei lgc.h.

#define testbit (   x,
 
)    testbits(x, bitmask(b))

Definiert in Zeile 34 der Datei lgc.h.

#define testbits (   x,
  m 
)    ((x) & (m))

Definiert in Zeile 29 der Datei lgc.h.

#define valiswhite (   x)    (iscollectable(x) && iswhite(gcvalue(x)))

Definiert in Zeile 75 der Datei lgc.h.

#define VALUEWEAKBIT   4

Definiert in Zeile 59 der Datei lgc.h.

#define WHITE0BIT   0

Definiert in Zeile 54 der Datei lgc.h.

#define WHITE1BIT   1

Definiert in Zeile 55 der Datei lgc.h.

#define WHITEBITS   bit2mask(WHITE0BIT, WHITE1BIT)

Definiert in Zeile 62 der Datei lgc.h.

Dokumentation der Funktionen

LUAI_FUNC void luaC_barrierback ( lua_State L,
Table t 
)

Definiert in Zeile 674 der Datei lgc.c.

674  {
675  global_State *g = G(L);
676  GCObject *o = obj2gco(t);
677  lua_assert(isblack(o) && !isdead(g, o));
679  black2gray(o); /* make table gray (again) */
680  t->gclist = g->grayagain;
681  g->grayagain = o;
682 }
LUAI_FUNC void luaC_barrierf ( lua_State L,
GCObject o,
GCObject v 
)

Definiert in Zeile 661 der Datei lgc.c.

661  {
662  global_State *g = G(L);
663  lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o));
665  lua_assert(ttype(&o->gch) != LUA_TTABLE);
666  /* must keep invariant? */
667  if (g->gcstate == GCSpropagate)
668  reallymarkobject(g, v); /* restore invariant */
669  else /* don't mind */
670  makewhite(g, o); /* mark as white just to avoid other barriers */
671 }
LUAI_FUNC void luaC_callGCTM ( lua_State L)

Definiert in Zeile 477 der Datei lgc.c.

477  {
478  while (G(L)->tmudata)
479  GCTM(L);
480 }
LUAI_FUNC void luaC_freeall ( lua_State L)

Definiert in Zeile 483 der Datei lgc.c.

483  {
484  global_State *g = G(L);
485  int i;
486  g->currentwhite = WHITEBITS | bitmask(SFIXEDBIT); /* mask to collect all elements */
487  sweepwholelist(L, &g->rootgc);
488  for (i = 0; i < g->strt.size; i++) /* free all string lists */
489  sweepwholelist(L, &g->strt.hash[i]);
490 }
LUAI_FUNC void luaC_fullgc ( lua_State L)

Definiert in Zeile 635 der Datei lgc.c.

635  {
636  global_State *g = G(L);
637  if (g->gcstate <= GCSpropagate) {
638  /* reset sweep marks to sweep all elements (returning them to white) */
639  g->sweepstrgc = 0;
640  g->sweepgc = &g->rootgc;
641  /* reset other collector lists */
642  g->gray = NULL;
643  g->grayagain = NULL;
644  g->weak = NULL;
645  g->gcstate = GCSsweepstring;
646  }
648  /* finish any pending sweep phase */
649  while (g->gcstate != GCSfinalize) {
651  singlestep(L);
652  }
653  markroot(L);
654  while (g->gcstate != GCSpause) {
655  singlestep(L);
656  }
657  setthreshold(g);
658 }
LUAI_FUNC void luaC_link ( lua_State L,
GCObject o,
lu_byte  tt 
)

Definiert in Zeile 685 der Datei lgc.c.

685  {
686  global_State *g = G(L);
687  o->gch.next = g->rootgc;
688  g->rootgc = o;
689  o->gch.marked = luaC_white(g);
690  o->gch.tt = tt;
691 }
LUAI_FUNC void luaC_linkupval ( lua_State L,
UpVal uv 
)

Definiert in Zeile 694 der Datei lgc.c.

694  {
695  global_State *g = G(L);
696  GCObject *o = obj2gco(uv);
697  o->gch.next = g->rootgc; /* link upvalue into `rootgc' list */
698  g->rootgc = o;
699  if (isgray(o)) {
700  if (g->gcstate == GCSpropagate) {
701  gray2black(o); /* closed upvalues need barrier */
702  luaC_barrier(L, uv, uv->v);
703  }
704  else { /* sweep phase: sweep it (turning it into white) */
705  makewhite(g, o);
707  }
708  }
709 }
LUAI_FUNC size_t luaC_separateudata ( lua_State L,
int  all 
)

Definiert in Zeile 128 der Datei lgc.c.

128  {
129  global_State *g = G(L);
130  size_t deadmem = 0;
131  GCObject **p = &g->mainthread->next;
132  GCObject *curr;
133  while ((curr = *p) != NULL) {
134  if (!(iswhite(curr) || all) || isfinalized(gco2u(curr)))
135  p = &curr->gch.next; /* don't bother with them */
136  else if (fasttm(L, gco2u(curr)->metatable, TM_GC) == NULL) {
137  markfinalized(gco2u(curr)); /* don't need finalization */
138  p = &curr->gch.next;
139  }
140  else { /* must call its gc method */
141  deadmem += sizeudata(gco2u(curr));
142  markfinalized(gco2u(curr));
143  *p = curr->gch.next;
144  /* link `curr' at the end of `tmudata' list */
145  if (g->tmudata == NULL) /* list is empty? */
146  g->tmudata = curr->gch.next = curr; /* creates a circular list */
147  else {
148  curr->gch.next = g->tmudata->gch.next;
149  g->tmudata->gch.next = curr;
150  g->tmudata = curr;
151  }
152  }
153  }
154  return deadmem;
155 }
LUAI_FUNC void luaC_step ( lua_State L)

Definiert in Zeile 610 der Datei lgc.c.

610  {
611  global_State *g = G(L);
612  l_mem lim = (GCSTEPSIZE/100) * g->gcstepmul;
613  if (lim == 0)
614  lim = (MAX_LUMEM-1)/2; /* no limit */
615  g->gcdept += g->totalbytes - g->GCthreshold;
616  do {
617  lim -= singlestep(L);
618  if (g->gcstate == GCSpause)
619  break;
620  } while (lim > 0);
621  if (g->gcstate != GCSpause) {
622  if (g->gcdept < GCSTEPSIZE)
623  g->GCthreshold = g->totalbytes + GCSTEPSIZE; /* - lim/g->gcstepmul;*/
624  else {
625  g->gcdept -= GCSTEPSIZE;
626  g->GCthreshold = g->totalbytes;
627  }
628  }
629  else {
630  setthreshold(g);
631  }
632 }