stack.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /* $Header$ */
  2. /* IDENTIFIER STACK DEFINITIONS */
  3. /* The identifier stack is implemented as a stack of sets.
  4. The stack is implemented by a doubly linked list,
  5. the sets by singly linked lists.
  6. */
  7. struct stack_level {
  8. struct stack_level *next;
  9. struct stack_level *sl_next; /* upward link */
  10. struct stack_level *sl_previous; /* downward link */
  11. struct stack_entry *sl_entry; /* sideward link */
  12. arith sl_local_offset; /* @ for first coming object */
  13. arith sl_max_block; /* maximum size of sub-block */
  14. int sl_level;
  15. };
  16. /* allocation definitions of struct stack_level */
  17. /* ALLOCDEF "stack_level" */
  18. extern char *st_alloc();
  19. extern struct stack_level *h_stack_level;
  20. #define new_stack_level() ((struct stack_level *) \
  21. st_alloc((char **)&h_stack_level, sizeof(struct stack_level)))
  22. #define free_stack_level(p) st_free(p, h_stack_level, sizeof(struct stack_level))
  23. struct stack_entry {
  24. struct stack_entry *next;
  25. struct idf *se_idf;
  26. };
  27. /* allocation definitions of struct stack_entry */
  28. /* ALLOCDEF "stack_entry" */
  29. extern char *st_alloc();
  30. extern struct stack_entry *h_stack_entry;
  31. #define new_stack_entry() ((struct stack_entry *) \
  32. st_alloc((char **)&h_stack_entry, sizeof(struct stack_entry)))
  33. #define free_stack_entry(p) st_free(p, h_stack_entry, sizeof(struct stack_entry))
  34. extern struct stack_level *local_level;
  35. extern struct stack_level *stack_level_of();
  36. extern int level;