主題
LUA源碼分析上
http://3dlearn.googlecode.com/files/LUA源碼分析上.pdf(非chrome下載文件名有亂碼需要自己重命名)
適合初學lua源碼參考之用,本文作為上部分還未深入分析lua的實現(xiàn)原理。恩,要遵守原則。
目錄
LUA源碼分析(上) 0
有分享交流才有進步,永遠不要固步自封 0
目 錄 1
1 參考資料 5
2 閱讀說明 6
2.1 閱讀本文的方式 6
2.2 源碼閱讀順序 6
2.3 Lapi 7
2.3.1 index2addr 9
2.3.2 lua_setfield 11
2.4 Lobject 12
2.4.1 Value 12
2.4.2 TString 13
2.4.3 Udata 13
2.4.4 Upvaldesc 14
2.4.5 LocVar 14
2.4.6 Proto 14
2.4.7 UpVal 14
2.4.8 CClosure 15
2.4.9 LClosure 15
2.4.10 Closure 15
2.4.11 Tkey 15
2.4.12 Node 15
2.4.13 Table 15
2.4.14 重要宏 16
2.5 Lstate 16
2.5.1 不公開結構LG 18
2.5.2 CallInfo結構 19
2.5.3 global_State結構 19
2.5.4 lua_State結構 21
2.5.5 lua_newstate 22
2.6 Llex 27
1.1 Lopcodes 27
1.1.1 四種指令格式 27
1.1.2 指令集 27
1.1.3 指令定義 30
1.2 Lvm 31
1.2.1 過程 31
1.2.2 過程調(diào)用 32
1.2.3 luaV_execute 33
1.3 Ldo( Stack and Call structure) 34
1.3.1 公開過程 35
1.3.2 luaD_pcall 35
1.3.3 luaD_protectedparser 35
1.4 Lstring 36
1.4.1 luaS_newlstr 36
1.4.2 luaS_newudata 37
1.5 Ltable(hash tables) 37
1.6 Ltm(Tag methods) 37
1.6.1 luaT_init 38
1.6.2 luaT_gettm 38
1.7 Ldebug 38
1.7.1 過程表 38
1.8 Lparser\lcode(遞歸下降分析器) 39
1.8.1 數(shù)據(jù)結構 39
1.9 Lgc(增量\漸進垃圾回收器) 39
2 編碼規(guī)范與約定 40
2.1 標識符慣用法 40
2.2 接口代碼約定 40
3 基礎數(shù)據(jù)結構 41
3.1 等價C類型 41
3.1.1 string 41
3.1.2 array 41
4 全局變量 43
4.1 腳本層全局對象 43
4.1.1 查看全局變量 43
4.1.2 全局變量 43
4.2 引擎全局對象 44
5 架構 45
5.1 文件結構 45
5.1.1 文件結構 45
5.2 文件點評 48
5.3 模塊劃分 48
6 引擎核心 49
6.1 緣起緣滅 49
6.1.1 展開為非核心對象 55
6.1.2 展開為核心對象 55
6.2 狀態(tài)機 56
6.2.1 CallInfo(L->ci) 58
6.2.2 CallInfo位狀態(tài)(Bits in CallInfo status) 58
7 虛擬機 59
8 閉包 59
9 垃圾回收 59
10 CASE 60
10.1 初始化和加載腳本 60
10.2 Lua runtime code reading Lua運行期源代碼分析閱讀 60
10.3 加載腳本 61
10.4 執(zhí)行字節(jié)碼 63
10.5 創(chuàng)建math庫 66
10.6 set\get方法辨析 69
11 調(diào)試與分析 70
11.1 VM Code 70
11.2 LuaCov 71
11.3 LDT 71
11.4 lua調(diào)試器:運行時的值查看 72
12 基礎模型 73
13 語法糖 73
13.1 類實現(xiàn) 73
13.2 類型轉(zhuǎn)換 75
13.3 LUA_CORE 75
13.3.1 定義動態(tài)庫 76
13.3.2 定義標準操作 76
13.3.3 打開MS compiler匯編 77
13.3.4 數(shù)據(jù)包裝技巧 78
14 疑問 80
14.1 Tvaluefields為何重復定義? 80
14.2 如何區(qū)分棧中表和普通類型? 80
= 附錄 = 81
15 元編程METAPROGRAMMING 81
16 閉包 CLOSURE 81
16.1 C 閉包 82
16.2 C++閉包 82
17 基礎數(shù)據(jù)類型數(shù)據(jù)長度 83
18 THE COMPLETE SYNTAX OF LUA 83
19 遞歸下降分析器(RECURSIVE DESCENT PARSER) 84
20 垃圾回收器 85
20.1 基礎算法 85
20.2 貝姆垃圾收集器 85
21 LUA 5.1 C API 86
21.1 Push data 86
21.2 Check data 86
21.3 Get data checked 86
21.4 Get data converted 87
21.5 Get data with defaults 87
21.6 Stack operator 87
21.7 Value operator 88
21.8 Table 88
21.9 Global data 88
21.10 Call function 89
21.11 Load or call Lua code 89
21.12 Debugging 89
21.13 Buffer 90
21.14 Thread 90
21.15 Library 90
21.16 Misc 91
21.17 Basic types 91