mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
[Tolk] Completely rework stdlib: multiple files and renaming
- split stdlib.tolk into multiple files (tolk-stdlib/ folder) (the "core" common.tolk is auto-imported, the rest are needed to be explicitly imported like "@stdlib/tvm-dicts.tolk") - all functions were renamed to long and clear names - new naming is camelCase
This commit is contained in:
parent
e2edadba92
commit
12ff28ac94
48 changed files with 2966 additions and 2458 deletions
38
crypto/smartcont/tolk-stdlib/lisp-lists.tolk
Normal file
38
crypto/smartcont/tolk-stdlib/lisp-lists.tolk
Normal file
|
@ -0,0 +1,38 @@
|
|||
// A part of standard library for Tolk
|
||||
tolk 0.6
|
||||
|
||||
/**
|
||||
Lisp-style lists are nested 2-elements tuples: `(1, (2, (3, null)))` represents list `[1, 2, 3]`.
|
||||
Elements of a list can be of different types.
|
||||
Empty list is conventionally represented as TVM `null` value.
|
||||
*/
|
||||
|
||||
@pure
|
||||
fun createEmptyList(): tuple
|
||||
asm "PUSHNULL";
|
||||
|
||||
/// Adds an element to the beginning of lisp-style list.
|
||||
/// Note, that it does not mutate the list: instead, it returns a new one (it's a lisp pattern).
|
||||
@pure
|
||||
fun listPrepend<X>(head: X, tail: tuple): tuple
|
||||
asm "CONS";
|
||||
|
||||
/// Extracts the head and the tail of lisp-style list.
|
||||
@pure
|
||||
fun listSplit<X>(list: tuple): (X, tuple)
|
||||
asm "UNCONS";
|
||||
|
||||
/// Extracts the tail and the head of lisp-style list.
|
||||
@pure
|
||||
fun ~listNext<X>(list: tuple): (tuple, X)
|
||||
asm( -> 1 0) "UNCONS";
|
||||
|
||||
/// Returns the head of lisp-style list.
|
||||
@pure
|
||||
fun listGetHead<X>(list: tuple): X
|
||||
asm "CAR";
|
||||
|
||||
/// Returns the tail of lisp-style list.
|
||||
@pure
|
||||
fun listGetTail(list: tuple): tuple
|
||||
asm "CDR";
|
Loading…
Add table
Add a link
Reference in a new issue