为什么 ChunkSpy .function 部分有四个参数?

Why ChunkSpy .function part has four parameters?

在使用 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。
  • 叠数