/*
 * This type info format closely matches that defined in
 * the book "Compiler Design in C" by Holub.  Feel free
 * to borrow it from me if you need to reference it.
 */
#ifndef _H_TYPES_
#define _H_TYPES_

#define nyi()	not_implemented(__FILE__,__LINE__)

extern void not_implemented _ANSI_PROTO_((char*,int));

extern void type_init _ANSI_PROTO_((void));

extern typeinfo_t *typeof_void _ANSI_PROTO_((void));
extern typeinfo_t *typeof_char _ANSI_PROTO_((void));
extern typeinfo_t *typeof_int _ANSI_PROTO_((int is_unsigned));
extern typeinfo_t *typeof_float _ANSI_PROTO_((void));
extern typeinfo_t *typeof_double _ANSI_PROTO_((void));

extern typeinfo_t *typeof_typemod _ANSI_PROTO_((int));
extern typeinfo_t *typeof_typespec _ANSI_PROTO_((typeinfo_t*));
extern typeinfo_t *typeof_specifier _ANSI_PROTO_((symbol_t*));

extern decl_class_t decl_class _ANSI_PROTO_((typeinfo_t*));

extern symbol_t *copy_sym _ANSI_PROTO_((symbol_t*));
extern symbol_t *concat_symbols _ANSI_PROTO_((symbol_t*,symbol_t*));
extern symbol_t *grok_enumerator _ANSI_PROTO_((node_t*,node_t*));

extern void grok_declarations _ANSI_PROTO_((symbol_t*));

extern void start_typedef _ANSI_PROTO_((void));
extern void storage_class _ANSI_PROTO_((int));
extern void type_mod _ANSI_PROTO_((int));
extern void type_qual _ANSI_PROTO_((int));

extern symbol_t *anonymous_enum _ANSI_PROTO_((symbol_t*));
extern symbol_t *named_enum _ANSI_PROTO_((node_t*,symbol_t*));
extern symbol_t *enum_reference _ANSI_PROTO_((node_t*));
extern symbol_t *anonymous_rec _ANSI_PROTO_((int,symbol_t*));
extern symbol_t *named_rec _ANSI_PROTO_((int,node_t*,symbol_t*));
extern symbol_t *rec_reference _ANSI_PROTO_((int,node_t*));
extern symbol_t *novar_declaration _ANSI_PROTO_((typeinfo_t*));
extern symbol_t *var_declaration _ANSI_PROTO_((typeinfo_t*, node_t*));
extern symbol_t *field_declaration _ANSI_PROTO_((typeinfo_t*, node_t*));
extern symbol_t *function_spec _ANSI_PROTO_((typeinfo_t*, node_t*));

extern symbol_t *elipsis_arg _ANSI_PROTO_((void));

extern typeinfo_t *noname_type _ANSI_PROTO_((typeinfo_t*, node_t*));

extern symbol_t *noname_simple_param _ANSI_PROTO_((typeinfo_t*));
extern symbol_t *noname_abstract_param _ANSI_PROTO_((typeinfo_t*, node_t*));
extern symbol_t *named_abstract_param _ANSI_PROTO_((typeinfo_t*, node_t*));

extern void typed_external_decl _ANSI_PROTO_((symbol_t*));
extern void function_def _ANSI_PROTO_((symbol_t*));
extern void KnR_params _ANSI_PROTO_((symbol_t*,symbol_t*));

#endif /* _H_TYPES_ */


syntax highlighted by Code2HTML, v. 0.9.1