LUA源码中涉及到的数据结构

来源:互联网 发布:淘宝哪个二手手机 编辑:程序博客网 时间:2024/06/07 14:58
typedef struct UpVal { {  GCObject *next;   unsigned char tt;   unsigned char marked; } TValue *v;   union  { TValue value;   struct   {     struct UpVal *prev;   struct UpVal *next;  }l; } u;} UpVal;typedef union Value { GCObject *gc;     void *p;          int b;            lua_CFunction f; }Value;typedef struct lua_TValue { TValuefields;}TValue;#define TValuefields Value value_; int tt_#define TValuefields union { struct { int tt__; Value v__; } i; double d__; } u //大typedef struct lua_TValue { Value Value; int tt_;}TValue;typedef struct lua_TValue {union {   struct    {    int tt__;    Value v__;    } i;   double d__;  } u;}TValue;typedef union TKey { struct  {  TValuefields;  struct Node *next;   } nk; TValue tvk;} TKey;typedef struct Node { TValue i_val; TKey i_key;} Node;ypedef struct Table { {  GCObject *next;   unsigned char tt;   unsigned char marked; } unsigned char flags;   unsigned char lsizenode;   struct Table *metatable; TValue *array;   Node *node; Node *lastfree;   GCObject *gclist; int sizearray;  } Table;typedef union Udata { struct  {  {   GCObject *next;    unsigned char tt;   unsigned char marked;  }  struct Table *metatable;  struct Table *env;  size_t len;   }uv;} Udata;typedef struct CClosure { {  GCObject *next;   unsigned char tt;   unsigned char marked;  unsigned char nupvalues;   GCObject *gclist; } lua_CFunction f; TValue upvalue[1];} CClosure;typedef struct LocVar { TString *varname; int startpc;   int endpc;    } LocVar;typedef struct Upvaldesc { TString *name;   unsigned char instack;   unsigned char idx;  } Upvaldesc;typedef struct Proto { {  GCObject *next;   unsigned char tt;  unsigned char marked; } TValue *k;   unsigned int *code; struct Proto **p;   int *lineinfo;   LocVar *locvars;   Upvaldesc *upvalues;   union Closure *cache;   TString  *source;   int sizeupvalues;   int sizek;   int sizecode; int sizelineinfo; int sizep;   int sizelocvars; int linedefined; int lastlinedefined; GCObject *gclist; unsigned char numparams;   unsigned char is_vararg; unsigned char maxstacksize;  } Proto;typedef struct LClosure { {  GCObject *next;   unsigned char tt;   unsigned char marked;  unsigned char nupvalues;   GCObject *gclist; } unsigned char nupvalues; struct Proto *p; UpVal *upvals[1];  } LClosure;typedef union Closure { struct CClosure c; struct LClosure l;} Closure;typedef struct UpVal { {  GCObject *next;   unsigned char tt;   unsigned char marked; } TValue *v;   union  { TValue value;   struct   {     struct UpVal *prev;   struct UpVal *next;  }l; } u;} UpVal;typedef union GCObject { typedef struct GCheader  {  GCObject *next;   unsigned char tt;   unsigned char marked; } gch;   union TString ts; union Udata u; union Closure cl; struct Table h; struct Proto p; struct UpVal uv; struct lua_State th;  }GCObject;typedef union TString { struct  {  GCObject *next;  unsigned char  tt;   unsigned char  marked;  unsigned char  extra;  unsigned int hash;  size_t len; } tsv;}TString;typedef struct CallInfo { TValue * func;   TValue * top;   struct CallInfo *previous;  struct CallInfo *next;  short nresults;   unsigned char callstatus; int extra; union  {  struct   {     TValue * base;     const unsigned int *savedpc;  } l;  struct   {     int ctx;     lua_CFunction k;     int old_errfunc;   unsigned char old_allowhook;   unsigned char status;  } c; } u;} CallInfo;typedef struct stringtable { GCObject **hash; unsigned int nuse;   int size;} stringtable;typedef struct Mbuffer { char *buffer; size_t n; size_t buffsize;} Mbuffer;struct lua_longjmp { struct lua_longjmp *previous; int b; volatile int status;  };typedef struct lua_State { GCObject *next;  unsigned char tt;  unsigned char marked; unsigned char status; TValue * top;   global_State *l_G; CallInfo *ci;   const unsigned int *oldpc;   TValue * stack_last;   TValue * stack;   int stacksize; unsigned short nny;   unsigned short nCcalls;   unsigned char hookmask; unsigned char allowhook; int basehookcount; int hookcount; lua_Hook hook; GCObject *openupval;   GCObject *gclist; struct lua_longjmp *errorJmp;   int errfunc;   struct CallInfo base_ci;  }lua_State;typedef struct global_State { lua_Alloc frealloc;   void      *ud;          size_t totalbytes;   int GCdebt;   size_t GCmemtrav;   size_t GCestimate;   struct stringtable strt;   TValue l_registry; unsigned int seed;   unsigned char currentwhite; unsigned char gcstate;   unsigned char gckind;   unsigned char gcrunning;   int sweepstrgc;   GCObject *allgc;   GCObject *finobj;   GCObject **sweepgc;   GCObject **sweepfin;   GCObject *gray;   GCObject *grayagain;   GCObject *weak;   GCObject *ephemeron;   GCObject *allweak;   GCObject *tobefnz;   struct UpVal uvhead;   struct Mbuffer buff;   int gcpause;   int gcmajorinc;   int gcstepmul;   lua_CFunction panic;   struct lua_State *mainthread; const double *version;   TString *memerrmsg;      TString *tmname[17];   struct Table *mt[9];  }global_State;
PS:此图画的真的很辛苦希望转载请说明出处.上传的时候故意没有加水印哦害羞