123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /* 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 constant {
- struct node *co_const; /* result of a constant expression */
- #define con_const df_value.df_constant.co_const
- };
- struct variable {
- arith va_off; /* address of variable */
- char *va_name; /* name of variable if given */
- #define var_off df_value.df_variable.va_off
- #define var_name df_value.df_variable.va_name
- };
- struct bound {
- struct type *bo_type; /* type of conformant array */
- #define bnd_type df_value.df_bound.bo_type
- };
- struct enumval {
- unsigned int en_val; /* value of this enumeration literal */
- struct def *en_next; /* next enumeration literal */
- #define enm_val df_value.df_enum.en_val
- #define enm_next df_value.df_enum.en_next
- };
- struct field {
- arith fd_off;
- unsigned short fd_flags;
- #define F_SELECTOR 0x1 /* set if field is a variant selector */
- #define F_PACKED 0x2 /* set if record is packed */
- #define fld_off df_value.df_field.fd_off
- #define fld_flags df_value.df_field.fd_flags
- };
- struct lab {
- struct lab *lb_next; /* list of goto statements to this label */
- int lb_level; /* level of nesting */
- label lb_no; /* instruction label */
- label lb_descr; /* label of goto descriptor */
- #define lab_next df_value.df_label.lb_next
- #define lab_level df_value.df_label.lb_level
- #define lab_no df_value.df_label.lb_no
- #define lab_descr df_value.df_label.lb_descr
- };
- /* ALLOCDEF "lab" 10 */
- struct forwtype {
- struct forwtype *f_next;
- struct node *f_node;
- struct type *f_type;
- };
- /* ALLOCDEF "forwtype" 50 */
- struct dfproc { /* used for procedures and functions */
- struct scopelist *pc_vis; /* scope of this procedure/function */
- char *pc_name; /* internal name */
- arith pc_res; /* offset of function result */
- #define prc_vis df_value.df_proc.pc_vis
- #define prc_name df_value.df_proc.pc_name
- #define prc_res df_value.df_proc.pc_res
- };
- struct def { /* list of definitions for a name */
- struct def *df_next; /* next definition in definitions chain */
- struct def *df_nextinscope;
- /* link all definitions in a scope */
- struct idf *df_idf; /* link back to the name */
- struct scope *df_scope; /* scope in which this definition resides */
- long df_kind; /* the kind of this definition: */
- #define D_PROCEDURE 0x00001 /* procedure */
- #define D_FUNCTION 0x00002 /* function */
- #define D_TYPE 0x00004 /* a type */
- #define D_CONST 0x00008 /* a constant */
- #define D_ENUM 0x00010 /* an enumeration literal */
- #define D_FIELD 0x00020 /* a field in a record */
- #define D_PROGRAM 0x00040 /* the program */
- #define D_VARIABLE 0x00080 /* a variable */
- #define D_PARAMETER 0x00100 /* program parameter */
- #define D_FORWTYPE 0x00200 /* forward type */
- #define D_FTYPE 0x00400 /* resolved forward type */
- #define D_FWPROCEDURE 0x00800 /* forward procedure */
- #define D_FWFUNCTION 0x01000 /* forward function */
- #define D_LABEL 0x02000 /* a label */
- #define D_LBOUND 0x04000 /* lower bound identifier in conformant array */
- #define D_UBOUND 0x08000 /* upper bound identifier in conformant array */
- #define D_FORWARD 0x10000 /* directive "forward" */
- #define D_EXTERN 0x20000 /* directive "extern" */
- #define D_ERROR 0x40000 /* a compiler generated definition for an
- * undefined variable
- */
- #define D_VALUE (D_FUNCTION | D_CONST | D_ENUM | D_FIELD | D_VARIABLE\
- | D_FWFUNCTION | D_LBOUND | D_UBOUND)
- #define D_ROUTINE (D_FUNCTION | D_FWFUNCTION | D_PROCEDURE | D_FWPROCEDURE)
- unsigned short df_flags;
- #define D_NOREG 0x01 /* set if it may not reside in a register */
- #define D_VALPAR 0x02 /* set if it is a value parameter */
- #define D_VARPAR 0x04 /* set if it is a var parameter */
- #define D_LOOPVAR 0x08 /* set if it is a contol-variable */
- #define D_EXTERNAL 0x10 /* set if proc/func is external declared */
- #define D_PROGPAR 0x20 /* set if input/output was mentioned in
- * the program-heading
- */
- struct type *df_type;
- union {
- struct constant df_constant;
- struct variable df_variable;
- struct bound df_bound;
- struct enumval df_enum;
- struct field df_field;
- struct lab df_label;
- struct forwtype *df_fwtype;
- struct dfproc df_proc;
- int df_reqname; /* define for required name */
- } df_value;
- #define df_fortype df_value.df_fwtype
- };
- /* ALLOCDEF "def" 50 */
- extern struct def
- *define(),
- *MkDef(),
- *DeclProc(),
- *DeclFunc();
- extern struct def
- *lookup(),
- *lookfor();
- #define NULLDEF ((struct def *) 0)
|