#ifndef __PROCESS_H_
#define __PROCESS_H_
#include "value.h"
struct vm;
struct closure;
struct process {
int asleep;
int number;
struct process *next;
struct process *prev;
struct vm *vm;
struct message *msg_head;
};
struct message {
struct message *next;
struct value payload;
};
extern struct process *current_process;
extern struct process *run_head;
extern struct process *wait_head;
struct process *process_new(struct vm *);
void process_free(struct process *);
void process_scheduler(void);
struct process *process_spawn(struct closure *);
void process_send(struct process *, struct value);
int process_recv(struct value *);
void process_sleep(struct process *);
void process_awaken(struct process *);
#endif