字典操作原语
大部分字典操作的Gas消耗不是固定的,它依赖于给定字典的内容。
操作码 | Fift 语法 | 堆栈 | Gas | 描述 |
---|---|---|---|---|
Please enter a search query | ||||
No results found |
TVM 指令内容列表
字典操作原语
字典创建
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
6D | NEWDICT | - D | 返回一个新的空字典。 它是 PUSHNULL 的另一种助记符。 | 18 |
6E | DICTEMPTY | D - ? | 检查字典 D 是否为空,并相应地返回 -1 或 0 。它是 ISNULL 的另一种助记符。 | 18 |
字典序列化与反序列化
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
CE | STDICTS `` | s b - b' | 将以切片表示的字典 s 存储进构建器 b 中。实际上,这是 STSLICE 的同义词。 | 18 |
F400 | STDICT STOPTREF | D b - b' | 将字典 D 存入构建器 b ,返回结果 构建器 b' 。换言之,如果 D 是一个cell,执行 STONE 和 STREF ;如果 D 是 Null,执行 NIP 和 STZERO ;否则抛出类型检查异常。 | 26 |
F401 | SKIPDICT SKIPOPTREF | s - s' | 相当于 LDDICT NIP 。 | 26 |
F402 | LDDICTS | s - s' s'' | 从切片 s 中加载(解析)以切片表示的字典 s' ,并将 s 的剩余部分作为 s'' 返回。这是所有 HashmapE(n,X) 类型字典的“分裂函数”。 | 26 |
F403 | PLDDICTS | s - s' | 从切片 s 中预加载以切片表示的字典 s' 。大致相当于 LDDICTS DROP 。 | 26 |
F404 | LDDICT LDOPTREF | s - D s' | 从切片 s 中加载(解析)字典 D ,并将 s 的剩余部分作为 s' 返回。可应用于字典或任意 (^Y)? 类型的值。 | 26 |
F405 | PLDDICT PLDOPTREF | s - D | 从切片 s 中预加载字典 D 。大致相当于 LDDICT DROP 。 | 26 |
F406 | LDDICTQ | s - D s' -1或 s 0 | LDDICT 的静默版本。 | 26 |
F407 | PLDDICTQ | s - D -1或0 | PLDDICT 的静默版本。 | 26 |
获取字典操作
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F40A | DICTGET | k D n - x -1或0 | 在类型为 HashmapE(n,X) 且拥有 n -位键的字典 D 中查找键 k (由切片表示,其前 0 <= n <= 1023 数据位被用作键)。成功时,以切片 x 的形式返回找到的值。 | |
F40B | DICTGETREF | k D n - c -1或0 | 与 DICTGET 类似,但在成功时对 x 应用 LDREF ENDS 。此操作对于类型为 HashmapE(n,^Y) 的字典很有用。 | |
F40C | DICTIGET | i D n - x -1或0 | 与 DICTGET 类似,但使用带符号的(大端)n -位 整型 i 作为键。如果 i 不能放入 n 位,则返回 0 。如果 i 是 NaN ,抛出整数溢出异常。 | |
F40D | DICTIGETREF | i D n - c -1或0 | 组合 DICTIGET 与 DICTGETREF :它使用带符号的 n -位 整型 i 作为键,并在成功时返回 cell 而不是切片。 | |
F40E | DICTUGET | i D n - x -1或0 | 与 DICTIGET 类似,但使用无符号的(大端)n -位 整型 i 作为键。 | |
F40F | DICTUGETREF | i D n - c -1或0 | 与 DICTIGETREF 类似,但使用一个无符号 n -位 整型 键 i 。 |
设置/替换/添加字典操作
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F412 | DICTSET | x k D n - D' | 在字典 D (同样用切片表示)中设置 n -位键 k (如 DICTGET 中用切片表示)关联的值为 x (再次是切片),并返回结果字典 D' 。 | |
F413 | DICTSETREF | c k D n - D' | 类似于 DICTSET ,但设置的值为对cell c 的引用。 | |
F414 | DICTISET | x i D n - D' | 类似于 DICTSET ,但键由(大端)有符号 n -位整数 i 表示。如果 i 不能放入 n 位,则生成范围检查异常。 | |
F415 | DICTISETREF | c i D n - D' | 类似于 DICTSETREF ,但键由 DICTISET 中的有符号 n -位整数表示。 | |
F416 | DICTUSET | x i D n - D' | 类似于 DICTISET ,但 i 为 无符号 n -位整数。 | |
F417 | DICTUSETREF | c i D n - D' | 类似于 DICTISETREF ,但 i 为无符号。 | |
F41A | DICTSETGET | x k D n - D' y -1或 D' 0 | 结合 DICTSET 和 DICTGET :它将键 k 对应的值设置为 x ,但也返回该键原有的旧值 y (如果存在)。 | |
F41B | DICTSETGETREF | c k D n - D' c' -1或 D' 0 | 类似于 DICTSETGET 的 DICTSETREF 与 DICTGETREF 的组合。 | |
F41C | DICTISETGET | x i D n - D' y -1或 D' 0 | DICTISETGET ,但 i 为有符号 n -位整数。 | |
F41D | DICTISETGETREF | c i D n - D' c' -1或 D' 0 | DICTISETGETREF ,但 i 为有符号 n -位整数。 | |
F41E | DICTUSETGET | x i D n - D' y -1或 D' 0 | DICTISETGET ,但 i 为无符号 n -位整数。 | |
F41F | DICTUSETGETREF | c i D n - D' c' -1或 D' 0 | DICTISETGETREF ,但 i 为无符号 n -位整数。 | |
F422 | DICTREPLACE | x k D n - D' -1或 D 0 | 一个 替换 操作,类似于 DICTSET ,但只有当键 k 已经存在于 D 中时才会将 D 中键 k 的值设置为 x 。 | |
F423 | DICTREPLACEREF | c k D n - D' -1或 D 0 | DICTSETREF 的 替换 对应操作。 | |
F424 | DICTIREPLACE | x i D n - D' -1或 D 0 | DICTREPLACE ,但 i 为有符号 n -位整数。 | |
F425 | DICTIREPLACEREF | c i D n - D' -1或 D 0 | DICTREPLACEREF ,但 i 为有符号 n -位整数。 | |
F426 | DICTUREPLACE | x i D n - D' -1或 D 0 | DICTREPLACE ,但 i 为无符号 n -位整数。 | |
F427 | DICTUREPLACEREF | c i D n - D' -1或 D 0 | DICTREPLACEREF ,但 i 为无符号 n -位整数。 | |
F42A | DICTREPLACEGET | x k D n - D' y -1或 D 0 | DICTSETGET 的 替换 对应操作:成功时,还会返回与该键相关的旧值。 | |
F42B | DICTREPLACEGETREF | c k D n - D' c' -1或 D 0 | DICTSETGETREF 的 替换 对应操作。 | |
F42C | DICTIREPLACEGET | x i D n - D' y -1或 D 0 | DICTREPLACEGET ,但 i 为有符号 n -位整数。 | |
F42D | DICTIREPLACEGETREF | c i D n - D' c' -1或 D 0 | DICTREPLACEGETREF ,但 i 为有符号 n -位整数。 | |
F42E | DICTUREPLACEGET | x i D n - D' y -1或 D 0 | DICTREPLACEGET ,但 i 为无符号 n -位整数。 | |
F42F | DICTUREPLACEGETREF | c i D n - D' c' -1或 D 0 | DICTREPLACEGETREF ,但 i 为无符号 n -位整数。 | |
F432 | DICTADD | x k D n - D' -1或 D 0 | DICTSET 的 添加 对应操作:在字典 D 中将与键 k 关联的值设置为 x ,但只有当它还未在 D 中存在时。 | |
F433 | DICTADDREF | c k D n - D' -1或 D 0 | DICTSETREF 的 添加 对应操作。 | |
F434 | DICTIADD | x i D n - D' -1或 D 0 | DICTADD ,但 i 为有符号 n -位整数。 | |
F435 | DICTIADDREF | c i D n - D' -1或 D 0 | DICTADDREF ,但 i 为有符号 n -位整数。 | |
F436 | DICTUADD | x i D n - D' -1或 D 0 | DICTADD ,但 i 为无符号 n -位整数。 | |
F437 | DICTUADDREF | c i D n - D' -1或 D 0 | DICTADDREF ,但 i 为无符号 n -位整数。 | |
F43A | DICTADDGET | x k D n - D' -1或 D y 0 | DICTSETGET 的 添加 对应操作:在字典 D 中将与键 k 关联的值设置为 x ,但只有当键 k 还未在 D 中存在时。否则,仅返回旧值 y ,不更改字典。 | |
F43B | DICTADDGETREF | c k D n - D' -1或 D c' 0 | DICTSETGETREF 的 添加 对应操作。 | |
F43C | DICTIADDGET | x i D n - D' -1或 D y 0 | DICTADDGET ,但 i 为有符号 n -位整数。 | |
F43D | DICTIADDGETREF | c i D n - D' -1或 D c' 0 | DICTADDGETREF ,但 i 为有符号 n -位整数。 | |
F43E | DICTUADDGET | x i D n - D' -1或 D y 0 | DICTADDGET ,但 i 为无符号 n -位整数。 | |
F43F | DICTUADDGETREF | c i D n - D' -1或 D c' 0 | DICTADDGETREF ,但 i 为无符号 n -位整数。 |
接受构建器的字典设置操作变体
以下操作接受新值作为构建器 b
,而不是切片 x
。
| xxxxxxx
操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法 | xxxxxxxxxxxxxxxxx
堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述 | xxxx
Gas |
|:-|:-|:-|:-|:-|
| F441
| DICTSETB
| b k D n - D'
| | |
| F442
| DICTISETB
| b i D n - D'
| | |
| F443
| DICTUSETB
| b i D n - D'
| | |
| F445
| DICTSETGETB
| b k D n - D' y -1或 D' 0
| | |
| F446
| DICTISETGETB
| b i D n - D' y -1或 D' 0
| | |
| F447
| DICTUSETGETB
| b i D n - D' y -1或 D' 0
| | |
| F449
| DICTREPLACEB
| b k D n - D' -1或 D 0
| | |
| F44A
| DICTIREPLACEB
| b i D n - D' -1或 D 0
| | |
| F44B
| DICTUREPLACEB
| b i D n - D' -1或 D 0
| | |
| F44D
| DICTREPLACEGETB
| b k D n - D' y -1或 D 0
| | |
| F44E
| DICTIREPLACEGETB
| b i D n - D' y -1或 D 0
| | |
| F44F
| DICTUREPLACEGETB
| b i D n - D' y -1或 D 0
| | |
| F451
| DICTADDB
| b k D n - D' -1或 D 0
| | |
| F452
| DICTIADDB
| b i D n - D' -1或 D 0
| | |
| F453
| DICTUADDB
| b i D n - D' -1或 D 0
| | |
| F455
| DICTADDGETB
| b k D n - D' -1或 D y 0
| | |
| F456
| DICTIADDGETB
| b i D n - D' -1或 D y 0
| | |
| F457
| DICTUADDGETB
| b i D n - D' -1或 D y 0
| | |
删除字典操作
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F459 | DICTDEL | k D n - D' -1或 D 0 | 从字典 D 中删除由切片 k 表示的 n -位键。如果键存在,返回修改后的字典 D' 和成功标志位 -1 。否则,返回原始字典 D 和 0 。 | |
F45A | DICTIDEL | i D n - D' ? | DICTDEL 的一个版本,键由有符号的 n -位 整数 i 表示。如果 i 不能放入 n 位,简单地返回 D 0 (“键未找到,字典未修改”)。 | |
F45B | DICTUDEL | i D n - D' ? | 类似于 DICTIDEL ,但 i 为无符号的 n -位整数。 | |
F462 | DICTDELGET | k D n - D' x -1或 D 0 | 从字典 D 中删除由切片 k 表示的 n -位键。如果键存在,返回修改后的字典 D' 、与键 k 关联的原始值 x (由切片表示),和成功标志位 -1 。否则,返回原始字典 D 和 0 。 | |
F463 | DICTDELGETREF | k D n - D' c -1或 D 0 | 类似于 DICTDELGET ,但成功时对 x 应用 LDREF ENDS ,以便返回的值 c 是一个cell。 | |
F464 | DICTIDELGET | i D n - D' x -1或 D 0 | DICTDELGET ,但 i 为有符号的 n -位整数。 | |
F465 | DICTIDELGETREF | i D n - D' c -1或 D 0 | DICTDELGETREF ,但 i 为有符号的 n -位整数。 | |
F466 | DICTUDELGET | i D n - D' x -1或 D 0 | DICTDELGET ,但 i 为无符号的 n -位整数。 | |
F467 | DICTUDELGETREF | i D n - D' c -1或 D 0 | DICTDELGETREF ,但 i 为无符号的 n -位整数。 |
“可能是引用”的字典操作
以下操作假设使用字典存储类型为可能是cell(Maybe Cell)的值 c?
。表示如下:如果 c?
是一个cell,它作为一个没有数据位且恰好有一个对这个cell的引用的值存储。如果 c?
是Null,则对应的键必须从字典中缺失。
| xxxxxxx
操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法 | xxxxxxxxxxxxxxxxx
堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述 | xxxx
Gas |
|:-|:-|:-|:-|:-|
| F469
| DICTGETOPTREF
| k D n - c^?
| DICTGETREF
的一个变体,如果键 k
不存在于字典 D
中,则返回 Null 而不是值 c^?
。 | |
| F46A
| DICTIGETOPTREF
| i D n - c^?
| DICTGETOPTREF
的版本,但 i
为有符号的 n
-位整数。如果键 i
超出范围,也返回 Null。 | |
| F46B
| DICTUGETOPTREF
| i D n - c^?
| DICTGETOPTREF
的版本,但 i
为无符号的 n
-位整数。如果键 i
超出范围,也返回 Null。 | |
| F46D
| DICTSETGETOPTREF
| c^? k D n - D' ~c^?
| DICTGETOPTREF
和 DICTSETGETREF
的一个变体,将字典 D
中键 k
对应的值设置为 c^?
(如果 c^?
是Null,则删除该键),并返回旧值 ~c^?
(如果键 k
之前缺失,返回Null)。 | |
| F46E
| DICTISETGETOPTREF
| c^? i D n - D' ~c^?
| 类似于 DICTSETGETOPTREF
的原语,但使用有符号的 n
-位 整数 i
作为键。如果 i
不能放入 n
位,抛出范围检查异常。 | |
| F46F
| DICTUSETGETOPTREF
| c^? i D n - D' ~c^?
| 类似于 DICTSETGETOPTREF
的原语,但使用无符号的 n
-位 整数 i
作为键。 | |
前缀码字典操作
构建前缀码字典的一些基本操作。
这些原语与它们非前缀码(DICTSET
等)的对应操作完全相同,不过在前缀码字典中,即使是 Set 也可能失败,因此 PFXDICTSET
也必须返回成功标志位。
| xxxxxxx
操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法 | xxxxxxxxxxxxxxxxx
堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述 | xxxx
Gas |
|:-|:-|:-|:-|:-|
| F470
| PFXDICTSET
| x k D n - D' -1或 D 0
| | |
| F471
| PFXDICTREPLACE
| x k D n - D' -1或 D 0
| | |
| F472
| PFXDICTADD
| x k D n - D' -1或 D 0
| | |
| F473
| PFXDICTDEL
| k D n - D' -1或 D 0
| | |
GetNext 和 GetPrev 操作的变体
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F474 | DICTGETNEXT | k D n - x' k' -1或 0 | 计算字典 D 中字典序大于 k 的最小键 k' ,并返回 k' (由切片表示)及其关联的值 x' (也由切片表示)。 | |
F475 | DICTGETNEXTEQ | k D n - x' k' -1或 0 | 类似于 DICTGETNEXT ,但计算字典序大于或等于 k 的最小键 k' 。 | |
F476 | DICTGETPREV | k D n - x' k' -1或 0 | 类似于 DICTGETNEXT ,但计算字典序小于 k 的最大键 k' 。 | |
F477 | DICTGETPREVEQ | k D n - x' k' -1或 0 | 类似于 DICTGETPREV ,但计算字典序小于或等于 k 的最大键 k' 。 | |
F478 | DICTIGETNEXT | i D n - x' i' -1或 0 | 类似于 DICTGETNEXT ,但将字典 D 中的所有键解释为大端有符号的 n -位整数,并计算大于整数 i 的最小键 i' (i 不一定能放入 n 位)。 | |
F479 | DICTIGETNEXTEQ | i D n - x' i' -1或 0 | 类似于 DICTGETNEXTEQ ,但将键解释为有符号的 n -位整数。 | |
F47A | DICTIGETPREV | i D n - x' i' -1或 0 | 类似于 DICTGETPREV ,但将键解释为有符号的 n -位整数。 | |
F47B | DICTIGETPREVEQ | i D n - x' i' -1或 0 | 类似于 DICTGETPREVEQ ,但将键解释为有符号的 n -位整数。 | |
F47C | DICTUGETNEXT | i D n - x' i' -1或 0 | 类似于 DICTGETNEXT ,但将字典 D 中的所有键解释为大端无符号的 n -位整数,并计算大于整数 i 的最小键 i' (i 不一定能放入 n 位,也不一定是非负的)。 | |
F47D | DICTUGETNEXTEQ | i D n - x' i' -1或 0 | 类似于 DICTGETNEXTEQ ,但将键解释为无符号的 n -位整数。 | |
F47E | DICTUGETPREV | i D n - x' i' -1或 0 | 类似于 DICTGETPREV ,但将键解释为无符号的 n -位整数。 | |
F47F | DICTUGETPREVEQ | i D n - x' i' -1或 0 | 类似于 DICTGETPREVEQ ,但将键解释为无符号的 n -位整数。 |
GetMin, GetMax, RemoveMin, RemoveMax 操作
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F482 | DICTMIN | D n - x k -1或 0 | 计算字典 D 中的最小键 k (由拥有 n 数据位的切片表示),并返回 k 及其关联的值 x 。 | |
F483 | DICTMINREF | D n - c k -1或 0 | 类似于 DICTMIN ,但返回值中唯一的引用作为cell c 。 | |
F484 | DICTIMIN | D n - x i -1或 0 | 类似于 DICTMIN ,但在假设所有键为大端有符号的 n -位整数的情况下计算最小键 i 。注意,返回的键和值可能与 DICTMIN 和 DICTUMIN 计算出的不同。 | |
F485 | DICTIMINREF | D n - c i -1或 0 | 类似于 DICTIMIN ,但返回值中唯一的引用。 | |
F486 | DICTUMIN | D n - x i -1或 0 | 类似于 DICTMIN ,但以无符号 n -位 整数 i 的形式返回键。 | |
F487 | DICTUMINREF | D n - c i -1或 0 | 类似于 DICTUMIN ,但返回值中唯一的引用。 | |
F48A | DICTMAX | D n - x k -1或 0 | 计算字典 D 中的最大键 k (由拥有 n 数据位的切片表示),并返回 k 及其关联的值 x 。 | |
F48B | DICTMAXREF | D n - c k -1或 0 | 类似于 DICTMAX ,但返回值中唯一的引用。 | |
F48C | DICTIMAX | D n - x i -1或 0 | 类似于 DICTMAX ,但在假设所有键为大端有符号的 n -位整数的情况下计算最大键 i 。注意,返回的键和值可能与 DICTMAX 和 DICTUMAX 计算出的不同。 | |
F48D | DICTIMAXREF | D n - c i -1或 0 | 类似于 DICTIMAX ,但返回值中唯一的引用。 | |
F48E | DICTUMAX | D n - x i -1或 0 | 类似于 DICTMAX ,但以无符号 n -位 整数 i 的形式返回键。 | |
F48F | DICTUMAXREF | D n - c i -1或 0 | 类似于 DICTUMAX ,但返回值中唯一的引用。 | |
F492 | DICTREMMIN | D n - D' x k -1或D 0 | 计算字典 D 中的最小键 k (以n数据位的切片形式表示),从字典中移除 k ,并返回 k 及其关联的值 x 和修改后的字典 D' 。 | |
F493 | DICTREMMINREF | D n - D' c k -1或D 0 | 类似于 DICTREMMIN ,但返回值中唯一的引用作为cell c 。 | |
F494 | DICTIREMMIN | D n - D' x i -1或D 0 | 类似于 DICTREMMIN ,但计算最小键 i ,假设所有键都是大端有符号的n-位整数。请注意,返回的键和值可能与DICTREMMIN 和 DICTUREMMIN 计算的不同。 | |
F495 | DICTIREMMINREF | D n - D' c i -1或D 0 | 类似于 DICTIREMMIN ,但返回值中唯一的引用。 | |
F496 | DICTUREMMIN | D n - D' x i -1或D 0 | 类似于 DICTREMMIN ,但以无符号n-位整数 i 形式返回键。 | |
F497 | DICTUREMMINREF | D n - D' c i -1或D 0 | 类似于 DICTUREMMIN ,但返回值中唯一的引用。 | |
F49A | DICTREMMAX | D n - D' x k -1或D 0 | 计算字典 D 中的最大键 k (以n数据位的切片形式表示),从字典中移除 k ,并返回 k 及其关联的值 x 和修改后的字典 D' 。 | |
F49B | DICTREMMAXREF | D n - D' c k -1或D 0 | 类似于 DICTREMMAX ,但返回值中唯一的引用作为cell c 。 | |
F49C | DICTIREMMAX | D n - D' x i -1或D 0 | 类似于 DICTREMMAX ,但计算最大键 i ,假设所有键都是大端有符号的n-位整数。请注意,返回的键和值可能与DICTREMMAX 和 DICTUREMMAX 计算的不同。 | |
F49D | DICTIREMMAXREF | D n - D' c i -1或D 0 | 类似于 DICTIREMMAX ,但返回值中唯一的引用。 | |
F49E | DICTUREMMAX | D n - D' x i -1或D 0 | 类似于 DICTREMMAX ,但以无符号n-位整数 i 形式返回键。 | |
F49F | DICTUREMMAXREF | D n - D' c i -1或D 0 | 类似于 DICTUREMMAX ,但返回值中唯一的引用。 |
特殊的获取字典和前缀码字典操作以及常量字典
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F4A0 | DICTIGETJMP | i D n - | 类似于 DICTIGET ,但在成功时将 x BLESS 成一个continuation,并随后执行对其的 JMPX 。失败时不执行任何操作。这对于实现 switch /case 结构很有用。 | |
F4A1 | DICTUGETJMP | i D n - | 类似于 DICTIGETJMP ,但执行 DICTUGET 而非 DICTIGET 。 | |
F4A2 | DICTIGETEXEC | i D n - | 类似于 DICTIGETJMP ,但使用 EXECUTE 而非 JMPX 。 | |
F4A3 | DICTUGETEXEC | i D n - | 类似于 DICTUGETJMP ,但使用 EXECUTE 而非 JMPX 。 | |
F4A6_n | [ref] [n] DICTPUSHCONST | - D n | 推送非空常量字典 D (作为Cell^? )和其键长 0 <= n <= 1023 ,存储为指令的一部分。字典本身是从当前continuation的剩余引用中的第一个创建的。通过这种方式,完整的 DICTPUSHCONST 指令可以通过首先序列化 xF4A4_ ,然后是非空字典本身(一个 1 位和一个cell引用),然后是无符号的 10 位整数 n (仿佛通过 STU 10 指令)获得。空字典可以通过 NEWDICT 原语推送。 | 34 |
F4A8 | PFXDICTGETQ | s D n - s' x s'' -1或s 0 | 在前缀码字典中查找切片 s 的唯一前缀,该字典由 Cell^? D 和 0 <= n <= 1023 表示。如果找到,作为 s' 返回 s 的前缀,并作为切片 x 返回相应的值。s 的剩余部分作为切片 s'' 返回。如果 s 的任何前缀不是前缀码字典 D 中的键,则返回未更改的 s 和零标志位以表示失败。 | |
F4A9 | PFXDICTGET | s D n - s' x s'' | 类似于 PFXDICTGET ,但在失败时抛出cell反序列化失败异常。 | |
F4AA | PFXDICTGETJMP | s D n - s' s''或s | 类似于 PFXDICTGETQ ,但成功时将值 x BLESS 成一个continuation,并像执行 JMPX 一样转移控制权。失败时,返回未改变的 s 并继续执行。 | |
F4AB | PFXDICTGETEXEC | s D n - s' s'' | 类似于 PFXDICTGETJMP ,但执行找到的continuation而非跳转它。失败时,抛出cell反序列化异常。 | |
F4AE_n | [ref] [n] PFXDICTCONSTGETJMP [ref] [n] PFXDICTSWITCH | s - s' s''或s | 将 [n] DICTPUSHCONST 和 PFXDICTGETJMP 结合起来,用于 0 <= n <= 1023 。 | |
F4BC | DICTIGETJMPZ | i D n - i或nothing | DICTIGETJMP 的一个变种,在失败时返回索引 i 。 | |
F4BD | DICTUGETJMPZ | i D n - i或nothing | DICTUGETJMP 的一个变种,在失败时返回索引 i 。 | |
F4BE | DICTIGETEXECZ | i D n - i或nothing | DICTIGETEXEC 的一个变种,在失败时返回索引 i 。 | |
F4BF | DICTUGETEXECZ | i D n - i或nothing | DICTUGETEXEC 的一个变种,在失败时返回索引 i 。 |
SubDict 字典操作
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
F4B1 | SUBDICTGET | k l D n - D' | 构建一个由所有以前缀 k (由一个切片表示,其前 0 <= l <= n <= 1023 个数据位用作键)为前缀的字典 D 中的键组成的子字典。这里的 D 是类型为 HashmapE(n,X) 的字典,拥有 n 位的键。成功时,返回同类型 HashmapE(n,X) 的新子字典作为一个切片 D' 。 | |
F4B2 | SUBDICTIGET | x l D n - D' | SUBDICTGET 的变体,前缀由有符号的大端 l -位整数 x 表示,必须满足 l <= 257 。 | |
F4B3 | SUBDICTUGET | x l D n - D' | SUBDICTGET 的变体,前缀由无符号的大端 l -位整数 x 表示,必须满足 l <= 256 。 | |
F4B5 | SUBDICTRPGET | k l D n - D' | 类似于 SUBDICTGET ,但从新字典 D' 的所有键中移除公共前缀 k ,它变为 HashmapE(n-l,X) 类型。 | |
F4B6 | SUBDICTIRPGET | x l D n - D' | SUBDICTRPGET 的变体,前缀由有符号的大端 l -位整数 x 表示,必须满足 l <= 257 。 | |
F4B7 | SUBDICTURPGET | x l D n - D' | SUBDICTRPGET 的变体,前缀由无符号的大端 l -位整数 x 表示,必须满足 l <= 256 。 |