1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-12 11:12:16 +00:00
ton/tolk-tester/tests/w2.tolk
tolk-vm d9dba320cc
[Tolk] Get rid of ~tilda with mutate and self methods
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
2024-11-02 03:44:14 +04:00

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
*/