#include "value.h"
struct vm;
#define AR_ADMIN_MARKED 1
#define AR_ADMIN_ON_STACK 4
/*
* Structure of an activation record.
* This is actually only the header;
* the frame itself (containing local variables)
* follows immediately in memory.
*/
struct activation {
struct activation *next; /* global list of all act recs */
unsigned short int admin;
unsigned short int size;
struct activation *caller; /* recursively shallower activation record */
struct activation *enclosing; /* lexically enclosing activation record */
/*
struct value value[];
*/
};
#define VALARY(a,i) \
((struct value *)((unsigned char *)a + sizeof(struct activation)))[i]
struct activation *activation_new_on_heap(int, struct activation *, struct activation *);
struct activation *activation_new_on_stack(int, struct activation *, struct activation *, struct vm *);
void activation_free_from_heap(struct activation *);
void activation_free_from_stack(struct activation *, struct vm *);
struct value activation_get_value(struct activation *, int, int);
void activation_set_value(struct activation *, int, int, struct value);
void activation_initialize_value(struct activation *, int, struct value);
void activation_dump(struct activation *, int);