Variables: 
int[1]: "foo.y" 
int[2]: "bar.y" 
int[3]: "S.y" 
chan[1]: "foo.index" 
chan[2]: "foo.out" 
chan[3]: "bar.index" 
chan[4]: "bar.out" 
chan[5]: "S.index" 
chan[6]: "S.out" 

Event graph: 
event[0]: fork: null, #pred: 0, succ: 1 6 11 

# process[1]:
event[1]: peek: foo.index#(foo.y), pid: 1, #pred: 1, succ: 5 
channel deps: 1 
event[2]: join: , pid: 1, #pred: 2, succ: 1 
event[3]: receive: foo.index?, pid: 1, #pred: 1, succ: 2 
channel deps: 1 
event[4]: send: foo.out!(foo.x[0][foo.y]), pid: 1, #pred: 1, succ: 2 
channel deps: 2 
event[5]: fork: , pid: 1, #pred: 1, succ: 3 4 

# process[2]:
event[6]: peek: bar.index#(bar.y), pid: 2, #pred: 1, succ: 10 
channel deps: 3 
event[7]: join: , pid: 2, #pred: 2, succ: 6 
event[8]: receive: bar.index?, pid: 2, #pred: 1, succ: 7 
channel deps: 3 
event[9]: send: bar.out!(bar.x[1][bar.y]), pid: 2, #pred: 1, succ: 7 
channel deps: 4 
event[10]: fork: , pid: 2, #pred: 1, succ: 8 9 

# process[3]:
event[11]: peek: S.index#(S.y), pid: 3, #pred: 1, succ: 15 
channel deps: 5 
event[12]: join: , pid: 3, #pred: 2, succ: 11 
event[13]: receive: S.index?, pid: 3, #pred: 1, succ: 12 
channel deps: 5 
event[14]: send: S.out!(S.x[3][S.y]), pid: 3, #pred: 1, succ: 12 
channel deps: 6 
event[15]: fork: , pid: 3, #pred: 1, succ: 13 14 

