函数签名、函数、表、内存、全局变量在模块内有各自的索引空间,局部变量和跳转标签在函数内有各自的索引空间。为了提高代码的可读性我们给这些索引分别定义了类型别名。
type (
TypeIdx = uint32
FuncIdx = uint32
TableIdx = uint32
MemIdx = uint32
GlobalIdx = uint32
LocalIdx = uint32
LabelIdx = uint32
)
下面对这几种索引进行简单说明。
1、类型索引
不管是内部还是外部导入的函数,其签名全都存储在类型段中。
2、函数索引
函数索引空间由内部和外部函数共同构成,当调用某函数时需要给定该函数的索引。
3、全局变量索引
和函数一样全局变量索引空间也是由外部和内部全局变量共同构成的,当读写全局变量时,需要给定该全局变量的索引。
4、表和内存索引
表和内存也可以是外部导入,限于Wasm规范的限制,最多只能导入或定义一个表和内存,所以索引只能是0。
5、局部变量索引
局部变量索引由函数的参数和局部变量构成,比如函数接收3个参数,内部定义了4个局部变量那么索引空间则为0-6,0-2指向参数3-6指向局部变量,当读写参数或局部变量时需要给定指定的索引。
6、跳转标签索引
每个函数有自己的跳转标签索引空间。