lua5.3数据结构
来源:互联网 发布:学校校园铃声软件 编辑:程序博客网 时间:2024/06/05 17:15
由于lua版本迭代之间,数据结构和函数都会部分变化
以下是我分析的lua.h中的信息,以便确定版本
#define LUA_VERSION_MAJOR "5"#define LUA_VERSION_MINOR "3"#define LUA_VERSION_NUM 503#define LUA_VERSION_RELEASE "3"
//看注释提示仅仅是为了类型转换,不知搞为啥要这样~,他们都有一个共同,首地址都是//深入的话还是多看看lua官网,论坛,了解下设计思想#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked/*** Union of all collectable objects (only for conversions)*/union GCUnion { GCObject gc; /* common header */ struct TString ts; struct Udata u; union Closure cl; struct Table h; struct Proto p; struct lua_State th; /* thread */};
主要位于lobject.h中,部分位于lstate.h
以下和机器有关,比如在32位(64)机器
#define LUA_INT32 int#define LUAI_UMEM size_t#define LUAI_MEM ptrdiff_t
以下通用定义
#define LUA_NUMBER_DOUBLE#define LUA_NUMBER doubletypedef unsigned char lu_byte;typedef TValue *StkId; /* index to stack elements */typedef struct lua_TValue TValue;typedef int (*lua_CFunction) (lua_State *L);typedef unsigned LUA_INT32 lu_int32;typedef LUAI_UMEM lu_mem;typedef LUAI_MEM l_mem;typedef lu_int32 Instruction;
保存lua数据的结构lua_TValue
lua_TValue 位于lobject.h
//保存值和类型#define TValuefields Value value_; int tt_struct lua_TValue { TValuefields;};
/*** Union of all Lua values*/typedef union Value { GCObject *gc; /* collectable objects */ void *p; /* light userdata */ int b; /* booleans */ lua_CFunction f; /* light C functions 函数指针*/ lua_Integer i; /* integer numbers */ lua_Number n; /* float numbers 默认为double*/} Value;
#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
struct GCObject { CommonHeader;};
/*** Header for userdata; memory area follows the end of this structure** (aligned according to 'UUdata'; see next).*/typedef struct Udata { CommonHeader; lu_byte ttuv_; /* user value's tag */ struct Table *metatable; size_t len; /* number of bytes */ union Value user_; /* user value */} Udata;/*** Ensures that address after this type is always fully aligned.*/typedef union UUdata { L_Umaxalign dummy; /* ensures maximum alignment for 'local' udata */ Udata uv;} UUdata;
string
/*** Header for string value; string bytes follow the end of this structure** (aligned according to 'UTString'; see next).*/typedef struct TString { CommonHeader; lu_byte extra; /* reserved words for short strings; "has hash" for longs */ lu_byte shrlen; /* length for short strings */ unsigned int hash; union { size_t lnglen; /* length for long strings */ struct TString *hnext; /* linked list for hash table */ } u;} TString;/*** Ensures that address after this type is always fully aligned.*/typedef union UTString { L_Umaxalign dummy; /* ensures maximum alignment for strings */ TString tsv;} UTString;
//闭包相关#define ClosureHeader CommonHeader; lu_byte nupvalues; GCObject *gclisttypedef struct CClosure { ClosureHeader; lua_CFunction f; TValue upvalue[1]; /* list of upvalues */} CClosure;typedef struct LClosure { ClosureHeader; struct Proto *p; UpVal *upvals[1]; /* list of upvalues */} LClosure;typedef union Closure { CClosure c; LClosure l;} Closure;
//表相关typedef union TKey { struct { TValuefields; struct Node *next; /* for chaining */ } nk; TValue tvk;} TKey;typedef struct Node { TValue i_val; TKey i_key;} Node;typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byte lsizenode; /* log2 of size of `node' array */ int sizearray; /* size of `array' array */ TValue *array; /* array part */ Node *node; Node *lastfree; /* any free position is before this position */ struct Table *metatable; GCObject *gclist;} Table;
/*** Description of an upvalue for function prototypes*/typedef struct Upvaldesc { TString *name; /* upvalue name (for debug information) */ lu_byte instack; /* whether it is in stack */ lu_byte idx; /* index of upvalue (in stack or in outer function's list) */} Upvaldesc;/*** Description of a local variable for function prototypes** (used for debug information)*/typedef struct LocVar { TString *varname; int startpc; /* first point where variable is active */ int endpc; /* first point where variable is dead */} LocVar;/*** Function Prototypes*/typedef struct Proto { CommonHeader; TValue *k; /* constants used by the function */ Instruction *code; struct Proto **p; /* functions defined inside the function */ int *lineinfo; /* map from opcodes to source lines (debug information) */ LocVar *locvars; /* information about local variables (debug information) */ Upvaldesc *upvalues; /* upvalue information */ union Closure *cache; /* last created closure with this prototype */ TString *source; /* used for debug information */ int sizeupvalues; /* size of 'upvalues' */ int sizek; /* size of `k' */ int sizecode; int sizelineinfo; int sizep; /* size of `p' */ int sizelocvars; int linedefined; int lastlinedefined; GCObject *gclist; lu_byte numparams; /* number of fixed parameters */ lu_byte is_vararg; lu_byte maxstacksize; /* maximum stack used by this function */} Proto;
//上值typedef struct UpVal { CommonHeader; TValue *v; /* points to stack or to its own value */ union { TValue value; /* the value (when closed) */ struct { /* double linked list (when open) */ struct UpVal *prev; struct UpVal *next; } l; } u;} UpVal;
“`
0 0
- lua5.3数据结构
- Lua5.3 released 变化
- lua5.3模块学习
- Lua5.3 数学函数
- lua5.3异常机制
- Lua5.3云风译
- Lua5.3版本新特性
- C++调用最新版Lua5.3
- Lua5.3 注册表 _G _ENV
- Lua5.3 注册表 _G _ENV
- Ubuntu14.04 安装lua5.3
- lua-md5 for lua5.3
- ubuntu中安装lua5.3
- Ubuntu14.04 安装lua5.3
- Lua5.3遇到的坑
- VS编译Lua5.3动态库
- Windows环境下手工配置Lua5.3
- lua5.3 和 vs2010 环境搭建
- mysql的null数据,c++返回的结果判断
- 第十五周 项目二之【希尔排序验证】
- HALCON 学习网
- oracle学习之:开、关、删归档日志(archivelog)
- 被“需要”的无功功率
- lua5.3数据结构
- C#常用类
- Visual Studio 2013编译VTK7.1.0
- PHP进阶 第4章 字符串操作
- 单例模式(创建类)
- UML----静态图(类图,对象图,包图)
- 连续邮资问题
- VMware 所有版
- 怎样贡献代码给spark team