/* Copyright K. Mitchell 1995. This file has been generated by a program and is not intended to be read by a human. Run the file occam.w through nuweb. This produces a file called occam.tex. Typeset this file using LaTeX and then preview the resulting .dvi file, or just print it out. */ #ifndef _SYMBOL_TABLE_H #define _SYMBOL_TABLE_H typedef enum name_type { INT_T, CHAN_T , INT_ARRAY_T, CHAN_ARRAY_T, PROC_T, VAL_T, CHAN_BLOCK_T, DISPLAY_T } type; typedef struct name_info { char *name; union symbol_table_info *table; struct name_info *hash_link; } name_info, *name, *names; typedef union symbol_table_info { struct { type type; int nesting_level; union symbol_table_info *prev_defn; int scope_level; int size; int offset; } name; struct { type type; int nesting_level; union symbol_table_info *prev_defn; int scope_level; int start_loc; int stack_required; struct arg *args; } proc; } symbol_table_info, *symbol_table_entry; typedef struct arg {type type; struct arg *next; } *arg, *args; typedef struct scope_table_entry { struct name_info *name; struct scope_table_entry *next; } scope_table_entry, *scope_list; extern name find_name (char *ident); extern int nesting_level; extern int stack_offset; extern void insert_name_with_offset(name name, int offset, int size, type type); extern int insert_name(name name, int size, type type); extern int insert_arg(name name, type type); extern void insert_proc(name name, int label, args a, int stack_required); extern void lookup_name(name name, int *nesting_level, int *stack_offset, int *size, type *type); extern void lookup_proc(name name, int *nesting_level, int *start_label, args *a, int *stack_required); extern void enter_scope(bool new_nesting_level); extern int exit_scope(); extern name display, pc, chanblock, repl; extern void print_symbol_table(); extern void clear_symbol_table(); extern void initialise_symbol_table(); #endif