summaryrefslogtreecommitdiff
path: root/tnslc/simple.tnsl
blob: 1c54577ae944dbadee2df5fc7f5127c58c6019fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

{}uint8 str1 = "abcd"

struct Stress {
    int i, j, k
}

struct Test {
    ~Stress s
}

/; s_call (Test t)
    t.s`.i = 1
    t.s`.j = 1 + t.s`.i
    t.s`.k = t.s`.j + 1
;/

/; main (int argc, ~~uint argv) [int]
    # On windows, the first two arguments are passed in RCX and RDX, so we need to
    # update their positions here or else tnsl will have garbage values in r8 and r9
    asm "mov r8, rcx"
    asm "mov r9, rdx"

    Stress test
    Test stress

    stress.s = ~test

    s_call(stress)

    # return 3
    return stress.s`.k
;/