lua5.2.3源码阅读笔记
来源:互联网 发布:做淘宝什么最赚钱 编辑:程序博客网 时间:2024/06/05 22:55
今天研究了三块语句:
1、
if i > 0 then i = 300elseif i == 0 then i = 100else i = 0end
指令:
1 [1] GETTABUP 0 0 -1 ; _ENV "i" 2 [1] LT 0 -2 0 ; 0 - 3 [1] JMP 0 2 ; to 6 4 [2] SETTABUP 0 -1 -3 ; _ENV "i" 300 5 [2] JMP 0 6 ; to 12 6 [3] GETTABUP 0 0 -1 ; _ENV "i" 7 [3] EQ 0 0 -2 ; - 0 8 [3] JMP 0 2 ; to 11 9 [4] SETTABUP 0 -1 -4 ; _ENV "i" 100 10 [4] JMP 0 1 ; to 12 11 [6] SETTABUP 0 -1 -2 ; _ENV "i" 0 12 [7] RETURN 0 1JMP 5 10行都跳向12行,这里用luaK_concat函数将指令连起来,最后再修正指令偏移参数
2、
while i > 0 do i = 200 if i > 100 then break endend
指令:
1 [1] GETTABUP 0 0 -1 ; _ENV "i" 2 [1] LT 0 -2 0 ; 0 - 3 [1] JMP 0 5 ; to 9 4 [2] SETTABUP 0 -1 -3 ; _ENV "i" 200 5 [3] GETTABUP 0 0 -1 ; _ENV "i" 6 [3] LT 1 -4 0 ; 100 - 7 [3] JMP 0 1 ; to 9 8 [5] JMP 0 -8 ; to 1 9 [6] RETURN 0 1源码中把while循环中的break转成goto break,并在第7行生成一个JMP指令。在循环结束后,创建一个break Label把前面的goto break生成的JMP指令偏移修正到下一个指令的位置
3、
while i > 0 do i = 200 if i > 100 then i = 100 break else i = 0 endend指令:
1 [1] GETTABUP 0 0 -1 ; _ENV "i"2 [1] LT 0 -2 0 ; 0 -3 [1] JMP 0 9 ; to 134 [2] SETTABUP 0 -1 -3 ; _ENV "i" 2005 [3] GETTABUP 0 0 -1 ; _ENV "i"6 [3] LT 0 -4 0 ; 100 -7 [3] JMP 0 3 ; to 118 [4] SETTABUP 0 -1 -4 ; _ENV "i" 1009 [4] JMP 0 3 ; to 1310 [5] JMP 0 -10 ; to 111 [7] SETTABUP 0 -1 -2 ; _ENV "i" 012 [8] JMP 0 -12 ; to 113 [9] RETURN 0 1
本来第10行的JMP应该跳到第12行,但因第12行也是跳转指令,第10行的JMP就直接回到了第1行指令。这中间是精妙的luaK_jump函数,把指令链接起来,后面一同修正
0 0
- lua5.2.3源码阅读笔记
- Lua5.2.3源码阅读(1)-TValue,TString
- Lua5.2.3源码阅读(1)-TValue,TString
- Lua5.2.3源码阅读(2)-Table
- Lua5.2.3源码阅读(2)-Table
- Lua5.2.3源码阅读--Table(ipairs,pairs)
- Lua5.2.3源码阅读(3)-Table(ipairs,pairs)
- lua5.3.1 源码阅读记录(基础)
- lua5.3源码基础阅读(luaL_openlibs)
- LZ77源码阅读笔记
- Boa 源码阅读笔记
- VNC源码阅读笔记
- osqa源码阅读笔记
- VNC源码阅读笔记
- MPlayer 源码阅读笔记
- PyEmu源码阅读笔记
- JSONModel源码阅读笔记
- JSONModel源码阅读笔记
- 创建进程中的一些问题
- Android 实现简单的帧动画
- 互联网技术
- linux常用命令(25):linux文件属性详解
- Android之SD卡上的文件读取
- lua5.2.3源码阅读笔记
- C语言参考手册(第5版)
- 项目1-函数传值的三种方式
- Spring MVC and Excel file via AbstractJExcelView
- 【第3周 项目2 - 建设“顺序表”算法库】
- Lucene 索引
- 个人笔记---JNI2-调试
- C语言函数库
- 字符串类String的设计