mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-12 19:22:37 +00:00
[FunC] Add builtin functions to stdlib.fc
Note, that I have not added all builtin functions. I filtered out strange and actually unused in practice, like "int_at()" and similar, or "run_method0()" and similar. (Probably, they should be dropped off even from builtins) Also, I've modified some stdlib.fc legacy tests just to ensure that a resulting hash doesn't change.
This commit is contained in:
parent
cdef8302b0
commit
de570873d7
10 changed files with 307 additions and 101 deletions
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
// () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
// (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
// (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
// int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
// int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
// (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
// slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
// builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
// builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
// () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
// (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
// (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
// int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
// int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
// (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
// slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
// builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
// builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -108,9 +125,9 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
|
||||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -109,8 +126,8 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -21,12 +21,16 @@ forall X -> X first(tuple t) pure asm "FIRST";
|
|||
forall X -> X second(tuple t) pure asm "SECOND";
|
||||
forall X -> X third(tuple t) pure asm "THIRD";
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
forall X, Y -> Y pair_second([X, Y] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> X triple_first([X, Y, Z] p) pure asm "FIRST";
|
||||
forall X, Y, Z -> Y triple_second([X, Y, Z] p) pure asm "SECOND";
|
||||
forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
int now() pure asm "NOW";
|
||||
|
@ -47,8 +51,15 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
(int, int, int, int) compute_data_size?(cell c, int max_cells) pure asm "CDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
(int, int, int, int) slice_compute_data_size?(cell c, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
;; () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
() throw(int excno) builtin;
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
cell get_data() pure asm "c4 PUSH";
|
||||
|
@ -66,17 +77,23 @@ int min(int x, int y) pure asm "MIN";
|
|||
int max(int x, int y) pure asm "MAX";
|
||||
(int, int) minmax(int x, int y) pure asm "MINMAX";
|
||||
int abs(int x) pure asm "ABS";
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
slice begin_parse(cell c) pure asm "CTOS";
|
||||
() end_parse(slice s) asm "ENDS";
|
||||
(slice, cell) load_ref(slice s) pure asm( -> 1 0) "LDREF";
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
;; (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
;; (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
;; int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
;; int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
;; (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
;; slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
slice skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
(slice, ()) ~skip_bits(slice s, int len) pure asm "SDSKIPFIRST";
|
||||
|
@ -108,9 +125,9 @@ int builder_depth(builder b) pure asm "BDEPTH";
|
|||
|
||||
builder begin_cell() pure asm "NEWC";
|
||||
cell end_cell(builder b) pure asm "ENDC";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
;; builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
;; builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
builder store_grams(builder b, int x) pure asm "STGRAMS";
|
||||
builder store_dict(builder b, cell c) pure asm(c b) "STDICT";
|
||||
|
|
|
@ -93,6 +93,9 @@ forall X -> X third(tuple t) pure asm "THIRD";
|
|||
/// Returns the fourth element of a tuple (with unknown element types).
|
||||
forall X -> X fourth(tuple t) pure asm "3 INDEX";
|
||||
|
||||
/// Returns the [`index`]-th element of tuple [`t`].
|
||||
forall X -> X at(tuple t, int index) pure builtin;
|
||||
|
||||
/// Returns the first element of a pair tuple.
|
||||
forall X, Y -> X pair_first([X, Y] p) pure asm "FIRST";
|
||||
|
||||
|
@ -114,7 +117,16 @@ forall X, Y, Z -> Z triple_third([X, Y, Z] p) pure asm "THIRD";
|
|||
/// So `null` can actually have any atomic type.
|
||||
forall X -> X null() pure asm "PUSHNULL";
|
||||
|
||||
/// Moves a variable [x] to the top of the stack
|
||||
/// Checks whether the argument is null.
|
||||
forall X -> int null?(X x) pure builtin;
|
||||
|
||||
/// Moves a variable [x] to the top of the stack.
|
||||
forall X -> X touch(X x) pure builtin;
|
||||
|
||||
/// Moves a variable [x] to the top of the stack.
|
||||
forall X -> (X, ()) ~touch(X x) pure builtin;
|
||||
|
||||
/// Mark a variable as used, such that the code which produced it won't be deleted even if it is not impure.
|
||||
forall X -> (X, ()) ~impure_touch(X x) asm "NOP";
|
||||
|
||||
|
||||
|
@ -199,13 +211,38 @@ int check_data_signature(slice data, slice signature, int public_key) pure asm "
|
|||
/// however, the data bits and the cell references of [s] are accounted for in `y` and `z`.
|
||||
(int, int, int, int) slice_compute_data_size?(slice s, int max_cells) pure asm "SDATASIZEQ NULLSWAPIFNOT2 NULLSWAPIFNOT";
|
||||
|
||||
/// Throws an exception with exit_code excno if cond is not 0 (commented since implemented in compilator)
|
||||
// () throw_if(int excno, int cond) asm "THROWARGIF";
|
||||
/// Throws exception [`excno`] with parameter zero.
|
||||
/// In other words, it transfers control to the continuation in `c2`,
|
||||
/// pushing `0` and [`excno`] into it's stack, and discarding the old stack altogether.
|
||||
() throw(int excno) builtin;
|
||||
|
||||
/// Throws exception [`excno`] with parameter zero only if [`cond`] != `0`.
|
||||
() throw_if(int excno, int cond) builtin;
|
||||
|
||||
/// Throws exception [`excno`] with parameter zero only if [`cond`] == `0`.
|
||||
() throw_unless(int excno, int cond) builtin;
|
||||
|
||||
/// Throws exception [`excno`] with parameter [`x`],
|
||||
/// by copying [`x`] and [`excno`] into the stack of `c2` and transferring control to `c2`.
|
||||
forall X -> () throw_arg(X x, int excno) builtin;
|
||||
|
||||
/// Throws exception [`excno`] with parameter [`x`] only if [`cond`] != `0`.
|
||||
forall X -> () throw_arg_if(X x, int excno, int cond) builtin;
|
||||
|
||||
/// Throws exception [`excno`] with parameter [`x`] only if [`cond`] == `0`.
|
||||
forall X -> () throw_arg_unless(X x, int excno, int cond) builtin;
|
||||
|
||||
/***
|
||||
# Debug primitives
|
||||
Only works for local TVM execution with debug level verbosity
|
||||
*/
|
||||
|
||||
/// Dump a variable [x] to the debug log.
|
||||
forall X -> (X, ()) ~dump(X x) builtin;
|
||||
|
||||
/// Dump a string [x] to the debug log.
|
||||
forall X -> (X, ()) ~strdump(X x) builtin;
|
||||
|
||||
/// Dumps the stack (at most the top 255 values) and shows the total stack depth.
|
||||
() dump_stack() asm "DUMPSTK";
|
||||
|
||||
|
@ -277,6 +314,25 @@ int max(int x, int y) pure asm "MAX";
|
|||
/// Computes the absolute value of an integer [x].
|
||||
int abs(int x) pure asm "ABS";
|
||||
|
||||
/// Computes the quotient and remainder of [x] / [y]. Example: divmod(112,3) = (37,1)
|
||||
(int, int) divmod(int x, int y) pure builtin;
|
||||
|
||||
/// Computes the remainder and quotient of [x] / [y]. Example: moddiv(112,3) = (1,37)
|
||||
(int, int) moddiv(int x, int y) pure builtin;
|
||||
|
||||
/// Computes multiple-then-divide: floor([x] * [y] / [z]).
|
||||
/// The intermediate result is stored in a 513-bit integer to prevent precision loss.
|
||||
int muldiv(int x, int y, int z) pure builtin;
|
||||
|
||||
/// Similar to `muldiv`, but rounds the result: round([x] * [y] / [z]).
|
||||
int muldivr(int x, int y, int z) pure builtin;
|
||||
|
||||
/// Similar to `muldiv`, but ceils the result: ceil([x] * [y] / [z]).
|
||||
int muldivc(int x, int y, int z) pure builtin;
|
||||
|
||||
/// Computes the quotient and remainder of ([x] * [y] / [z]). Example: muldivmod(112,3,10) = (33,6)
|
||||
(int, int) muldivmod(int x, int y, int z) pure builtin;
|
||||
|
||||
/*
|
||||
# Slice primitives
|
||||
|
||||
|
@ -305,25 +361,23 @@ slice begin_parse(cell c) pure asm "CTOS";
|
|||
/// Preloads the first reference from the slice.
|
||||
cell preload_ref(slice s) pure asm "PLDREF";
|
||||
|
||||
/* Functions below are commented because are implemented on compilator level for optimisation */
|
||||
|
||||
/// Loads a signed [len]-bit integer from a slice [s].
|
||||
// (slice, int) ~load_int(slice s, int len) pure asm(s len -> 1 0) "LDIX";
|
||||
(slice, int) load_int(slice s, int len) pure builtin;
|
||||
|
||||
/// Loads an unsigned [len]-bit integer from a slice [s].
|
||||
// (slice, int) ~load_uint(slice s, int len) pure asm( -> 1 0) "LDUX";
|
||||
(slice, int) load_uint(slice s, int len) pure builtin;
|
||||
|
||||
/// Preloads a signed [len]-bit integer from a slice [s].
|
||||
// int preload_int(slice s, int len) pure asm "PLDIX";
|
||||
int preload_int(slice s, int len) pure builtin;
|
||||
|
||||
/// Preloads an unsigned [len]-bit integer from a slice [s].
|
||||
// int preload_uint(slice s, int len) pure asm "PLDUX";
|
||||
int preload_uint(slice s, int len) pure builtin;
|
||||
|
||||
/// Loads the first `0 ≤ len ≤ 1023` bits from slice [s] into a separate `slice s''`.
|
||||
// (slice, slice) load_bits(slice s, int len) pure asm(s len -> 1 0) "LDSLICEX";
|
||||
/// Loads the first `0 ≤ len ≤ 1023` bits from slice [s] into a separate slice `s''`.
|
||||
(slice, slice) load_bits(slice s, int len) pure builtin;
|
||||
|
||||
/// Preloads the first `0 ≤ len ≤ 1023` bits from slice [s] into a separate `slice s''`.
|
||||
// slice preload_bits(slice s, int len) pure asm "PLDSLICEX";
|
||||
/// Preloads the first `0 ≤ len ≤ 1023` bits from slice [s] into a separate slice `s''`.
|
||||
slice preload_bits(slice s, int len) pure builtin;
|
||||
|
||||
/// Loads serialized amount of TonCoins (any unsigned integer up to `2^120 - 1`).
|
||||
(slice, int) load_grams(slice s) pure asm( -> 1 0) "LDGRAMS";
|
||||
|
@ -432,13 +486,12 @@ cell end_cell(builder b) pure asm "ENDC";
|
|||
builder store_ref(builder b, cell c) pure asm(c b) "STREF";
|
||||
|
||||
/// Stores an unsigned [len]-bit integer `x` into `b` for `0 ≤ len ≤ 256`.
|
||||
// builder store_uint(builder b, int x, int len) pure asm(x b len) "STUX";
|
||||
builder store_uint(builder b, int x, int len) pure builtin;
|
||||
|
||||
/// Stores a signed [len]-bit integer `x` into `b` for` 0 ≤ len ≤ 257`.
|
||||
// builder store_int(builder b, int x, int len) pure asm(x b len) "STIX";
|
||||
/// Stores a signed [len]-bit integer `x` into `b` for `0 ≤ len ≤ 257`.
|
||||
builder store_int(builder b, int x, int len) pure builtin;
|
||||
|
||||
|
||||
/// Stores `slice` [s] into `builder` [b]
|
||||
/// Stores `slice` [s] into `builder` [b].
|
||||
builder store_slice(builder b, slice s) pure asm "STSLICER";
|
||||
|
||||
/// Stores (serializes) an integer [x] in the range `0..2^120 − 1` into `builder` [b].
|
||||
|
|
Loading…
Reference in a new issue