/* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". */ #ifndef IDF_H_ #define IDF_H_ /* $Id$ */ /* IDENTIFIER DESCRIPTOR */ #include "parameters.h" #include "arith.h" struct id_u { int idd_reserved; /* non-zero for reserved words */ char *idd_file; /* file containing the occurrence */ unsigned int idd_line; /* line number of the occurrence */ struct def *idd_label; /* labels */ struct def *idd_def; /* variables, typedefs, enum-constants */ struct sdef *idd_sdef; /* selector tags */ struct tag *idd_tag; /* struct, union, and enum tags */ int idd_special; /* special action needed at occurrence */ }; #define IDF_TYPE struct id_u #define id_macro id_user.idd_macro #define id_resmac id_user.idd_resmac #define id_reserved id_user.idd_reserved #define id_file id_user.idd_file #define id_line id_user.idd_line #define id_label id_user.idd_label #define id_def id_user.idd_def #define id_sdef id_user.idd_sdef #define id_tag id_user.idd_tag #define id_special id_user.idd_special #include extern int level; struct decspecs; struct declarator; struct type; struct formal; struct idf *gen_idf(void); int is_anon_idf(struct idf *idf); void declare_idf(struct decspecs *ds, struct declarator *dc, int lvl); int actual_declaration(int sc, struct type *tp); void global_redecl(register struct idf *idf, int new_sc, struct type *tp); int good_formal(register struct def *def, register struct idf *idf); void declare_params(struct declarator *dc); void idf_initialized(register struct idf *idf); void declare_parameter(struct idf *idf); void declare_enum(struct type *tp, struct idf *idf, arith l); void check_formals(struct idf *idf, struct declarator *dc); void declare_formals(struct idf *idf, arith *fp); int regtype(struct type *tp); void add_def(struct idf *idf, int sc, struct type *tp, int lvl); void update_ahead(register struct idf *idf); void free_formals(register struct formal *fm); #endif