ack/lang/m2/comp/def.H

127 lines
4 KiB
C++
Raw Normal View History

1986-03-26 15:11:02 +00:00
/* I D E N T I F I E R D E S C R I P T O R S T R U C T U R E */
struct module {
1986-04-17 09:28:09 +00:00
arith mo_priority; /* priority of a module */
1986-04-28 18:06:58 +00:00
struct scopelist *mo_vis;/* scope of this module */
1986-04-17 09:28:09 +00:00
struct node *mo_body; /* body of this module */
1986-03-29 01:04:49 +00:00
#define mod_priority df_value.df_module.mo_priority
1986-04-28 18:06:58 +00:00
#define mod_vis df_value.df_module.mo_vis
1986-04-17 09:28:09 +00:00
#define mod_body df_value.df_module.mo_body
1986-03-26 15:11:02 +00:00
};
struct variable {
1986-04-04 13:47:04 +00:00
arith va_off; /* address or offset of variable */
1986-04-21 17:27:06 +00:00
char *va_name; /* name of variable if given */
1986-04-15 17:51:53 +00:00
char va_addrgiven; /* an address was given in the program */
1986-03-29 01:04:49 +00:00
#define var_off df_value.df_variable.va_off
1986-04-21 17:27:06 +00:00
#define var_name df_value.df_variable.va_name
1986-04-15 17:51:53 +00:00
#define var_addrgiven df_value.df_variable.va_addrgiven
1986-03-26 15:11:02 +00:00
};
struct constant {
1986-04-08 18:15:46 +00:00
struct node *co_const; /* result of a constant expression */
#define con_const df_value.df_constant.co_const
1986-03-26 15:11:02 +00:00
};
struct enumval {
1986-04-04 13:47:04 +00:00
unsigned int en_val; /* value of this enumeration literal */
struct def *en_next; /* next enumeration literal */
1986-03-29 01:04:49 +00:00
#define enm_val df_value.df_enum.en_val
#define enm_next df_value.df_enum.en_next
1986-03-26 15:11:02 +00:00
};
struct field {
1986-03-29 01:04:49 +00:00
arith fd_off;
1986-03-26 15:11:02 +00:00
struct variant {
1986-03-29 01:04:49 +00:00
struct caselabellist *v_cases;
label v_casedescr;
struct def *v_varianttag;
} *fd_variant;
#define fld_off df_value.df_field.fd_off
#define fld_variant df_value.df_field.fd_variant
1986-03-26 15:11:02 +00:00
};
1986-04-04 13:47:04 +00:00
struct dfproc {
1986-04-28 18:06:58 +00:00
struct scopelist *pr_vis; /* scope of procedure */
1986-04-17 09:28:09 +00:00
struct node *pr_body; /* body of this procedure */
1986-04-28 18:06:58 +00:00
#define prc_vis df_value.df_proc.pr_vis
1986-04-17 09:28:09 +00:00
#define prc_body df_value.df_proc.pr_body
1986-06-04 09:01:48 +00:00
#define NameOfProc(xdf) ((xdf)->prc_vis->sc_scope->sc_name)
1986-04-04 13:47:04 +00:00
};
1986-03-26 15:11:02 +00:00
struct import {
1986-04-12 02:21:24 +00:00
struct def *im_def; /* imported definition */
#define imp_def df_value.df_import.im_def
};
struct dforward {
1986-04-28 18:06:58 +00:00
struct scopelist *fo_vis;
1986-04-12 02:21:24 +00:00
struct node *fo_node;
1986-04-21 17:27:06 +00:00
char *fo_name;
1986-04-12 02:21:24 +00:00
#define for_node df_value.df_forward.fo_node
1986-04-28 18:06:58 +00:00
#define for_vis df_value.df_forward.fo_vis
1986-04-21 17:27:06 +00:00
#define for_name df_value.df_forward.fo_name
1986-03-26 15:11:02 +00:00
};
struct def { /* list of definitions for a name */
1986-03-29 01:04:49 +00:00
struct def *next; /* next definition in definitions chain */
struct def *df_nextinscope;
/* link all definitions in a scope */
1986-03-26 15:11:02 +00:00
struct idf *df_idf; /* link back to the name */
1986-04-15 17:51:53 +00:00
struct scope *df_scope; /* scope in which this definition resides */
1986-04-04 13:47:04 +00:00
short df_kind; /* the kind of this definition: */
#define D_MODULE 0x0001 /* a module */
#define D_PROCEDURE 0x0002 /* procedure of function */
#define D_VARIABLE 0x0004 /* a variable */
#define D_FIELD 0x0008 /* a field in a record */
#define D_TYPE 0x0010 /* a type */
#define D_ENUM 0x0020 /* an enumeration literal */
#define D_CONST 0x0040 /* a constant */
#define D_IMPORT 0x0080 /* an imported definition */
#define D_PROCHEAD 0x0100 /* a procedure heading in a definition module */
#define D_HIDDEN 0x0200 /* a hidden type */
1986-10-06 20:36:30 +00:00
#define D_FORWARD 0x0400 /* not yet defined */
#define D_FORWMODULE 0x0800 /* module must be declared later */
#define D_ERROR 0x1000 /* a compiler generated definition for an
1986-03-27 17:37:41 +00:00
undefined variable
*/
1986-10-06 20:36:30 +00:00
#define D_VALUE (D_PROCEDURE|D_VARIABLE|D_FIELD|D_ENUM|D_CONST|D_PROCHEAD)
1986-05-28 18:36:51 +00:00
#define D_ISTYPE (D_HIDDEN|D_TYPE)
#define is_type(dfx) ((dfx)->df_kind & D_ISTYPE)
1986-03-26 15:11:02 +00:00
char df_flags;
1986-05-28 18:36:51 +00:00
#define D_NOREG 0x01 /* set if it may not reside in a register */
#define D_USED 0x02 /* set if used (future use ???) */
#define D_DEFINED 0x04 /* set if it is assigned a value (future use ???) */
1986-05-28 18:36:51 +00:00
#define D_VARPAR 0x10 /* set if it is a VAR parameter */
#define D_VALPAR 0x20 /* set if it is a value parameter */
1986-04-04 13:47:04 +00:00
#define D_EXPORTED 0x40 /* set if exported */
#define D_QEXPORTED 0x80 /* set if qualified exported */
1986-03-26 15:11:02 +00:00
struct type *df_type;
union {
struct module df_module;
struct variable df_variable;
struct constant df_constant;
struct enumval df_enum;
struct field df_field;
struct import df_import;
1986-04-04 13:47:04 +00:00
struct dfproc df_proc;
1986-04-12 02:21:24 +00:00
struct dforward df_forward;
1986-04-04 13:47:04 +00:00
int df_stdname; /* define for standard name */
1986-03-26 15:11:02 +00:00
} df_value;
};
1986-09-25 19:39:06 +00:00
#define SetUsed(df) ((df)->df_flags |= D_USED)
1986-10-06 20:36:30 +00:00
/* ALLOCDEF "def" 50 */
1986-03-26 15:11:02 +00:00
1986-03-27 17:37:41 +00:00
extern struct def
1986-03-26 15:11:02 +00:00
*define(),
1986-06-17 12:04:05 +00:00
*DefineLocalModule(),
*MkDef(),
1986-10-06 20:36:30 +00:00
*DeclProc();
1986-03-27 17:37:41 +00:00
1986-06-17 12:04:05 +00:00
extern struct def
*lookup(),
*lookfor();
1986-03-27 17:37:41 +00:00
#define NULLDEF ((struct def *) 0)