lua - 为什么 ChunkSpy .function 部分有四个参数?
问题描述
使用 ChunkSpy 时,我发现一件事让我很困惑。让我们看看下面的例子
>a = 1
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.const "a" ; 0
.const 1 ; 1
[1] loadk 0 1 ; 1
[2] setglobal 0 0 ; a
[3] return 0 1
; end of function
既然是0 upvalues, 0 params, 2 stacks
,为什么里面有四个参数.function 0 0 2 2
在另一个例子中,我们可以看到
>local a; function b() a = 1 return a end
; source chunk: (interactive mode)
; x86 standard (32-bit, little endian, doubles)
; function [0] definition (level 1)
; 0 upvalues, 0 params, 2 stacks
.function 0 0 2 2
.local "a" ; 0
.const "b" ; 0
; function [0] definition (level 2)
; 1 upvalues, 0 params, 2 stacks
.function 1 0 0 2
.upvalue "a" ; 0
.const 1 ; 0
[1] loadk 0 0 ; 1
[2] setupval 0 0 ; a
[3] getupval 0 0 ; a
[4] return 0 2
[5] return 0 1
; end of function
[1] closure 1 0 ; 1 upvalues
[2] move 0 0
[3] setglobal 1 0 ; b
[4] return 0 1
; end of function
所以我猜第一个参数是upvalues,但是第二个有什么用呢?
解决方案
我在 Egor Skriptunoff 的帮助下从评论中得到了答案。
.fucntion 部分有四个参数,含义如下:
- 上升次数
- 命名参数的数量
- arg 的标志:1=VARARG_HASARG,2=VARARG_ISVARARG,4=VARARG_NEEDSARG。正常功能始终为 0,主功能块始终为 2。
- 堆栈数
推荐阅读
- r - Dygraph 和 Graph 未在闪亮的选项卡下呈现
- c - 在 C 中计算二进制文件的排序,仅包含 uint16_t 数字
- javascript - javascript读取docx文本的问题
- swift - SCNSceneRendererDelegate - 未调用渲染器
- android - 在 ViewPager2 中启动子片段
- php - 实现千 (k, kk) 解释器
- python - 每个国家/地区的数据框中的 Python 总和值并保留 PopData
- angular - get方法以角度返回空对象
- ffmpeg - ffmpeg 转换为 hls 时烧录的字幕不同步
- c# - 获取“远程服务器返回错误:(403)禁止”错误无论我做什么