Merge from vendor branch GCC:
[dragonfly.git] / contrib / gcc-3.4 / gcc / f / info.h
1 /* info.h -- Public #include File (module.h template V1.0)
2    Copyright (C) 1995 Free Software Foundation, Inc.
3    Contributed by James Craig Burley.
4
5 This file is part of GNU Fortran.
6
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Fortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.
21
22    Owning Modules:
23       info.c
24
25    Modifications:
26       30-Aug-90  JCB  2.0
27          Extensive rewrite for new cleaner approach.
28 */
29
30 /* Allow multiple inclusion to work. */
31
32 #ifndef GCC_F_INFO_H
33 #define GCC_F_INFO_H
34
35 /* Simple definitions and enumerations. */
36
37 typedef enum
38   {
39 #define FFEINFO_BASICTYPE(KWD,LNAM,SNAM) KWD,
40 #include "info-b.def"
41 #undef FFEINFO_BASICTYPE
42     FFEINFO_basictype
43   } ffeinfoBasictype;
44
45 typedef enum
46   {                             /* If these kindtypes aren't in size order,
47                                    change _kindtype_max. */
48     FFEINFO_kindtypeNONE,
49     FFEINFO_kindtypeINTEGER1,
50     FFEINFO_kindtypeINTEGER2,
51     FFEINFO_kindtypeINTEGER3,
52     FFEINFO_kindtypeINTEGER4,
53     FFEINFO_kindtypeINTEGER5,
54     FFEINFO_kindtypeINTEGER6,
55     FFEINFO_kindtypeINTEGER7,
56     FFEINFO_kindtypeINTEGER8,
57     FFEINFO_kindtypeLOGICAL1 = 1,       /* Ok to omit, but ok to overlap. */
58     FFEINFO_kindtypeLOGICAL2,
59     FFEINFO_kindtypeLOGICAL3,
60     FFEINFO_kindtypeLOGICAL4,
61     FFEINFO_kindtypeLOGICAL5,
62     FFEINFO_kindtypeLOGICAL6,
63     FFEINFO_kindtypeLOGICAL7,
64     FFEINFO_kindtypeLOGICAL8,
65     FFEINFO_kindtypeREAL1 = 1,  /* Ok to omit, but ok to overlap. */
66     FFEINFO_kindtypeREAL2,
67     FFEINFO_kindtypeREAL3,
68     FFEINFO_kindtypeREAL4,
69     FFEINFO_kindtypeREAL5,
70     FFEINFO_kindtypeREAL6,
71     FFEINFO_kindtypeREAL7,
72     FFEINFO_kindtypeREAL8,
73     FFEINFO_kindtypeCHARACTER1 = 1,     /* Ok to omit, but ok to overlap. */
74     FFEINFO_kindtypeCHARACTER2,
75     FFEINFO_kindtypeCHARACTER3,
76     FFEINFO_kindtypeCHARACTER4,
77     FFEINFO_kindtypeCHARACTER5,
78     FFEINFO_kindtypeCHARACTER6,
79     FFEINFO_kindtypeCHARACTER7,
80     FFEINFO_kindtypeCHARACTER8,
81     FFEINFO_kindtypeANY,
82     FFEINFO_kindtype
83   } ffeinfoKindtype;
84
85 typedef enum
86   {
87 #define FFEINFO_KIND(KWD,LNAM,SNAM) KWD,
88 #include "info-k.def"
89 #undef FFEINFO_KIND
90     FFEINFO_kind
91   } ffeinfoKind;
92
93 typedef enum
94   {
95 #define FFEINFO_WHERE(KWD,LNAM,SNAM) KWD,
96 #include "info-w.def"
97 #undef FFEINFO_WHERE
98     FFEINFO_where
99   } ffeinfoWhere;
100
101 /* Typedefs. */
102
103 typedef struct _ffeinfo_ ffeinfo;
104 typedef char ffeinfoRank;
105
106 /* Include files needed by this one. */
107
108 #include "target.h"
109 #include "type.h"
110
111 /* Structure definitions. */
112
113 struct _ffeinfo_
114   {
115     ffeinfoBasictype basictype;
116     ffeinfoKindtype kindtype;
117     ffeinfoRank rank;
118     ffeinfoKind kind;
119     ffeinfoWhere where;
120     ffetargetCharacterSize size;
121   };
122
123 /* Global objects accessed by users of this module. */
124
125
126 /* Declare functions with prototypes. */
127
128 ffeinfoBasictype ffeinfo_basictype_combine (ffeinfoBasictype l,
129                                             ffeinfoBasictype r);
130 const char *ffeinfo_basictype_string (ffeinfoBasictype basictype);
131 void ffeinfo_init_0 (void);
132 const char *ffeinfo_kind_message (ffeinfoKind kind);
133 const char *ffeinfo_kind_string (ffeinfoKind kind);
134 ffeinfoKindtype ffeinfo_kindtype_max(ffeinfoBasictype bt,
135                                      ffeinfoKindtype k1,
136                                      ffeinfoKindtype k2);
137 const char *ffeinfo_kindtype_string (ffeinfoKindtype kind_type);
138 const char *ffeinfo_where_string (ffeinfoWhere where);
139 ffeinfo ffeinfo_new (ffeinfoBasictype basictype, ffeinfoKindtype kindtype,
140                      ffeinfoRank rank, ffeinfoKind kind, ffeinfoWhere where,
141                      ffetargetCharacterSize size);
142 void ffeinfo_set_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype,
143                        ffetype type);
144 ffetype ffeinfo_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype);
145
146 /* Define macros. */
147
148 #define ffeinfo_basictype(i) (i.basictype)
149 #define ffeinfo_init_1()
150 #define ffeinfo_init_2()
151 #define ffeinfo_init_3()
152 #define ffeinfo_init_4()
153 #define ffeinfo_kind(i) (i.kind)
154 #define ffeinfo_kindtype(i) (i.kindtype)
155 #ifdef __GNUC__
156 #define ffeinfo_new(bt,kt,r,k,w,sz) \
157   ((ffeinfo) {(bt), (kt), (r), (k), (w), (sz)})
158 #endif
159 #define ffeinfo_new_any()                                                     \
160   ffeinfo_new (FFEINFO_basictypeANY, FFEINFO_kindtypeANY, 0,                  \
161                FFEINFO_kindANY, FFEINFO_whereANY,                             \
162                FFETARGET_charactersizeNONE)
163 #define ffeinfo_new_null()                                                    \
164   ffeinfo_new (FFEINFO_basictypeNONE, FFEINFO_kindtypeNONE, 0,                \
165                FFEINFO_kindNONE, FFEINFO_whereNONE,                           \
166                FFETARGET_charactersizeNONE)
167 #define ffeinfo_rank(i) (i.rank)
168 #define ffeinfo_size(i) (i.size)
169 #define ffeinfo_terminate_0()
170 #define ffeinfo_terminate_1()
171 #define ffeinfo_terminate_2()
172 #define ffeinfo_terminate_3()
173 #define ffeinfo_terminate_4()
174 #define ffeinfo_use(i) i
175 #define ffeinfo_where(i) (i.where)
176
177 #define FFEINFO_kindtypeINTEGERDEFAULT FFEINFO_kindtypeINTEGER1
178 #define FFEINFO_kindtypeLOGICALDEFAULT FFEINFO_kindtypeLOGICAL1
179 #define FFEINFO_kindtypeREALDEFAULT FFEINFO_kindtypeREAL1
180 #define FFEINFO_kindtypeREALDOUBLE FFEINFO_kindtypeREAL2
181 #define FFEINFO_kindtypeREALQUAD FFEINFO_kindtypeREAL3
182 #define FFEINFO_kindtypeCHARACTERDEFAULT FFEINFO_kindtypeCHARACTER1
183
184 /* End of #include file. */
185
186 #endif /* ! GCC_F_INFO_H */