-- 本文为读云风工作室《lua源码欣赏》加上个人理解的读书笔记,若有理解错误之处,欢迎大家批评指正
数据结构
typedef union TString {
L_Umaxalign dummy; /* ensures maximum alignment for strings */
struct {
CommonHeader;
lu_byte extra; /* reserved words for short strings; "has hash" for longs */
unsigned int hash;
size_t len; /* number of characters in string */
} tsv;
} TString;
#define getstr(ts) cast(const char *, (ts) + 1)
Tstring内联体是字符串类型的数据头。其中dummy用来对齐边界。CommonHeader用于GC,说明字符串类型的对象以引用类型存在。extra对于短字符串来说,用于识别该字符串是否是保留字,有助于词法分析器快速判断保留字;对于长字符串来说,用于标记是否已经计算哈希值。hash是字符串的哈希值。len是字符串的长度。字符串的数据紧跟在Tstring数据头的后面,用getstr宏就可以获取字符串数据指针。
#define LUA_TSHRSTR (LUA_TSTRING | (0 << 4)) /* short strings */
#define LUA_TLNGSTR (LUA_TSTRING | (1 <<