Lua源碼模塊分析

這些模塊實現實用功能:

  • ldebug.c - 調試接口。包括訪問調試掛鉤的函數(lua_sethook,lua_gethook,lua_gethookcount),訪問運行時堆棧信息(lua_getstack / lua_getlocal / lua_setlocal),檢查字節碼(luaG_checkopenop / luaG_checkcode)和引發錯誤(luaG_typeerror / luaG_concaterror / luaG_aritherror / luaG_ordererror / luaG_errormsg / luaG_runerror)
  • lzio.c - 通用緩沖輸入流接口。
  • lmem.c - 與內存管理器的接口。這實現了luaM_realloc / luaM_growaux_,它包裝了內存分配功能。
  • lgc.c - 增量垃圾收集器(內存管理)

這些模塊實現基本數據類型:

  • lstate.c - 全局狀態。包括打開和關閉Lua狀態(lua_newstate / lua_close)和線程(luaE_newthread / luaE_freethread)的函數。

  • lobject.c - Lua對象的一些通用函數。包括數據類型< - >字符串轉換,原始相等性測試(luaO_rawequalObj)和日志基礎2(luaO_log2)

  • lstring.c - 字符串表(保留Lua處理的所有字符串)

  • lfunc.c - 輔助功能來操縱原型和關閉

  • ltable.c - Lua表(哈希)這些模塊處理解析和代碼生成:

  • lcode.c - Lua的代碼生成器。由lparser.c使用

  • llex.c - 詞法分析器。由lparser.c使用。

  • lparser.c - Lua解析器。

  • lundump.c - 加載預編譯的Lua chunks。實現luaU_undump,它加載預編譯的塊。還提供了luaU_header(由luaU_undump內部使用)來解析函數頭。

  • ldump.c - 保存預編譯的Lua chunks。實現luaU_dump,它將一個函數對象作為預編譯的塊字符串轉儲。

這些模塊處理Lua字節碼的執行:

  • lopcodes.c - Lua虛擬機的操作碼。定義所有操作碼的名稱和信息(通過表luaP_opnames和luaP_opmodes)。

  • lvm.c - Lua虛擬機。執行字節碼(luaV_execute)。還暴露了lapi.c使用的一些功能(例如luaV_concat)。

  • ldo.c - Lua的堆棧和調用結構。處理函數調用(luaD_call / luaD_pcall),增加堆棧,協同處理,...

  • ltm.c - 標簽方法。實現從對象訪問元方法。

這些模塊實現標準庫:

  • lbaselib.c - (基本功能)

  • lstrlib.c - 字符串

  • ltablib.c - 表

  • lmathlib.c - 數學

  • loslib.c - os

  • liolib.c - io

  • loadlib.c - 包

  • ldblib.c - 調試

這些模塊定義了C API:

  • lapi.c - Lua API。實現大量的Lua C API(lua_ *函數)。

  • lauxlib.c - 定義了luaL_ *函數

  • linit.c - 實現luaL_openlibs從C加載上述模塊

這些模塊實現了lua和luac程序:

  • lua.c - Lua獨立翻譯

  • print.c - 定義“PrintFunction ”函數,它在函數中打印字節碼(由luac.c“-l”選項使用)

  • luac.c - Lua編譯器(將字節碼保存到文件;還列出字節碼)

守則公約

外部符號的前綴表示其來自的模塊:

luaA_  -  lapi.c
luaB_  -  lbaselib.c
luaC_  -  lgc.c
luaD_  -  ldo.c
luaE_  -  lstate.c
luaF_  -  lfunc.c
luaG_  -  ldebug.c
luaH_  -  ltable.c
luaI_  -  lauxlib.c
luaK_  -  lcode.c
luaL_  -  lauxlib.c / h,linit.c(public functions)
luaM_  -  lmem.c
luaO_  -  lobject.c
luaP_  -  lopcodes.c
luaS_  -  lstring.c
luaT_  -  ltm.c
luaU_  -  lundump.c
luaV_  -  lvm.c
luaX_  -  llex.c
luaY_  -  lparser.c
luaZ_  -  lzio.c
lua_  -  lapi.c / h + luaconf.h,debug.c
luai_  -  luaconf.h
luaopen_  -  luaconf.h +庫(lbaselib.c,ldblib.c,liolib.c,lmathlib.c,
                                  loadlib.c,loslib.c,lstrlib.c,ltablib.c)

SRC / Makefile文件

在src / Makefile(5.1.1)中,mingw目標是不尋常的,因為它只構建lua(不是luac)。也可以添加mingw-cygwin目標。請參閱BuildingLua中的 mingw注釋來解決。

在SRC / luaconf.h(5.1.1),LUA_PATH_DEFAULT指的是LUA_LDIR和LUA_CDIR,但LUA_CPATH_DEFAULT僅指LUA_CDIR的這些。 RiciLake建議這可能是一個安全決策,其中C模塊需要比Lua模塊更多的信任。

SRC / luaconf.h

在src / luaconf.h(5.1.1)中,有一個LUA_CDIR"loadall.dll",在[3] [4]中討論。

src / lgc.h和lgc.c(垃圾收集器)

請參閱GarbageCollectionEmergencyGarbageCollector中的描述。

sec / ltable.h和ltable.c(tables)

參見LuaSourceTable

SRC / lmathlib.c

這在BindingCodeToLua中有所描述。

注意:“#define lmathlib_c”(和其他庫中的類似行)只存在于luaconf.h中的條件(由lhf注釋)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容