2 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 * See the copyright notice in the ACK home directory, in the file "Copyright".
5 * Author: Ceriel J.H. Jacobs
8 /* 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 */
10 /* $Id: def.H,v 1.44 1994/06/24 12:40:22 ceriel Exp $ */
13 struct node *mo_priority;/* priority of a module */
14 struct scopelist *mo_vis;/* scope of this module */
15 struct node *mo_body; /* body of this module */
16 #define mod_priority df_value.df_module.mo_priority
17 #define mod_vis df_value.df_module.mo_vis
18 #define mod_body df_value.df_module.mo_body
22 arith va_off; /* address or offset of variable */
23 char *va_name; /* name of variable if given */
24 #define var_off df_value.df_variable.va_off
25 #define var_name df_value.df_variable.va_name
29 struct token co_const; /* result of a constant expression */
30 #define con_const df_value.df_constant.co_const
34 arith en_val; /* value of this enumeration literal */
35 struct def *en_next; /* next enumeration literal */
36 #define enm_val df_value.df_enum.en_val
37 #define enm_next df_value.df_enum.en_next
43 struct caselabellist *v_cases;
45 struct def *v_varianttag;
47 #define fld_off df_value.df_field.fd_off
48 #define fld_variant df_value.df_field.fd_variant
52 struct def *im_def; /* imported definition */
53 #define imp_def df_value.df_import.im_def
57 struct scopelist *fo_vis;
60 #define for_node df_value.df_forward.fo_node
61 #define for_vis df_value.df_forward.fo_vis
62 #define prc_vis df_value.df_forward.fo_vis
63 #define prc_body df_value.df_forward.fo_node
64 #define prc_name df_value.df_forward.fo_name
70 #define df_forw_node df_value.df_fortype.f_node
71 #define df_forw_def df_value.df_fortype.f_def
74 struct def { /* list of definitions for a name */
75 struct def *df_next; /* next definition in definitions chain */
76 struct def *df_nextinscope;
77 /* link all definitions in a scope */
78 struct idf *df_idf; /* link back to the name */
79 struct scope *df_scope; /* scope in which this definition resides */
80 unsigned short df_kind; /* the kind of this definition: */
81 #define D_MODULE 0x0001 /* a module */
82 #define D_PROCEDURE 0x0002 /* procedure of function */
83 #define D_VARIABLE 0x0004 /* a variable */
84 #define D_FIELD 0x0008 /* a field in a record */
85 #define D_TYPE 0x0010 /* a type */
86 #define D_ENUM 0x0020 /* an enumeration literal */
87 #define D_CONST 0x0040 /* a constant */
88 #define D_IMPORT 0x0080 /* an imported definition */
89 #define D_PROCHEAD 0x0100 /* a procedure heading in a definition module */
90 #define D_HIDDEN 0x0200 /* a hidden type */
91 #define D_FORWARD 0x0400 /* not yet defined */
92 #define D_FORWMODULE 0x0800 /* module must be declared later */
93 #define D_FORWTYPE 0x1000 /* forward type */
94 #define D_ERROR 0x4000 /* a compiler generated definition for an
97 #define D_INUSE 0x8000 /* identification in this scope (like D_IMPORT)
99 #define D_END (D_MODULE|D_PROCEDURE) /* special value for stab.c */
100 #define D_PEND (D_MODULE|D_PROCEDURE|D_VARIABLE) /* special value for stab.c */
101 #define D_VALUE (D_PROCEDURE|D_VARIABLE|D_FIELD|D_ENUM|D_CONST|D_PROCHEAD)
102 #define D_ISTYPE (D_HIDDEN|D_TYPE)
103 #define D_IMPORTED (D_IMPORT|D_INUSE)
104 #define is_type(dfx) ((dfx)->df_kind & D_ISTYPE)
105 unsigned short df_flags;
106 #define D_NOREG 0x01 /* set if it may not reside in a register */
107 #define D_USED 0x02 /* set if used */
108 #define D_DEFINED 0x04 /* set if it is assigned a value */
109 #define D_VARPAR 0x08 /* set if it is a VAR parameter */
110 #define D_VALPAR 0x10 /* set if it is a value parameter */
111 #define D_EXPORTED 0x20 /* set if exported */
112 #define D_QEXPORTED 0x40 /* set if qualified exported */
113 #define D_BUSY 0x80 /* set if busy reading this definition module */
114 #define D_FOREIGN 0x100 /* set for foreign language modules */
115 #define D_ADDRGIVEN 0x200 /* set if address given for variable */
116 #define D_FORLOOP 0x400 /* set if busy in for-loop */
117 #define D_IMP_BY_EXP 0x800 /* imported definition by export */
118 struct type *df_type;
120 struct module df_module;
121 struct variable df_variable;
122 struct constant df_constant;
123 struct enumval df_enum;
124 struct field df_field;
125 struct import df_import;
126 struct dforward df_forward; /* also used for proc */
127 struct forwtype df_fortype;
128 int df_stdname; /* define for standard name */
132 typedef struct def t_def;
133 /* ALLOCDEF "def" 50 */
137 *DefineLocalModule(),
143 #define NULLDEF ((t_def *) 0)