47 lines
1.4 KiB
C
47 lines
1.4 KiB
C
|
/* $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;
|