mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
[Tolk] v0.6 syntax: fun
, import
, var
, types on the right, etc.
Lots of changes, actually. Most noticeable are: - traditional //comments - #include -> import - a rule "import what you use" - ~ found -> !found (for -1/0) - null() -> null - is_null?(v) -> v == null - throw is a keyword - catch with swapped arguments - throw_if, throw_unless -> assert - do until -> do while - elseif -> else if - drop ifnot, elseifnot - drop rarely used operators A testing framework also appears here. All tests existed earlier, but due to significant syntax changes, their history is useless.
This commit is contained in:
parent
5a3e3595d6
commit
e2edadba92
133 changed files with 8196 additions and 2605 deletions
48
tolk-tester/tests/remove-unused-functions.tolk
Normal file
48
tolk-tester/tests/remove-unused-functions.tolk
Normal file
|
@ -0,0 +1,48 @@
|
|||
fun unused1(): int { return 2; }
|
||||
fun unused2(): int { return unused1(); }
|
||||
fun unused3(x: int): int { return x * 2+unused2(); }
|
||||
|
||||
fun used_from_noncall1(): int { return 10; }
|
||||
fun used_as_noncall1(): int { return used_from_noncall1(); }
|
||||
|
||||
const int20: int = 20;
|
||||
fun used_from_noncall2(): int { return int20; }
|
||||
fun used_as_noncall2(): int { return 0 * 0 + used_from_noncall2() + (0 << 0); }
|
||||
|
||||
global unused_gv: int;
|
||||
global used_gv: auto;
|
||||
|
||||
fun receiveGetter(): (() -> int) { return used_as_noncall2; }
|
||||
|
||||
@pure
|
||||
fun usedButOptimizedOut(x: int): int { return x + 2; }
|
||||
|
||||
fun main(): (int, int, int) {
|
||||
used_gv = 1;
|
||||
used_gv = used_gv + 2;
|
||||
var getter1 = used_as_noncall1;
|
||||
var getter2 = receiveGetter();
|
||||
usedButOptimizedOut(used_gv);
|
||||
return (used_gv, getter1(), getter2());
|
||||
}
|
||||
|
||||
/**
|
||||
@experimental_options remove-unused-functions
|
||||
|
||||
@testcase | 0 | | 3 10 20
|
||||
|
||||
@fif_codegen DECLPROC used_as_noncall1
|
||||
@fif_codegen DECLGLOBVAR used_gv
|
||||
|
||||
@fif_codegen_avoid DECLPROC unused1
|
||||
@fif_codegen_avoid DECLPROC unused2
|
||||
@fif_codegen_avoid DECLPROC unused3
|
||||
@fif_codegen_avoid DECLGLOBVAR unused_gv
|
||||
|
||||
Note, that `usedButOptimizedOut()` (a pure function which result is unused)
|
||||
is currently codegenerated, since it's formally reachable.
|
||||
This is because optimizing code is a moment of codegen for now (later than marking unused symbols).
|
||||
|
||||
@fif_codegen DECLPROC usedButOptimizedOut
|
||||
@fif_codegen_avoid usedButOptimizedOut CALLDICT
|
||||
*/
|
Loading…
Add table
Add a link
Reference in a new issue