1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

[Tolk] Compiler built-in __expect_type() for testing purposes

Currently, tolk-tester can test various "output" of the compiler:
pass input and check output, validate fif codegen, etc.
But it can not test compiler internals and AST representation.

I've added an ability to have special functions to check/expose
internal compiler state. The first (and the only now) is:
> __expect_type(some_expr, "<type>");
Such a call has special treatment in a compilation process.
Compilation fails if this expression doesn't have requested type.

It's intended to be used in tests only. Not present in stdlib.
This commit is contained in:
tolk-vm 2025-01-15 01:41:15 +07:00
parent c720204199
commit 989629a832
No known key found for this signature in database
GPG key ID: 7905DD7FE0324B12
9 changed files with 147 additions and 7 deletions

View file

@ -41,10 +41,12 @@ fun manyEq<T1, T2, T3>(a: T1, b: T2, c: T3): [T1, T2, T3] {
@method_id(104)
fun test104(f: int) {
return (
var result = (
manyEq(1 ? 1 : 1, f ? 0 : null, !f ? getTwo() as int : null),
manyEq((f ? null as int : eq2(2), beginCell().storeBool(true).endCell().beginParse().loadBool()), 0, eq4(f))
);
__expect_type(result, "([int, int, int], [(int, bool), int, int])");
return result;
}
fun calcSum<X>(x: X, y: X) { return x + y; }
@ -68,6 +70,7 @@ fun abstractTransform<X, Y, R>(xToY: (X) -> Y, yToR: (((Y))) -> R, initialX: X):
@method_id(106)
fun test106() {
var c = beginCell().storeInt(106, 32).endCell();
__expect_type(calcYPlus1<int>, "(int) -> int");
return [
abstractTransform(cellToSlice, calcLoad32, c),
abstractTransform(calcYPlus1<int>, calcYPlus1<int>, 0),