35 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* $Id$ */
 | 
						|
 | 
						|
/* Structure for information about files. This information consists of three
 | 
						|
   parts:
 | 
						|
   - file name and directory
 | 
						|
   - mapping of line numbers to offsets in file
 | 
						|
   - mapping of object adresses to lines in file and vice versa
 | 
						|
*/
 | 
						|
 | 
						|
#define LOGHSIZ		6		/* make sure HSIZ is a power of 2 */
 | 
						|
#define HSIZ		(1 << LOGHSIZ)
 | 
						|
#define	HASH(line)	((line) & (HSIZ-1))
 | 
						|
 | 
						|
typedef struct file {
 | 
						|
	struct symbol	*f_sym;
 | 
						|
	struct symbol	*f_base;
 | 
						|
	char		*f_fullname;	/* name including directory */
 | 
						|
	struct scope	*f_scope;	/* reference to scope of this file */
 | 
						|
	t_lineno	f_nlines;	/* number of lines in file */
 | 
						|
	union {
 | 
						|
	  long		*ff_linepos;	/* positions of lines in file */
 | 
						|
	  struct file	*ff_next;	/* only for BINCL, EINCL */
 | 
						|
	} f_x;
 | 
						|
#define f_linepos	f_x.ff_linepos
 | 
						|
#define f_next		f_x.ff_next
 | 
						|
	struct outname	*f_line_addr[HSIZ];
 | 
						|
					/* hash table, mapping line numbers to
 | 
						|
					   outname structures. Collisions are
 | 
						|
					   resolved by chaining:
 | 
						|
					*/
 | 
						|
#define next_outname(n)		((struct outname *) ((n)->on_mptr))
 | 
						|
#define setnext_outname(n,m)	((n)->on_mptr = (char *) (m))
 | 
						|
} t_file, *p_file;
 | 
						|
 | 
						|
/* ALLOCDEF "file" 10 */
 |