| /* info.h -- Public #include File (module.h template V1.0) |
| Copyright (C) 1995 Free Software Foundation, Inc. |
| Contributed by James Craig Burley. |
| |
| This file is part of GNU Fortran. |
| |
| GNU Fortran is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Fortran is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Fortran; see the file COPYING. If not, write to |
| the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| Owning Modules: |
| info.c |
| |
| Modifications: |
| 30-Aug-90 JCB 2.0 |
| Extensive rewrite for new cleaner approach. |
| */ |
| |
| /* Allow multiple inclusion to work. */ |
| |
| #ifndef GCC_F_INFO_H |
| #define GCC_F_INFO_H |
| |
| /* Simple definitions and enumerations. */ |
| |
| typedef enum |
| { |
| #define FFEINFO_BASICTYPE(KWD,LNAM,SNAM) KWD, |
| #include "info-b.def" |
| #undef FFEINFO_BASICTYPE |
| FFEINFO_basictype |
| } ffeinfoBasictype; |
| |
| typedef enum |
| { /* If these kindtypes aren't in size order, |
| change _kindtype_max. */ |
| FFEINFO_kindtypeNONE, |
| FFEINFO_kindtypeINTEGER1, |
| FFEINFO_kindtypeINTEGER2, |
| FFEINFO_kindtypeINTEGER3, |
| FFEINFO_kindtypeINTEGER4, |
| FFEINFO_kindtypeINTEGER5, |
| FFEINFO_kindtypeINTEGER6, |
| FFEINFO_kindtypeINTEGER7, |
| FFEINFO_kindtypeINTEGER8, |
| FFEINFO_kindtypeLOGICAL1 = 1, /* Ok to omit, but ok to overlap. */ |
| FFEINFO_kindtypeLOGICAL2, |
| FFEINFO_kindtypeLOGICAL3, |
| FFEINFO_kindtypeLOGICAL4, |
| FFEINFO_kindtypeLOGICAL5, |
| FFEINFO_kindtypeLOGICAL6, |
| FFEINFO_kindtypeLOGICAL7, |
| FFEINFO_kindtypeLOGICAL8, |
| FFEINFO_kindtypeREAL1 = 1, /* Ok to omit, but ok to overlap. */ |
| FFEINFO_kindtypeREAL2, |
| FFEINFO_kindtypeREAL3, |
| FFEINFO_kindtypeREAL4, |
| FFEINFO_kindtypeREAL5, |
| FFEINFO_kindtypeREAL6, |
| FFEINFO_kindtypeREAL7, |
| FFEINFO_kindtypeREAL8, |
| FFEINFO_kindtypeCHARACTER1 = 1, /* Ok to omit, but ok to overlap. */ |
| FFEINFO_kindtypeCHARACTER2, |
| FFEINFO_kindtypeCHARACTER3, |
| FFEINFO_kindtypeCHARACTER4, |
| FFEINFO_kindtypeCHARACTER5, |
| FFEINFO_kindtypeCHARACTER6, |
| FFEINFO_kindtypeCHARACTER7, |
| FFEINFO_kindtypeCHARACTER8, |
| FFEINFO_kindtypeANY, |
| FFEINFO_kindtype |
| } ffeinfoKindtype; |
| |
| typedef enum |
| { |
| #define FFEINFO_KIND(KWD,LNAM,SNAM) KWD, |
| #include "info-k.def" |
| #undef FFEINFO_KIND |
| FFEINFO_kind |
| } ffeinfoKind; |
| |
| typedef enum |
| { |
| #define FFEINFO_WHERE(KWD,LNAM,SNAM) KWD, |
| #include "info-w.def" |
| #undef FFEINFO_WHERE |
| FFEINFO_where |
| } ffeinfoWhere; |
| |
| /* Typedefs. */ |
| |
| typedef struct _ffeinfo_ ffeinfo; |
| typedef char ffeinfoRank; |
| |
| /* Include files needed by this one. */ |
| |
| #include "target.h" |
| #include "type.h" |
| |
| /* Structure definitions. */ |
| |
| struct _ffeinfo_ |
| { |
| ffeinfoBasictype basictype; |
| ffeinfoKindtype kindtype; |
| ffeinfoRank rank; |
| ffeinfoKind kind; |
| ffeinfoWhere where; |
| ffetargetCharacterSize size; |
| }; |
| |
| /* Global objects accessed by users of this module. */ |
| |
| |
| /* Declare functions with prototypes. */ |
| |
| ffeinfoBasictype ffeinfo_basictype_combine (ffeinfoBasictype l, |
| ffeinfoBasictype r); |
| const char *ffeinfo_basictype_string (ffeinfoBasictype basictype); |
| void ffeinfo_init_0 (void); |
| const char *ffeinfo_kind_message (ffeinfoKind kind); |
| const char *ffeinfo_kind_string (ffeinfoKind kind); |
| ffeinfoKindtype ffeinfo_kindtype_max(ffeinfoBasictype bt, |
| ffeinfoKindtype k1, |
| ffeinfoKindtype k2); |
| const char *ffeinfo_kindtype_string (ffeinfoKindtype kind_type); |
| const char *ffeinfo_where_string (ffeinfoWhere where); |
| ffeinfo ffeinfo_new (ffeinfoBasictype basictype, ffeinfoKindtype kindtype, |
| ffeinfoRank rank, ffeinfoKind kind, ffeinfoWhere where, |
| ffetargetCharacterSize size); |
| void ffeinfo_set_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype, |
| ffetype type); |
| ffetype ffeinfo_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype); |
| |
| /* Define macros. */ |
| |
| #define ffeinfo_basictype(i) (i.basictype) |
| #define ffeinfo_init_1() |
| #define ffeinfo_init_2() |
| #define ffeinfo_init_3() |
| #define ffeinfo_init_4() |
| #define ffeinfo_kind(i) (i.kind) |
| #define ffeinfo_kindtype(i) (i.kindtype) |
| #ifdef __GNUC__ |
| #define ffeinfo_new(bt,kt,r,k,w,sz) \ |
| ((ffeinfo) {(bt), (kt), (r), (k), (w), (sz)}) |
| #endif |
| #define ffeinfo_new_any() \ |
| ffeinfo_new (FFEINFO_basictypeANY, FFEINFO_kindtypeANY, 0, \ |
| FFEINFO_kindANY, FFEINFO_whereANY, \ |
| FFETARGET_charactersizeNONE) |
| #define ffeinfo_new_null() \ |
| ffeinfo_new (FFEINFO_basictypeNONE, FFEINFO_kindtypeNONE, 0, \ |
| FFEINFO_kindNONE, FFEINFO_whereNONE, \ |
| FFETARGET_charactersizeNONE) |
| #define ffeinfo_rank(i) (i.rank) |
| #define ffeinfo_size(i) (i.size) |
| #define ffeinfo_terminate_0() |
| #define ffeinfo_terminate_1() |
| #define ffeinfo_terminate_2() |
| #define ffeinfo_terminate_3() |
| #define ffeinfo_terminate_4() |
| #define ffeinfo_use(i) i |
| #define ffeinfo_where(i) (i.where) |
| |
| #define FFEINFO_kindtypeINTEGERDEFAULT FFEINFO_kindtypeINTEGER1 |
| #define FFEINFO_kindtypeLOGICALDEFAULT FFEINFO_kindtypeLOGICAL1 |
| #define FFEINFO_kindtypeREALDEFAULT FFEINFO_kindtypeREAL1 |
| #define FFEINFO_kindtypeREALDOUBLE FFEINFO_kindtypeREAL2 |
| #define FFEINFO_kindtypeREALQUAD FFEINFO_kindtypeREAL3 |
| #define FFEINFO_kindtypeCHARACTERDEFAULT FFEINFO_kindtypeCHARACTER1 |
| |
| /* End of #include file. */ |
| |
| #endif /* ! GCC_F_INFO_H */ |