63 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* $Header$ */
 | 
						|
 | 
						|
/* Symbol table data structure.
 | 
						|
   Each identifier structure refers to a list of possible meanings of this
 | 
						|
   identifier. Each of these meanings is represented by a "symbol" structure.
 | 
						|
*/
 | 
						|
 | 
						|
typedef union constant {	/* depends on type */
 | 
						|
  long	co_ival;
 | 
						|
  double co_rval;
 | 
						|
  char *co_sval;
 | 
						|
  char *co_setval;
 | 
						|
} t_const, *p_const;
 | 
						|
 | 
						|
typedef struct name {
 | 
						|
  long	nm_value;		/* address or offset */
 | 
						|
  struct scope *nm_scope;	/* for names that define a scope */
 | 
						|
} t_name, *p_name;
 | 
						|
 | 
						|
typedef struct symbol {
 | 
						|
  struct symbol	*sy_next;	/* link to next meaning */
 | 
						|
  struct symbol	*sy_prev_sc;	/* link to previous decl in scope */
 | 
						|
  struct type	*sy_type;	/* type of symbol */
 | 
						|
  int		sy_class;
 | 
						|
#define CONST		0x0001
 | 
						|
#define TYPE		0x0002
 | 
						|
#define TAG		0x0004
 | 
						|
#define MODULE		0x0008
 | 
						|
#define PROC		0x0010
 | 
						|
#define FUNCTION	0x0020
 | 
						|
#define VAR		0x0040
 | 
						|
#define REGVAR		0x0080
 | 
						|
#define LOCVAR		0x0100
 | 
						|
#define VARPAR		0x0200
 | 
						|
#define FIELD		0x0400
 | 
						|
#define FILESYM		0x0800	/* a filename */
 | 
						|
#define FILELINK	0x1000	/* a filename without its suffix */
 | 
						|
#define LBOUND		0x2000	/* lower bound of array descriptor */
 | 
						|
#define UBOUND		0x4000	/* upper bound of array descriptor */
 | 
						|
  struct idf	*sy_idf;	/* reference back to its idf structure */
 | 
						|
  struct scope	*sy_scope;	/* scope in which this symbol resides */
 | 
						|
  union {
 | 
						|
	t_const	syv_const;	/* CONST */
 | 
						|
	t_name	syv_name;
 | 
						|
	struct file *syv_file;		/* for FILESYM */
 | 
						|
	struct symbol *syv_fllink;	/* for FILELINK */
 | 
						|
	struct symbol *syv_descr;	/* for LBOUND and UBOUND */
 | 
						|
	struct fields *syv_field;
 | 
						|
  }	sy_v;
 | 
						|
#define sy_const	sy_v.syv_const
 | 
						|
#define sy_name		sy_v.syv_name
 | 
						|
#define sy_file		sy_v.syv_file
 | 
						|
#define sy_filelink	sy_v.syv_fllink
 | 
						|
#define sy_field	sy_v.syv_field
 | 
						|
#define sy_descr	sy_v.syv_descr
 | 
						|
} t_symbol, *p_symbol;
 | 
						|
 | 
						|
/* ALLOCDEF "symbol" 50 */
 | 
						|
 | 
						|
extern p_symbol	NewSymbol(), Lookup(), Lookfromscope(), add_file();
 | 
						|
extern p_symbol identify();
 | 
						|
 | 
						|
extern p_symbol	currfile, listfile;
 |