listroot 和 listnode
list 是 TinTin++ 源码中非常重要的基础数据结构,顾名思义它就是一个列表,一维的有序的集合,这种基础数据结构可以用来存放大多数 TinTin++ 定义块。参见 #info
命令的输出,以及 #info aliases
等命令。
大体来说,一个 listnode 描述一个定义块,而 listroot 则是一组 listnode 的集合,但是和别处不同,这里采用了数组而非双向链表来储存多个 listnode。数组的长度由 listroot->used
给出,第一个元素位置为 listroot->list[0]
, 最后一个则是 listroot->list[listroot->used-1]
。
注意 listnode 本身并没有类型字段,也就是说它的类型由 listroot->type
给出,换言之 listroot 只能用来储存同类型的 listnode,同一个 listroot 下的 listnode 具有相同类型。
另外,listroot->flags
为整个 list 提供了一些掩码,有如下这些:
特殊的 list
每一次 push_script_stack()
都会为新栈帧创建一个 listroot,用来存放该栈帧专属的 #local 变量,该 listroot 的类型为 LIST_VARIABLE。
最后更新于