字典操作原语
大部分字典操作的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 | STDICTSTOPTREF | D b - b' | 将字典 D 存入构建器 b,返回结果 构建器 b'。换言之,如果 D 是一个cell,执行 STONE 和 STREF;如果 D 是 Null,执行 NIP 和 STZERO;否则抛出类型检查异常。 | 26 |
F401 | SKIPDICTSKIPOPTREF | 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 | LDDICTLDOPTREF | s - D s' | 从切片 s中加载(解析)字典 D,并将 s的剩余部分作为 s' 返回。可应用于字典或任意 (^Y)? 类型的值。 | 26 |
F405 | PLDDICTPLDOPTREF | 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。 |