mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-15 04:32:21 +00:00
224 lines
5.3 KiB
Text
224 lines
5.3 KiB
Text
fun extractFromTypedTuple(params: [int]) {
|
|
var [payload: int] = params;
|
|
return payload + 10;
|
|
}
|
|
|
|
@method_id(101)
|
|
fun test101(x: int) {
|
|
var params = [x];
|
|
return extractFromTypedTuple(params);
|
|
}
|
|
|
|
fun autoInferIntNull(x: int) {
|
|
if (x > 10) { return null; }
|
|
return x;
|
|
}
|
|
|
|
fun typesAsIdentifiers(builder: builder) {
|
|
var int = 1;
|
|
var cell = builder.endCell();
|
|
var slice = cell.beginParse();
|
|
{
|
|
var cell: cell = cell;
|
|
var tuple: tuple = createEmptyTuple();
|
|
var bool: bool = tuple.tupleAt<int>(0) > 0;
|
|
}
|
|
return int;
|
|
}
|
|
|
|
global callOrder: tuple;
|
|
|
|
fun getTensor_12() {
|
|
callOrder.tuplePush(100);
|
|
return (1, 2);
|
|
}
|
|
fun getTensor_1X(x: int) {
|
|
callOrder.tuplePush(101);
|
|
return (1, x);
|
|
}
|
|
fun getTuple_12() {
|
|
callOrder.tuplePush(110);
|
|
return [1, 2];
|
|
}
|
|
fun getTuple_1X(x: int) {
|
|
callOrder.tuplePush(111);
|
|
return [1, x];
|
|
}
|
|
fun getUntypedTuple_12() {
|
|
callOrder.tuplePush(120);
|
|
var t = createEmptyTuple(); t.tuplePush(1); t.tuplePush(2);
|
|
return t;
|
|
}
|
|
fun getUntypedTuple_1X(x: int) {
|
|
callOrder.tuplePush(121);
|
|
var t = createEmptyTuple(); t.tuplePush(1); t.tuplePush(x);
|
|
return t;
|
|
}
|
|
fun getIntValue5() {
|
|
callOrder.tuplePush(10);
|
|
return 5;
|
|
}
|
|
fun getIntValueX(x: int) {
|
|
callOrder.tuplePush(11);
|
|
return x;
|
|
}
|
|
|
|
@method_id(102)
|
|
fun test102() {
|
|
callOrder = createEmptyTuple();
|
|
var x = 0;
|
|
getTensor_12().0 = getIntValue5();
|
|
getTensor_1X(5).1 = getIntValue5();
|
|
getTensor_1X(x = 10).0 = getIntValueX(x);
|
|
return (callOrder, x);
|
|
}
|
|
|
|
@method_id(103)
|
|
fun test103() {
|
|
callOrder = createEmptyTuple();
|
|
var x = 0;
|
|
getTuple_12().0 = getIntValue5();
|
|
getTuple_1X(5).1 = getIntValue5();
|
|
getTuple_1X(x = 10).0 = getIntValueX(x);
|
|
return (callOrder, x);
|
|
}
|
|
|
|
@method_id(104)
|
|
fun test104() {
|
|
callOrder = createEmptyTuple();
|
|
var x = 0;
|
|
getUntypedTuple_12().0 = getIntValue5();
|
|
getUntypedTuple_1X(5).1 = getIntValue5();
|
|
getUntypedTuple_1X(x = 10).0 = getIntValueX(x);
|
|
return (callOrder, x);
|
|
}
|
|
|
|
@method_id(105)
|
|
fun test105() {
|
|
callOrder = createEmptyTuple();
|
|
getTensor_12().0 = getTensor_1X(getIntValue5()).1 = getIntValueX(getTensor_12().1);
|
|
return callOrder;
|
|
}
|
|
|
|
@method_id(106)
|
|
fun test106() {
|
|
callOrder = createEmptyTuple();
|
|
getTuple_12().0 = getTuple_1X(getIntValue5()).1 = getIntValueX(getTuple_12().1);
|
|
return callOrder;
|
|
}
|
|
|
|
global t107: (int, int);
|
|
|
|
@method_id(107)
|
|
fun test107() {
|
|
((t107 = (1, 2)).0, (t107 = (3, 4)).1) = (5, 6);
|
|
return t107;
|
|
}
|
|
|
|
global g108: int;
|
|
fun assertEq(a: int, b: int) {
|
|
assert(a == b, 10);
|
|
return b;
|
|
}
|
|
|
|
@method_id(108)
|
|
fun test108() {
|
|
callOrder = createEmptyTuple();
|
|
g108 = 0;
|
|
getTensor_1X(g108 = 8).1 = assertEq(g108, 8);
|
|
return (callOrder, g108);
|
|
}
|
|
|
|
@method_id(109)
|
|
fun test109() {
|
|
callOrder = createEmptyTuple();
|
|
var x = 0;
|
|
[getTuple_12().0, getTuple_1X(x = getIntValue5()).1, getTuple_1X(x += 10).0] = [getIntValue5(), getIntValue5(), getIntValueX(x)];
|
|
return (callOrder, x);
|
|
}
|
|
|
|
global g110: int;
|
|
global t110: (int, int);
|
|
|
|
@method_id(110)
|
|
fun test110() {
|
|
callOrder = createEmptyTuple();
|
|
var xy = [0, 0];
|
|
[xy.0, getTuple_1X(g110 = 8).0] = [g110 += 5, getIntValueX(g110 += 10)];
|
|
[xy.1, getTuple_1X((t110 = (8, 9)).0).1] = [t110.0 += 5, getIntValueX(t110.1 += 10)];
|
|
return (xy, callOrder, g110, t110);
|
|
}
|
|
|
|
@method_id(111)
|
|
fun test111() {
|
|
callOrder = createEmptyTuple();
|
|
var z = -1;
|
|
var xy = [0, z = 0];
|
|
var rhs = [getIntValueX(xy.1 += 10), xy.1, xy.0, z += 50];
|
|
[xy.0, getTuple_1X(g110 = 8 + getIntValueX(xy.1)).0, xy.1, z] = rhs;
|
|
return (xy, g110, callOrder, z);
|
|
}
|
|
|
|
@method_id(112)
|
|
fun test112() {
|
|
var xy = [1, 2];
|
|
((((xy))).0, ((xy.1))) = ((xy).1, ((xy.0)));
|
|
return xy;
|
|
}
|
|
|
|
@method_id(113)
|
|
fun test113() {
|
|
var (a, t, z) = (1, [2,3], (-1,-1));
|
|
(a, t, a, z, t.1, z.1) = (10, [a,12], 13, (a, t.1), 14, t.1);
|
|
return (a, t, z);
|
|
}
|
|
|
|
global g114: int;
|
|
global t114: [int, int];
|
|
global z114: (int, int);
|
|
|
|
@method_id(114)
|
|
fun test114() {
|
|
g114 = 1;
|
|
t114 = [2, 3];
|
|
(g114, t114, g114, z114, t114.1, z114.1) = (10, [g114,12], 13, (g114, t114.1), 14, t114.1);
|
|
return (g114, t114, z114);
|
|
}
|
|
|
|
@method_id(115)
|
|
fun test115() {
|
|
callOrder = createEmptyTuple();
|
|
var x = 0;
|
|
var y = 0;
|
|
[getTensor_1X(x = 5).0, y] = getTuple_1X(x = 9);
|
|
return (callOrder, x, y);
|
|
}
|
|
|
|
|
|
|
|
fun main(value: int) {
|
|
var (x: int?, y) = (autoInferIntNull(value), autoInferIntNull(value * 2));
|
|
if (x == null && y == null) { return null; }
|
|
return x == null || y == null ? -1 : x! + y!;
|
|
}
|
|
|
|
/**
|
|
@testcase | 0 | 3 | 9
|
|
@testcase | 0 | 6 | -1
|
|
@testcase | 0 | 11 | (null)
|
|
@testcase | 101 | 78 | 88
|
|
@testcase | 102 | | [ 100 10 101 10 101 11 ] 10
|
|
@testcase | 103 | | [ 110 10 111 10 111 11 ] 10
|
|
@testcase | 104 | | [ 120 10 121 10 121 11 ] 10
|
|
@testcase | 105 | | [ 100 10 101 100 11 ]
|
|
@testcase | 106 | | [ 110 10 111 110 11 ]
|
|
@testcase | 107 | | 3 4
|
|
@testcase | 108 | | [ 101 ] 8
|
|
@testcase | 109 | | [ 110 10 111 111 10 10 11 ] 15
|
|
@testcase | 110 | | [ 13 13 ] [ 111 11 111 11 ] 23 13 19
|
|
@testcase | 111 | | [ 10 0 ] 18 [ 11 11 111 ] 50
|
|
@testcase | 112 | | [ 2 1 ]
|
|
@testcase | 113 | | 13 [ 1 14 ] 1 3
|
|
@testcase | 114 | | 13 [ 1 14 ] 1 3
|
|
@testcase | 115 | | [ 101 111 ] 9 9
|
|
*/
|