1994-06-24 11:31:16 +00:00
|
|
|
/* $Id$ */
|
1987-03-09 19:15:41 +00:00
|
|
|
/*
|
|
|
|
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
|
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
|
|
*/
|
1984-11-26 13:43:22 +00:00
|
|
|
/* I N T E R M E D I A T E C O D E
|
|
|
|
*
|
|
|
|
* G L O B A L C O N S T A N T S & V A R I A B L E S
|
|
|
|
*/
|
|
|
|
|
1984-11-30 10:24:21 +00:00
|
|
|
|
|
|
|
/* Data structures for Intermediate Code generation */
|
|
|
|
|
|
|
|
typedef struct sym *sym_p;
|
|
|
|
typedef struct prc *prc_p;
|
|
|
|
typedef struct num *num_p;
|
|
|
|
|
|
|
|
|
|
|
|
struct sym {
|
|
|
|
sym_p sy_next; /* link */
|
1987-03-25 16:24:41 +00:00
|
|
|
char *sy_name; /* name of the symbol */
|
1984-11-30 10:24:21 +00:00
|
|
|
dblock_p sy_dblock; /* pointer to dblock struct */
|
|
|
|
};
|
|
|
|
struct prc {
|
|
|
|
prc_p pr_next; /* link */
|
1987-03-25 16:24:41 +00:00
|
|
|
char *pr_name; /* name of the procedure */
|
1984-11-30 10:24:21 +00:00
|
|
|
proc_p pr_proc; /* pointer tto proc struct */
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct num {
|
|
|
|
num_p n_next; /* link */
|
|
|
|
unsigned n_number; /* EM repr. e.g. 120 in 'BRA *120' */
|
|
|
|
lab_id n_labid; /* sequential integer repr. of IC */
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
1984-11-26 13:43:22 +00:00
|
|
|
/* macros used by ic_lib.c and ic_io.c: */
|
|
|
|
|
|
|
|
#define ARCHIVE 0
|
|
|
|
#define NO_ARCHIVE 1
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The next constants are close to sp_cend for fast switches
|
|
|
|
*/
|
|
|
|
#define INST 256 /* instruction: number in tabval */
|
|
|
|
#define PSEU 257 /* pseudo: number in tabval */
|
|
|
|
#define ILBX 258 /* label: number in tabval */
|
|
|
|
#define DLBX 259 /* symbol: name in string[] */
|
|
|
|
#define CSTX1 260 /* short constant: stored in tabval */
|
|
|
|
#define CSTX2 261 /* offset: value in tabval2 */
|
|
|
|
#define VALX1 262 /* symbol+short: in string[] and tabval */
|
|
|
|
#define VALX2 263 /* symbol+offset: in string[] and tabval2 */
|
|
|
|
#define ATEOF 264 /* bumped into end of file */
|
|
|
|
|
|
|
|
/* Global variables */
|
|
|
|
|
|
|
|
extern dblock_p db;
|
1989-05-30 14:32:12 +00:00
|
|
|
extern dblock_p hol0_db; /* ABS block */
|
1984-11-26 13:43:22 +00:00
|
|
|
extern dblock_p ldblock; /* last dblock processed so far */
|
|
|
|
extern proc_p lproc; /* last proc processed so far */
|
|
|
|
extern short tabval; /* used by table1, table2 and table3 */
|
|
|
|
extern offset tabval2;
|
|
|
|
extern char string[];
|
|
|
|
extern line_p lastline; /* last line read */
|
|
|
|
extern int labelcount; /* # labels in current procedure */
|
|
|
|
extern obj_id lastoid; /* last object identifier used */
|
|
|
|
extern proc_id lastpid; /* last proc identifier used */
|
|
|
|
extern lab_id lastlid; /* last label identifier used */
|
|
|
|
extern dblock_id lastdid; /* last dblock identifier used */
|
|
|
|
|
|
|
|
extern byte em_flag[];
|
|
|
|
|