mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-12 11:12:16 +00:00
This is a very big change. If FunC has `.methods()` and `~methods()`, Tolk has only dot, one and only way to call a `.method()`. A method may mutate an object, or may not. It's a behavioral and semantic difference from FunC. - `cs.loadInt(32)` modifies a slice and returns an integer - `b.storeInt(x, 32)` modifies a builder - `b = b.storeInt()` also works, since it not only modifies, but returns - chained methods also work, they return `self` - everything works exactly as expected, similar to JS - no runtime overhead, exactly same Fift instructions - custom methods are created with ease - tilda `~` does not exist in Tolk at all
34 lines
1.2 KiB
Text
34 lines
1.2 KiB
Text
@method_id(101)
|
|
fun test1(cs: slice) {
|
|
return cs.loadUint(8)+cs.loadUint(8)+cs.loadUint(8)+cs.loadUint(8);
|
|
}
|
|
|
|
@method_id(102)
|
|
fun test2(cs: slice) {
|
|
var (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10,
|
|
x11, x12, x13, x14, x15, x16, x17, x18, x19) = f(cs);
|
|
return x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
|
|
+ x10+ x11+ x12+ x13+ x14+ x15+ x16+ x17+ x18+ x19;
|
|
}
|
|
|
|
fun main(cs: slice) {
|
|
return (cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8));
|
|
}
|
|
|
|
fun f(cs: slice) {
|
|
return (cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8),
|
|
cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8),
|
|
cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8),
|
|
cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8),
|
|
cs.loadUint(8), cs.loadUint(8), cs.loadUint(8), cs.loadUint(8));
|
|
}
|
|
|
|
|
|
/**
|
|
method_id | in | out
|
|
@testcase | 102 | x{000102030405060708090a0b0c0d0e0f10111213} | 190
|
|
@testcase | 101 | x{000102030405060708090a0b0c0d0e0f10111213} | 6
|
|
@testcase | 0 | x{000102030405060708090a0b0c0d0e0f10111213} | 0 1 2 3
|
|
|
|
@code_hash 58474889199998908444151060994149070836199913191952040273624197630531731101157
|
|
*/
|