/* $Header$ */ /* IDENTIFIER STACK DEFINITIONS */ /* The identifier stack is implemented as a stack of sets. The stack is implemented by a doubly linked list, the sets by singly linked lists. */ struct stack_level { struct stack_level *next; struct stack_level *sl_next; /* upward link */ struct stack_level *sl_previous; /* downward link */ struct stack_entry *sl_entry; /* sideward link */ arith sl_local_offset; /* @ for first coming object */ arith sl_max_block; /* maximum size of sub-block */ int sl_level; }; /* allocation definitions of struct stack_level */ /* ALLOCDEF "stack_level" */ extern char *st_alloc(); extern struct stack_level *h_stack_level; #define new_stack_level() ((struct stack_level *) \ st_alloc((char **)&h_stack_level, sizeof(struct stack_level))) #define free_stack_level(p) st_free(p, h_stack_level, sizeof(struct stack_level)) struct stack_entry { struct stack_entry *next; struct idf *se_idf; }; /* allocation definitions of struct stack_entry */ /* ALLOCDEF "stack_entry" */ extern char *st_alloc(); extern struct stack_entry *h_stack_entry; #define new_stack_entry() ((struct stack_entry *) \ st_alloc((char **)&h_stack_entry, sizeof(struct stack_entry))) #define free_stack_entry(p) st_free(p, h_stack_entry, sizeof(struct stack_entry)) extern struct stack_level *local_level; extern struct stack_level *stack_level_of(); extern int level;