-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTStruct.bismuth
executable file
·68 lines (57 loc) · 1.45 KB
/
TStruct.bismuth
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
extern func printf(str s, ...) : Unit;
define struct IB {
Box<int> a;
}
# Two Int Box Box
define struct TIBB {
Box<Box<int>> b1;
Box<Box<int>> b2;
IB ib;
}
define func printTIBB(str name, TIBB b) {
printf("%s = {b1 : %u, b2 : %u}\n", name, **b.b1, **b.b2);
return;
}
define foo :: c : Channel<+TIBB;-int;+int> = {
var iPtr := c.recv();
printTIBB("iPtr (orig/5)", iPtr);
**iPtr.b1 := 7;
printTIBB("iPtr (mod/7)", iPtr);
c.send(-1);
var t := c.recv();
printTIBB("iPtr (mod/7)", iPtr);
}
define program :: c : Channel<-int> = {
{
var a := exec foo;
var shared := Box<Box<int>>::init(Box<int>::init(5));
var tibb := TIBB::init(shared, Box<Box<int>>::init(Box<int>::init(6)), IB::init(Box<int>::init(1)));
tibb.b1 := shared;
printf("");
printTIBB("b (orig/5;6)", tibb);
a.send(tibb)
var u := a.recv();
printTIBB("b (orig/5;6)", tibb);
# **shared = 9;
*shared := Box<int>::init(9);
printTIBB("b (orig/9;6)", tibb);
a.send(-1);
}
printf("------\n");
{
var a := exec foo;
var shared := Box<Box<int>>::init(Box<int>::init(5));
var tibb := TIBB::init(shared, shared, IB::init(Box<int>::init(1)));
tibb.b1 := shared;
printf("");
printTIBB("b (orig/5;5)", tibb);
a.send(tibb)
var u := a.recv();
printTIBB("b (orig/5;5)", tibb);
# **shared = 9;
*shared := Box<int>::init(9);
printTIBB("b (orig/9;9)", tibb);
a.send(-1);
}
c.send(0);
}