1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-12 19:22:37 +00:00
ton/tolk-tester/tests/no-spaces.tolk
tolk-vm 974d76c5f6
[Tolk] bool type (-1/0 int under the hood)
Comparison operators `== / >= /...` return `bool`.
Logical operators `&& ||` return bool.
Constants `true` and `false` have the `bool` type.
Lots of stdlib functions return `bool`, not `int`.

Operator `!x` supports both `int` and `bool`.
Condition of `if` accepts both `int` and `bool`.
Arithmetic operators are restricted to integers.
Logical `&&` and `||` accept both `bool` and `int`.

No arithmetic operations with bools allowed (only bitwise and logical).
2025-01-15 15:38:47 +03:00

115 lines
2.8 KiB
Text

const int10:int=10;
fun just10(): int { return int10; }
fun eq(v: int): int { return`v`; }
@method_id(101) fun `get_-1` (): int {return-1;}
@method_id(102) fun `get_--1` (): int {return--1;}
@method_id(103) fun `get_---1`(): int {return---1;}
@method_id(104) fun `get_+++1`(): int {return+++1;}
@method_id(105) fun `get_+-+1`(): int {return+-+1;}
global `some()var`:int;
@method_id(110) fun `some_math`(): int {
`some()var`=--6;
return 1*-2*-3*-4*just10()*-5+-`some()var`+--`some()var`---`some()var`;
}
@method_id(111) fun `negative_nums`(a:int):int {
var m$0:int=1;
var m1:int=-(+0x1)*m$0;
return `a`*-1*-(1)*---(1)*+just10()+-`just10`()*m1*-m1+-eq(m1)----0x1;
}
@method_id(112) fun `bitwise~ops`(flags:int):[bool,bool] {
return[
(just10()-3==just10()-(4)--1)|((2==2)&(eq(eq(10)) -3==just10()--13)),
((flags&0xFF)!=0)
];
}
@method_id(113)fun`unary+bitwise-constant`():[int,int,int]{
return [~-~~+-3, ~+3-~9, -(-~+-20-~ 10+3+~38&39)];
}
@method_id(114)fun`unary+bitwize-parametrized`(c3:int, c9:int, c20:int, c10:int, c38:int):[int,int,int]{
return [~-~~+-c3, ~+c3-~`c9`, -(-~+-c20-~c10+c3+~c38&39)];
}
fun add3(a: int, b: int, c: int) { return a+b+c; }
@method_id(115) fun unary_const_check(): [int,int] {
var fst1: int=-1;
var snd1: int=-1;
var trd1: int=+2;
var (fst2,snd2,trd2)=(-1,-1,+2);
return [add3(fst2,snd2,trd2),add3(fst1,snd1,trd1)];
}
fun `load:u32`(mutate self: slice): int {
return self.loadUint(32);
}
@method_id(116) fun `call_~_via_backticks`():[int,int,int,int] {
var b:builder = beginCell().storeUint(1, 32).storeUint(2, 32).storeUint(3, 32).storeUint(4, 32);
var `cs`:slice = b.endCell().beginParse();
val one:int=`cs`.`loadUint`(32);
val (two:int,three:int) = (`cs`.`loadUint`(32), cs.`load:u32`());
val four:int = cs.`load:u32`();
return [one,two,three,four];
}
fun`main`(){}
/**
method_id | in | out
@testcase | 101 | | -1
@testcase | 102 | | 1
@testcase | 103 | | -1
@testcase | 104 | | 1
@testcase | 105 | | -1
@testcase | 110 | | 1194
@testcase | 111 | -1 | 22
@testcase | 112 | 0 | [ -1 0 ]
@testcase | 113 | | [ -4 6 -4 ]
@testcase | 114 | 3 9 20 10 38 | [ -4 6 -4 ]
@testcase | 115 | | [ 0 0 ]
@testcase | 116 | | [ 1 2 3 4 ]
@fif_codegen
"""
get_+-+1 PROC:<{
//
-1 PUSHINT
}>
"""
@fif_codegen
"""
unary+bitwise-constant PROC:<{
//
-4 PUSHINT
6 PUSHINT
-4 PUSHINT
TRIPLE
}>
"""
@fif_codegen
"""
unary_const_check PROC:<{
//
-1 PUSHINT // fst1=-1
DUP // fst1=-1 snd1=-1
2 PUSHINT // fst1=-1 snd1=-1 trd1=2
s1 s1 s0 PUSH3 // fst1=-1 snd1=-1 trd1=2 fst2=-1 snd2=-1 trd2=2
add3 CALLDICT // fst1=-1 snd1=-1 trd1=2 _13
3 -ROLL // _13 fst1=-1 snd1=-1 trd1=2
add3 CALLDICT // _13 _14
PAIR // _12
}>
"""
*/