Lua源代码分析顺序.doc

Lua源代码分析顺序.doc

ID:51946404

大小:73.50 KB

页数:5页

时间:2020-03-20

Lua源代码分析顺序.doc_第1页
Lua源代码分析顺序.doc_第2页
Lua源代码分析顺序.doc_第3页
Lua源代码分析顺序.doc_第4页
Lua源代码分析顺序.doc_第5页
资源描述:

《Lua源代码分析顺序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Recommendedreadingorder:lmathlib.c,1strlib.c:getfamiliarwiththeexternalCAPI.Don1tbotherwiththeAPIisimplementedinternaily.OnlyskimthistogetaCross-refereneetolua.handluaconf.hasneedecl・valuesandobjectrepresentation・skimthroughthisfirst・windowwiththisfileopenallthetime.thepatternmotcherthough.Justth

2、eeasyfunctions,lapi.c:Checkhowfeelingforthecode・lobject・h:taggedyou11wanttokeepalstate.h:stateobjects.ditto,lopcodes.h:bytecodeinstructionformatandopcodedefinitions.easy.lvm.c:scrolldowntoluaV_execute,themaininterpreterloop・seehowalloftheinstructionsareimplemented・skipthedetailsfornow・rereadlater

3、・Ido.c:calls,stacks,exceptions,coroutines,toughread,lstring.c:stringinterning・cute,huh?ltable.c:hashtablesandarrays,trickycode.ltm.c:metamethodhandling,rereadalloflvm.cnow.Youmaywanttorereadlapi.cnow・]debug,c:surprisewaitingforyou.abstractinterpretationisusedtofindobjectnamesfortracebacks.doesbyt

4、ecodeverification,too.lparser・c,lcode・c:recursivedescentparser,targettingaregister-basedVM.startfromchunk()andworkyourwaythrough・readtheexpressionparserandthecodegeneratorpartslast・Igc.c:incrementalgarbagecollector,takeyourtime.Readalltheotherfilesasyouseereferencestothem.Don'tletyourstack英文比较简单,

5、我就不翻译了。今天已经读了Imathlib.c,lstrlib.c,lapi.c这三个文件。对于Imathlib.c和lstrllib.c这个两个文件主要是熟悉如何扩展Lua,一般使用过Lua的人都对这个会有所了解。只是简单的读一读、熟悉代码风格,不用花太多时间(我只看了20分钟)lapi.c这里就开始有点难度了,主要是你这里有一些平时没有接触过的东西。阅读这个文件可以结合手册屮第三章CAPI來进行。由于lapi.c涉及到很多的宏和结构,建议装一个vim+ctags或Visualstudio2010做crossreferenceso以下是一些关于lapi.c笔记:TValue:由Vaiu

6、e和tt组成,tt为类型标识,等于LUA_TNTL的呢个Value是一个联合体,根据tt的值不同使用不同的值,1呃屮所有的值、对彖,都是由这个结构储存。以下是blue联合体的定义:typedefunion{GCObject*gc;void*p;lua_Numbern;intb;}Value;GCObject:里曲的内容比较复杂,从字瓯上理解是指就是gc会收集的对象,可以理解为Lua屮的基木对象。包括Thread,Table,UserData,String祁是存储在这个对象。void*p:就是指针对应的内容就是api中的lightuserdata,这个可以从luapushlightuser

7、data和lua_touserdata中得到证明。由此,可以知道lightuserdata和number,integer有相同的行为index2adr函数:将栈索引转换成Stkld,伪索引(GLOBALIndex,REGISTRYIndex等)也是在这里处理。几乎所有API都需要调用这个。Stkld:字面意思为栈ID,实际为TValue*,使用地址作为一标识。可以想象,lua_State屮的栈是一个TValue数组。阅读lapi.c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。