-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathexample1.swua
47 lines (35 loc) · 1.02 KB
/
example1.swua
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
35
36
37
38
39
40
41
42
43
44
45
46
47
extern print(int) -> int
extern print_str(str) -> str
extern print_array(int[], int) -> int
extern to_str(int) -> str
extern concat_str(str, str) -> str
struct Foo
| x int
| y int
struct Bar
| data Foo[]
| bar int[]
define add(a int, b int) -> int =
return a + b
define main -> int =
let foo1: Foo = Foo { x: 2, y: 3 }
let foo2: Foo = Foo { x: 10, y: 20 }
let bar: Bar = Bar {
data: [foo1, foo2],
bar: [0, 1, 2, 3, 4, 5]
}
let size = sizeof bar.bar
let int_size = sizeof bar.bar[0]
print_array(bar.bar, size / int_size)
let a = add(bar.data[0].x, bar.data[bar.bar[1]].x) // 12
let b = add(bar.data[bar.bar[0]].y, bar.data[bar.bar[1]].y) // 23
print_str(concat_str("a = ", to_str(a)))
print_str(concat_str("b = ", to_str(b)))
let result = 0
if a == 12
print_str("a == 12")
result = add(a, b)
else
print_str(concat_str("a != 12, a = ", to_str(a)))
print_str(concat_str("result = ", to_str(result)))
return 0