40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
/* $Header$ */
|
|
|
|
/* 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_start;
|
|
struct outname *f_end;
|
|
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))
|
|
|
|
struct file *f_nextmap; /* next file in mapping */
|
|
} t_file, *p_file;
|
|
|
|
/* ALLOCDEF "file" 10 */
|