Lua1.0 数据结构

先来看一下 Lua 中常用的几个数据结构:

先看一下 opcode.h 中的:

Type 枚举是 Lua 中的几种数据类型。

Value 联合体是 Lua 的数据类型定义。

Object 带标签的数据类型,其中 tag 字段是 Type 类型,Value 是 Object 的值。

Symbol 符号,一个是符号的名字,一个是符号的值,其值是一个 Object 类型。

以下的一些代码就是一些上面数据结构的操作宏。

hash.h  中定义了关联数组,也就是 lua 里的 table 类型。

// table 中的无素
typedef struct node
{
 Object ref; // 元素的 key
 Object val; // 元素的 value
 struct node *next; // 指向下一个元素的指针。
} Node;

// table 定义
typedef struct Hash
{
 char mark;
 unsigned int nhash;
 Node **list;
} Hash;

其中:

mark 在垃圾回收时的标记

nhash table 中的元素个数

list 元素的列表。

其它地方也没有别的数据结构了。

时间: 2024-11-08 18:35:26

Lua1.0 数据结构的相关文章

Lua1.0 代码分析 table.c

转载出处:http://my.oschina.net/xhan/blog/307961 table.c 代码分析 全局符号,常量,字符串,关联数组,文件列表的定义. 全局符号: 初始有 5 个基本的符号,Lua 预设的函数和库函数都注册在里面. 常量: 初始的几个常量是 Lua 中 type 的名字. 字符串表,关联数组表,文件列表 所有的这些在 table.c 中定义的这些数组可以认为是 Lua 的全局注册表空间,Lua 的环境. 函数分析 ? 1 2 3 4 5 6 7 8 9 10 11

Lua1.0 编译准备

转载出处:http://my.oschina.net/xhan/blog/305943 从官网 www.lua.org/ftp/lua-1.0.tar.gz 下代码.如何编译,ReadMe 里有这样的说明: The code compiles and runs in RedHat 5.2 with gcc 2.7.2.3. It may not run innewer systems, because it assumes that stdin and stdout are constants,

Lua1.0 脚本初步印象

转载出处:http://my.oschina.net/xhan/blog/305949 先来个 hello, world! 看看解释器是否能正常工作:print("hello, world") 可以正常输出,说明解释器能正常干活.再看看几个官方自带的测试文件是干什么的: array.lua $debug a = @() i=0 while i<10 do  a[i] = i*i  i=i+1 end r,v = next(a,nil) while r ~= nil do  pri

Lua1.0 环境准备

转载出处:http://my.oschina.net/xhan/blog/306719 从 lua.c 的 main 函数开始,看看在代码执行过程中中发生了什么? 1 2 3 4 5  if (argc < 2)  {   puts ("usage: lua filename [functionnames]");   return;  } Lua1.0 执行时至少要有一个参数,否则直接退出.接着是三个 lua_register . ? 1 2 3  lua_register (&

Lua1.0 代码分析 库

Lua1.0 代码分析 库库的代码相对比较简单.这里以数学库为例进行说明.比如看下这个取绝对值的数学函数 static void math_abs (void) {  double d;  lua_Object o = lua_getparam (1);  if (o == NULL)  { lua_error ("too few arguments to function `abs'"); return; }  if (!lua_isnumber(o))  { lua_error (

Lua1.0 写在最初

为什么是 Lua忘记是什么时候接触到 Lua 的了,也忘记是为什么接触到她的.现在想想,也许是因为下面两个原因:WOW 里有用到她,我上学的时候,玩过一段时间 WOW,了解一点 WOW 插件的编写,当时觉得这个语言挺有意思的.她是由 C 代码实现的,下载代码看了一下,发现她的官方实现的 C 代码写得很好,我是一个代码爱好者,面对这么优秀的代码,有种相见恨晚之感. 为什么是 Lua1.0我是一个代码爱好者,总觉得看代码的最初实现会比较容易把握作品的脉络.我不知道这种学习方法对不对,不过,或许是强迫

Lua1.0 代码分析 hash.c

转载出处:http://my.oschina.net/xhan/blog/308325 hash.c 代码分析Lua 中最重要的一个数据结构及相关操作.主要看下几个对外的接口. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* ** Create a new hash. Return the hash pointer or NULL on error. */ Hash *lua_hashcreate (unsigned int 

Lua1.1 数据结构

分析一下 lua 中常用的几个数据结构:先看一下 opcode.h 中的: typedef unsigned char Byte; typedef unsigned short Word; typedef union {  struct {char c1; char c2;} m;  Word w; } CodeWord; typedef union {  struct {char c1; char c2; char c3; char c4;} m;  float f; } CodeFloat;

Lua1.0 代码分析 inout.c

inout.c 代码分析 主要看下对于文件的处理 /* ** Function to open a file to be input unit. ** Return 0 on success or 1 on error. */ int lua_openfile (char *fn) {  lua_linenumber = 1;  lua_setinput (fileinput);  lua_setunput (fileunput);  fp = fopen (fn, "r");  if