Ton

Форк
0
208 строк · 13.6 Кб
1
;; Standard library for funC
2
;;
3

4
forall X -> tuple cons(X head, tuple tail) asm "CONS";
5
forall X -> (X, tuple) uncons(tuple list) asm "UNCONS";
6
forall X -> (tuple, X) list_next(tuple list) asm( -> 1 0) "UNCONS";
7
forall X -> X car(tuple list) asm "CAR";
8
tuple cdr(tuple list) asm "CDR";
9
tuple empty_tuple() asm "NIL";
10
forall X -> tuple tpush(tuple t, X value) asm "TPUSH";
11
forall X -> (tuple, ()) ~tpush(tuple t, X value) asm "TPUSH";
12
forall X -> [X] single(X x) asm "SINGLE";
13
forall X -> X unsingle([X] t) asm "UNSINGLE";
14
forall X, Y -> [X, Y] pair(X x, Y y) asm "PAIR";
15
forall X, Y -> (X, Y) unpair([X, Y] t) asm "UNPAIR";
16
forall X, Y, Z -> [X, Y, Z] triple(X x, Y y, Z z) asm "TRIPLE";
17
forall X, Y, Z -> (X, Y, Z) untriple([X, Y, Z] t) asm "UNTRIPLE";
18
forall X, Y, Z, W -> [X, Y, Z, W] tuple4(X x, Y y, Z z, W w) asm "4 TUPLE";
19
forall X, Y, Z, W -> (X, Y, Z, W) untuple4([X, Y, Z, W] t) asm "4 UNTUPLE";
20
forall X -> X first(tuple t) asm "FIRST";
21
forall X -> X second(tuple t) asm "SECOND";
22
forall X -> X third(tuple t) asm "THIRD";
23
forall X -> X fourth(tuple t) asm "3 INDEX";
24
forall X, Y -> X pair_first([X, Y] p) asm "FIRST";
25
forall X, Y -> Y pair_second([X, Y] p) asm "SECOND";
26
forall X, Y, Z -> X triple_first([X, Y, Z] p) asm "FIRST";
27
forall X, Y, Z -> Y triple_second([X, Y, Z] p) asm "SECOND";
28
forall X, Y, Z -> Z triple_third([X, Y, Z] p) asm "THIRD";
29
forall X -> X null() asm "PUSHNULL";
30
forall X -> (X, ()) ~impure_touch(X x) impure asm "NOP";
31

32
int now() asm "NOW";
33
slice my_address() asm "MYADDR";
34
[int, cell] get_balance() asm "BALANCE";
35
int cur_lt() asm "LTIME";
36
int block_lt() asm "BLOCKLT";
37

38
int cell_hash(cell c) asm "HASHCU";
39
int slice_hash(slice s) asm "HASHSU";
40
int string_hash(slice s) asm "SHA256U";
41

42
int check_signature(int hash, slice signature, int public_key) asm "CHKSIGNU";
43
int check_data_signature(slice data, slice signature, int public_key) asm "CHKSIGNS";
44

45
(int, int, int) compute_data_size(cell c, int max_cells) impure asm "CDATASIZE";
46
(int, int, int) slice_compute_data_size(slice s, int max_cells) impure asm "SDATASIZE";
47
(int, int, int, int) compute_data_size?(cell c, int max_cells) asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
48
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
49

50
;; () throw_if(int excno, int cond) impure asm "THROWARGIF";
51

52
() dump_stack() impure asm "DUMPSTK";
53

54
cell get_data() asm "c4 PUSH";
55
() set_data(cell c) impure asm "c4 POP";
56
cont get_c3() impure asm "c3 PUSH";
57
() set_c3(cont c) impure asm "c3 POP";
58
cont bless(slice s) impure asm "BLESS";
59

60
() accept_message() impure asm "ACCEPT";
61
() set_gas_limit(int limit) impure asm "SETGASLIMIT";
62
() commit() impure asm "COMMIT";
63
() buy_gas(int gram) impure asm "BUYGAS";
64

65
int min(int x, int y) asm "MIN";
66
int max(int x, int y) asm "MAX";
67
(int, int) minmax(int x, int y) asm "MINMAX";
68
int abs(int x) asm "ABS";
69

70
slice begin_parse(cell c) asm "CTOS";
71
() end_parse(slice s) impure asm "ENDS";
72
(slice, cell) load_ref(slice s) asm( -> 1 0) "LDREF";
73
cell preload_ref(slice s) asm "PLDREF";
74
;; (slice, int) ~load_int(slice s, int len) asm(s len -> 1 0) "LDIX";
75
;; (slice, int) ~load_uint(slice s, int len) asm( -> 1 0) "LDUX";
76
;; int preload_int(slice s, int len) asm "PLDIX";
77
;; int preload_uint(slice s, int len) asm "PLDUX";
78
;; (slice, slice) load_bits(slice s, int len) asm(s len -> 1 0) "LDSLICEX";
79
;; slice preload_bits(slice s, int len) asm "PLDSLICEX";
80
(slice, int) load_grams(slice s) asm( -> 1 0) "LDGRAMS";
81
slice skip_bits(slice s, int len) asm "SDSKIPFIRST";
82
(slice, ()) ~skip_bits(slice s, int len) asm "SDSKIPFIRST";
83
slice first_bits(slice s, int len) asm "SDCUTFIRST";
84
slice skip_last_bits(slice s, int len) asm "SDSKIPLAST";
85
(slice, ()) ~skip_last_bits(slice s, int len) asm "SDSKIPLAST";
86
slice slice_last(slice s, int len) asm "SDCUTLAST";
87
(slice, cell) load_dict(slice s) asm( -> 1 0) "LDDICT";
88
cell preload_dict(slice s) asm "PLDDICT";
89
slice skip_dict(slice s) asm "SKIPDICT";
90

91
(slice, cell) load_maybe_ref(slice s) asm( -> 1 0) "LDOPTREF";
92
cell preload_maybe_ref(slice s) asm "PLDOPTREF";
93
builder store_maybe_ref(builder b, cell c) asm(c b) "STOPTREF";
94

95
int cell_depth(cell c) asm "CDEPTH";
96

97
int slice_refs(slice s) asm "SREFS";
98
int slice_bits(slice s) asm "SBITS";
99
(int, int) slice_bits_refs(slice s) asm "SBITREFS";
100
int slice_empty?(slice s) asm "SEMPTY";
101
int slice_data_empty?(slice s) asm "SDEMPTY";
102
int slice_refs_empty?(slice s) asm "SREMPTY";
103
int slice_depth(slice s) asm "SDEPTH";
104

105
int builder_refs(builder b) asm "BREFS";
106
int builder_bits(builder b) asm "BBITS";
107
int builder_depth(builder b) asm "BDEPTH";
108

109
builder begin_cell() asm "NEWC";
110
cell end_cell(builder b) asm "ENDC";
111
builder store_ref(builder b, cell c) asm(c b) "STREF";
112
;; builder store_uint(builder b, int x, int len) asm(x b len) "STUX";
113
;; builder store_int(builder b, int x, int len) asm(x b len) "STIX";
114
builder store_slice(builder b, slice s) asm "STSLICER";
115
builder store_grams(builder b, int x) asm "STGRAMS";
116
builder store_dict(builder b, cell c) asm(c b) "STDICT";
117

118
(slice, slice) load_msg_addr(slice s) asm( -> 1 0) "LDMSGADDR";
119
tuple parse_addr(slice s) asm "PARSEMSGADDR";
120
(int, int) parse_std_addr(slice s) asm "REWRITESTDADDR";
121
(int, slice) parse_var_addr(slice s) asm "REWRITEVARADDR";
122

123
cell idict_set_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTISETREF";
124
(cell, ()) ~idict_set_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTISETREF";
125
cell udict_set_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTUSETREF";
126
(cell, ()) ~udict_set_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTUSETREF";
127
cell idict_get_ref(cell dict, int key_len, int index) asm(index dict key_len) "DICTIGETOPTREF";
128
(cell, int) idict_get_ref?(cell dict, int key_len, int index) asm(index dict key_len) "DICTIGETREF" "NULLSWAPIFNOT";
129
(cell, int) udict_get_ref?(cell dict, int key_len, int index) asm(index dict key_len) "DICTUGETREF" "NULLSWAPIFNOT";
130
(cell, cell) idict_set_get_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTISETGETOPTREF";
131
(cell, cell) udict_set_get_ref(cell dict, int key_len, int index, cell value) asm(value index dict key_len) "DICTUSETGETOPTREF";
132
(cell, int) idict_delete?(cell dict, int key_len, int index) asm(index dict key_len) "DICTIDEL";
133
(cell, int) udict_delete?(cell dict, int key_len, int index) asm(index dict key_len) "DICTUDEL";
134
(slice, int) idict_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTIGET" "NULLSWAPIFNOT";
135
(slice, int) udict_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTUGET" "NULLSWAPIFNOT";
136
(cell, slice, int) idict_delete_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTIDELGET" "NULLSWAPIFNOT";
137
(cell, slice, int) udict_delete_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTUDELGET" "NULLSWAPIFNOT";
138
(cell, (slice, int)) ~idict_delete_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTIDELGET" "NULLSWAPIFNOT";
139
(cell, (slice, int)) ~udict_delete_get?(cell dict, int key_len, int index) asm(index dict key_len) "DICTUDELGET" "NULLSWAPIFNOT";
140
cell udict_set(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTUSET";
141
(cell, ()) ~udict_set(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTUSET";
142
cell idict_set(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTISET";
143
(cell, ()) ~idict_set(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTISET";
144
cell dict_set(cell dict, int key_len, slice index, slice value) asm(value index dict key_len) "DICTSET";
145
(cell, ()) ~dict_set(cell dict, int key_len, slice index, slice value) asm(value index dict key_len) "DICTSET";
146
(cell, int) udict_add?(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTUADD";
147
(cell, int) udict_replace?(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTUREPLACE";
148
(cell, int) idict_add?(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTIADD";
149
(cell, int) idict_replace?(cell dict, int key_len, int index, slice value) asm(value index dict key_len) "DICTIREPLACE";
150
cell udict_set_builder(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTUSETB";
151
(cell, ()) ~udict_set_builder(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTUSETB";
152
cell idict_set_builder(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTISETB";
153
(cell, ()) ~idict_set_builder(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTISETB";
154
cell dict_set_builder(cell dict, int key_len, slice index, builder value) asm(value index dict key_len) "DICTSETB";
155
(cell, ()) ~dict_set_builder(cell dict, int key_len, slice index, builder value) asm(value index dict key_len) "DICTSETB";
156
(cell, int) udict_add_builder?(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTUADDB";
157
(cell, int) udict_replace_builder?(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTUREPLACEB";
158
(cell, int) idict_add_builder?(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTIADDB";
159
(cell, int) idict_replace_builder?(cell dict, int key_len, int index, builder value) asm(value index dict key_len) "DICTIREPLACEB";
160
(cell, int, slice, int) udict_delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTUREMMIN" "NULLSWAPIFNOT2";
161
(cell, (int, slice, int)) ~udict::delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTUREMMIN" "NULLSWAPIFNOT2";
162
(cell, int, slice, int) idict_delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTIREMMIN" "NULLSWAPIFNOT2";
163
(cell, (int, slice, int)) ~idict::delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTIREMMIN" "NULLSWAPIFNOT2";
164
(cell, slice, slice, int) dict_delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTREMMIN" "NULLSWAPIFNOT2";
165
(cell, (slice, slice, int)) ~dict::delete_get_min(cell dict, int key_len) asm(-> 0 2 1 3) "DICTREMMIN" "NULLSWAPIFNOT2";
166
(cell, int, slice, int) udict_delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTUREMMAX" "NULLSWAPIFNOT2";
167
(cell, (int, slice, int)) ~udict::delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTUREMMAX" "NULLSWAPIFNOT2";
168
(cell, int, slice, int) idict_delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTIREMMAX" "NULLSWAPIFNOT2";
169
(cell, (int, slice, int)) ~idict::delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTIREMMAX" "NULLSWAPIFNOT2";
170
(cell, slice, slice, int) dict_delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTREMMAX" "NULLSWAPIFNOT2";
171
(cell, (slice, slice, int)) ~dict::delete_get_max(cell dict, int key_len) asm(-> 0 2 1 3) "DICTREMMAX" "NULLSWAPIFNOT2";
172
(int, slice, int) udict_get_min?(cell dict, int key_len) asm (-> 1 0 2) "DICTUMIN" "NULLSWAPIFNOT2";
173
(int, slice, int) udict_get_max?(cell dict, int key_len) asm (-> 1 0 2) "DICTUMAX" "NULLSWAPIFNOT2";
174
(int, cell, int) udict_get_min_ref?(cell dict, int key_len) asm (-> 1 0 2) "DICTUMINREF" "NULLSWAPIFNOT2";
175
(int, cell, int) udict_get_max_ref?(cell dict, int key_len) asm (-> 1 0 2) "DICTUMAXREF" "NULLSWAPIFNOT2";
176
(int, slice, int) idict_get_min?(cell dict, int key_len) asm (-> 1 0 2) "DICTIMIN" "NULLSWAPIFNOT2";
177
(int, slice, int) idict_get_max?(cell dict, int key_len) asm (-> 1 0 2) "DICTIMAX" "NULLSWAPIFNOT2";
178
(int, cell, int) idict_get_min_ref?(cell dict, int key_len) asm (-> 1 0 2) "DICTIMINREF" "NULLSWAPIFNOT2";
179
(int, cell, int) idict_get_max_ref?(cell dict, int key_len) asm (-> 1 0 2) "DICTIMAXREF" "NULLSWAPIFNOT2";
180
(int, slice, int) udict_get_next?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETNEXT" "NULLSWAPIFNOT2";
181
(int, slice, int) udict_get_nexteq?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETNEXTEQ" "NULLSWAPIFNOT2";
182
(int, slice, int) udict_get_prev?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETPREV" "NULLSWAPIFNOT2";
183
(int, slice, int) udict_get_preveq?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTUGETPREVEQ" "NULLSWAPIFNOT2";
184
(int, slice, int) idict_get_next?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETNEXT" "NULLSWAPIFNOT2";
185
(int, slice, int) idict_get_nexteq?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETNEXTEQ" "NULLSWAPIFNOT2";
186
(int, slice, int) idict_get_prev?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETPREV" "NULLSWAPIFNOT2";
187
(int, slice, int) idict_get_preveq?(cell dict, int key_len, int pivot) asm(pivot dict key_len -> 1 0 2) "DICTIGETPREVEQ" "NULLSWAPIFNOT2";
188
cell new_dict() asm "NEWDICT";
189
int dict_empty?(cell c) asm "DICTEMPTY";
190

191
(slice, slice, slice, int) pfxdict_get?(cell dict, int key_len, slice key) asm(key dict key_len) "PFXDICTGETQ" "NULLSWAPIFNOT2";
192
(cell, int) pfxdict_set?(cell dict, int key_len, slice key, slice value) asm(value key dict key_len) "PFXDICTSET";
193
(cell, int) pfxdict_delete?(cell dict, int key_len, slice key) asm(key dict key_len) "PFXDICTDEL";
194

195
cell config_param(int x) asm "CONFIGOPTPARAM";
196
int cell_null?(cell c) asm "ISNULL";
197

198
() raw_reserve(int amount, int mode) impure asm "RAWRESERVE";
199
() raw_reserve_extra(int amount, cell extra_amount, int mode) impure asm "RAWRESERVEX";
200
() send_raw_message(cell msg, int mode) impure asm "SENDRAWMSG";
201
() set_code(cell new_code) impure asm "SETCODE";
202

203
int random() impure asm "RANDU256";
204
int rand(int range) impure asm "RAND";
205
int get_seed() impure asm "RANDSEED";
206
int set_seed() impure asm "SETRAND";
207
() randomize(int x) impure asm "ADDRAND";
208
() randomize_lt() impure asm "LTIME" "ADDRAND";
209

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.