X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ff%2Fcom.h;h=5e20e2b10fb659ba756b4c69ea56b38f2b892a82;hb=6cedc59a34e497885da0908b1c5f393a213dce41;hp=61f0e8872ecd20bf68413b37bb5e850c9ac9e559;hpb=298f96db2201fe2f5f3e8e2d20c17b9d692ab939;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/f/com.h b/gcc/f/com.h index 61f0e8872ec..5e20e2b10fb 100644 --- a/gcc/f/com.h +++ b/gcc/f/com.h @@ -1,6 +1,6 @@ /* com.h -- Public #include File (module.h template V1.0) - Copyright (C) 1995-1997 Free Software Foundation, Inc. - Contributed by James Craig Burley (burley@gnu.org). + Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + Contributed by James Craig Burley. This file is part of GNU Fortran. @@ -27,35 +27,18 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* Allow multiple inclusion to work. */ -#ifndef _H_f_com -#define _H_f_com +#ifndef GCC_F_COM_H +#define GCC_F_COM_H /* Simple definitions and enumerations. */ #define FFECOM_dimensionsMAX 7 /* Max # dimensions (quick hack). */ -#define FFECOM_targetFFE 1 -#define FFECOM_targetGCC 2 - -#ifndef FFE_STANDALONE -#define FFECOM_targetCURRENT FFECOM_targetGCC /* Backend! */ -#define FFECOM_ONEPASS 0 -#else -#define FFECOM_targetCURRENT FFECOM_targetFFE -#define FFECOM_ONEPASS 0 -#endif - -#if FFECOM_ONEPASS -#define FFECOM_TWOPASS 0 -#else -#define FFECOM_TWOPASS 1 -#endif - #define FFECOM_SIZE_UNIT "byte" /* Singular form. */ #define FFECOM_SIZE_UNITS "bytes" /* Plural form. */ -#if FFECOM_targetCURRENT == FFECOM_targetGCC #define FFECOM_constantNULL NULL_TREE +#define FFECOM_nonterNULL NULL_TREE #define FFECOM_globalNULL NULL_TREE #define FFECOM_labelNULL NULL_TREE #define FFECOM_storageNULL NULL_TREE @@ -83,68 +66,29 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA to build the libf2c with which g77-generated code is linked, or there will probably be bugs, some of them difficult to detect or even trigger. */ -#include "config.j" - -/* Do we need int (for 32-bit or 64-bit systems) or long (16-bit or - normally 32-bit) for f2c-type integers? */ - -#ifndef BITS_PER_WORD -#define BITS_PER_WORD 32 -#endif - -#ifndef CHAR_TYPE_SIZE -#define CHAR_TYPE_SIZE BITS_PER_UNIT -#endif - -#ifndef SHORT_TYPE_SIZE -#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2)) -#endif - -#ifndef INT_TYPE_SIZE -#define INT_TYPE_SIZE BITS_PER_WORD -#endif - -#ifndef LONG_TYPE_SIZE -#define LONG_TYPE_SIZE BITS_PER_WORD -#endif - -#ifndef LONG_LONG_TYPE_SIZE -#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2) -#endif - -#ifndef WCHAR_UNSIGNED -#define WCHAR_UNSIGNED 0 -#endif - -#ifndef FLOAT_TYPE_SIZE -#define FLOAT_TYPE_SIZE BITS_PER_WORD -#endif - -#ifndef DOUBLE_TYPE_SIZE -#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) -#endif - -#ifndef LONG_DOUBLE_TYPE_SIZE -#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) -#endif - -#if LONG_TYPE_SIZE == FLOAT_TYPE_SIZE -# define FFECOM_f2cINTEGER FFECOM_f2ccodeLONG -# define FFECOM_f2cLOGICAL FFECOM_f2ccodeLONG -#elif INT_TYPE_SIZE == FLOAT_TYPE_SIZE -# define FFECOM_f2cINTEGER FFECOM_f2ccodeINT -# define FFECOM_f2cLOGICAL FFECOM_f2ccodeINT -#else -# error Cannot find a suitable type for FFECOM_f2cINTEGER -#endif - -#if LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) -# define FFECOM_f2cLONGINT FFECOM_f2ccodeLONG -#elif LONG_LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) -# define FFECOM_f2cLONGINT FFECOM_f2ccodeLONGLONG -#else -# error Cannot find a suitable type for FFECOM_f2cLONGINT -#endif +/* The C front-end provides __g77_integer and __g77_uinteger types so that + the appropriately-sized signed and unsigned integer types are available + for libf2c. If you change this, also the definitions of those types + in ../c-decl.c. */ +#define FFECOM_f2cINTEGER \ + (LONG_TYPE_SIZE == FLOAT_TYPE_SIZE \ + ? FFECOM_f2ccodeLONG \ + : (INT_TYPE_SIZE == FLOAT_TYPE_SIZE \ + ? FFECOM_f2ccodeINT \ + : (abort (), -1))) + +#define FFECOM_f2cLOGICAL FFECOM_f2cINTEGER + +/* The C front-end provides __g77_longint and __g77_ulongint types so that + the appropriately-sized signed and unsigned integer types are available + for libf2c. If you change this, also the definitions of those types + in ../c-decl.c. */ +#define FFECOM_f2cLONGINT \ + (LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) \ + ? FFECOM_f2ccodeLONG \ + : (LONG_LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) \ + ? FFECOM_f2ccodeLONGLONG \ + : (abort (), -1))) #define FFECOM_f2cADDRESS FFECOM_f2ccodeCHARPTR #define FFECOM_f2cSHORTINT FFECOM_f2ccodeSHORT @@ -171,39 +115,22 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA typedef enum { -#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) CODE, +#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) CODE, #include "com-rt.def" #undef DEFGFRT FFECOM_gfrt } ffecomGfrt; -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ - /* Typedefs. */ -#if FFECOM_targetCURRENT == FFECOM_targetGCC #ifndef TREE_CODE -#include "tree.j" +#include "tree.h" #endif -#ifndef BUILT_FOR_270 -#ifdef DECL_STATIC_CONSTRUCTOR /* In gcc/tree.h. */ -#define BUILT_FOR_270 1 -#else -#define BUILT_FOR_270 0 -#endif -#endif /* !defined (BUILT_FOR_270) */ - -#ifndef BUILT_FOR_280 -#ifdef DECL_ONE_ONLY /* In gcc/tree.h. */ -#define BUILT_FOR_280 1 -#else -#define BUILT_FOR_280 0 -#endif -#endif /* !defined (BUILT_FOR_280) */ - typedef tree ffecomConstant; #define FFECOM_constantHOOK +typedef tree ffecomNonter; +#define FFECOM_nonterHOOK typedef tree ffecomLabel; #define FFECOM_globalHOOK typedef tree ffecomGlobal; @@ -221,7 +148,6 @@ struct _ffecom_symbol_ tree assign_tree; /* For ASSIGN'ed vars. */ bool addr; /* Is address of item instead of item. */ }; -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ /* Include files needed by this one. */ @@ -236,9 +162,6 @@ struct _ffecom_symbol_ /* Global objects accessed by users of this module. */ -#if FFECOM_targetCURRENT == FFECOM_targetGCC -extern tree long_integer_type_node; -extern tree complex_double_type_node; extern tree string_type_node; extern tree ffecom_integer_type_node; extern tree ffecom_integer_zero_node; @@ -265,11 +188,9 @@ extern tree ffecom_f2c_ftnlen_two_node; extern tree ffecom_f2c_ptr_to_ftnlen_type_node; extern tree ffecom_f2c_ftnint_type_node; extern tree ffecom_f2c_ptr_to_ftnint_type_node; -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ /* Declare functions with prototypes. */ -#if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_1 (enum tree_code code, tree type, tree node); tree ffecom_1_fn (tree node); tree ffecom_2 (enum tree_code code, tree type, tree node1, tree node2); @@ -281,28 +202,30 @@ tree ffecom_3 (enum tree_code code, tree type, tree node1, tree node2, tree ffecom_3s (enum tree_code code, tree type, tree node1, tree node2, tree node3); tree ffecom_arg_expr (ffebld expr, tree *length); +tree ffecom_arg_ptr_to_const_expr (ffebld expr, tree *length); tree ffecom_arg_ptr_to_expr (ffebld expr, tree *length); -tree ffecom_call_gfrt (ffecomGfrt ix, tree args); +tree ffecom_call_gfrt (ffecomGfrt ix, tree args, tree hook); tree ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt, ffeinfoKindtype kt, tree tree_type); -tree ffecom_decl_field (tree context, tree prevfield, char *name, +tree ffecom_const_expr (ffebld expr); +tree ffecom_decl_field (tree context, tree prevfield, const char *name, tree type); -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ void ffecom_close_include (FILE *f); int ffecom_decode_include_option (char *spec); +tree ffecom_end_compstmt (void); void ffecom_end_transition (void); void ffecom_exec_transition (void); void ffecom_expand_let_stmt (ffebld dest, ffebld source); -#if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_expr (ffebld expr); tree ffecom_expr_assign (ffebld expr); tree ffecom_expr_assign_w (ffebld expr); -tree ffecom_expr_rw (ffebld expr); +tree ffecom_expr_rw (tree type, ffebld expr); +tree ffecom_expr_w (tree type, ffebld expr); void ffecom_finish_compile (void); void ffecom_finish_decl (tree decl, tree init, bool is_top_level); void ffecom_finish_progunit (void); -tree ffecom_get_invented_identifier (char *pattern, char *text, - int number); +tree ffecom_get_invented_identifier (const char *pattern, ...) + ATTRIBUTE_PRINTF_1; ffeinfoKindtype ffecom_gfrt_basictype (ffecomGfrt ix); ffeinfoKindtype ffecom_gfrt_kindtype (ffecomGfrt ix); void ffecom_init_0 (void); @@ -310,59 +233,45 @@ void ffecom_init_2 (void); tree ffecom_list_expr (ffebld list); tree ffecom_list_ptr_to_expr (ffebld list); tree ffecom_lookup_label (ffelab label); +tree ffecom_make_tempvar (const char *commentary, tree type, + ffetargetCharacterSize size, int elements); tree ffecom_modify (tree newtype, tree lhs, tree rhs); -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ -void ffecom_file (char *name); +void ffecom_save_tree_forever (tree t); +void ffecom_file (const char *name); void ffecom_notify_init_storage (ffestorag st); void ffecom_notify_init_symbol (ffesymbol s); void ffecom_notify_primary_entry (ffesymbol fn); FILE *ffecom_open_include (char *name, ffewhereLine l, ffewhereColumn c); -#if FFECOM_targetCURRENT == FFECOM_targetGCC -void ffecom_pop_calltemps (void); -void ffecom_pop_tempvar (tree var); +void ffecom_prepare_arg_ptr_to_expr (ffebld expr); +bool ffecom_prepare_end (void); +void ffecom_prepare_expr_ (ffebld expr, ffebld dest); +void ffecom_prepare_expr_rw (tree type, ffebld expr); +void ffecom_prepare_expr_w (tree type, ffebld expr); +void ffecom_prepare_ptr_to_expr (ffebld expr); +void ffecom_prepare_return_expr (ffebld expr); +tree ffecom_ptr_to_const_expr (ffebld expr); tree ffecom_ptr_to_expr (ffebld expr); -void ffecom_push_calltemps (void); -tree ffecom_push_tempvar (tree type, ffetargetCharacterSize size, - int elements, bool auto_pop); tree ffecom_return_expr (ffebld expr); tree ffecom_save_tree (tree t); +void ffecom_start_compstmt (void); tree ffecom_start_decl (tree decl, bool is_init); void ffecom_sym_commit (ffesymbol s); -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ ffesymbol ffecom_sym_end_transition (ffesymbol s); ffesymbol ffecom_sym_exec_transition (ffesymbol s); ffesymbol ffecom_sym_learned (ffesymbol s); -#if FFECOM_targetCURRENT == FFECOM_targetGCC void ffecom_sym_retract (ffesymbol s); tree ffecom_temp_label (void); tree ffecom_truth_value (tree expr); tree ffecom_truth_value_invert (tree expr); +tree ffecom_type_expr (ffebld expr); tree ffecom_which_entrypoint_decl (void); -/* These need to be in the front end with exactly these interfaces, - as they're called by the back end. */ - -int mark_addressable (tree expr); -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ - /* Define macros. */ -#if FFECOM_targetCURRENT == FFECOM_targetFFE -#define ffecom_expr(e) (e) -#define ffecom_init_0() -#define ffecom_init_2() -#define ffecom_label_kind() FFEINFO_kindtypeINTEGERDEFAULT -#define ffecom_pointer_kind() FFEINFO_kindtypeINTEGERDEFAULT -#define ffecom_ptr_to_expr(e) (e) -#define ffecom_sym_commit(s) -#define ffecom_sym_retract(s) -#endif /* FFECOM_targetCURRENT == FFECOM_targetFFE */ - -#if FFECOM_targetCURRENT == FFECOM_targetGCC #define ffecom_f2c_typecode(bt,kt) ffecom_f2c_typecode_[(bt)][(kt)] #define ffecom_label_kind() ffecom_label_kind_ #define ffecom_pointer_kind() ffecom_pointer_kind_ -#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ +#define ffecom_prepare_expr(e) ffecom_prepare_expr_ ((e), NULL) #define ffecom_init_1() #define ffecom_init_3() @@ -375,4 +284,4 @@ int mark_addressable (tree expr); /* End of #include file. */ -#endif +#endif /* ! GCC_F_COM_H */