aboutsummaryrefslogtreecommitdiff
path: root/tests/actor/accept/graphs.zc
blob: f90469c7c1787c985ba3671375c57db980bfef92 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace;
include rt, actor;
typecheck on;
struct Node { int value; Node* next; }
struct Message { char* text; int[?] numbers; Node* node; }
int handle(Message* m) { m.text[0] = 'X'; m.numbers[0] += 10; return rt.len_w(m.text) + m.numbers[0] + m.node.next.value; }
fn main() {
 actor.Actor<Message*, int>* a = rt.new(actor.Actor<Message*, int>);
 a.spawn(handle); let result = 0; a.recv(fn(int n) { result = n; return 0; });
 Message* m = rt.new(Message); m.text = rt.new(char, 4); m.text[0] = 'a'; m.text[1] = 'b'; m.text[2] = 'c';
 m.numbers = rt.new(int[?]); push(m.numbers, 5); m.node = rt.new(Node); m.node.value = 7; m.node.next = m.node;
 a.send(m); a.await();
 rt.put_n(result); rt.put_c(' '); rt.put_c(m.text[0]); rt.put_c(' '); rt.put_n(m.numbers[0]); rt.put_c(10); a.close(); return 0;
}