]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/f/info.h
PR c++/17413
[thirdparty/gcc.git] / gcc / f / info.h
CommitLineData
8e5578ea 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
5This file is part of GNU Fortran.
6
7GNU Fortran is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Fortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Fortran; see the file COPYING. If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-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
37typedef 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
45typedef 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
85typedef 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
93typedef 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
103typedef struct _ffeinfo_ ffeinfo;
104typedef char ffeinfoRank;
105
106/* Include files needed by this one. */
107
108#include "target.h"
109#include "type.h"
110
111/* Structure definitions. */
112
113struct _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
128ffeinfoBasictype ffeinfo_basictype_combine (ffeinfoBasictype l,
129 ffeinfoBasictype r);
130const char *ffeinfo_basictype_string (ffeinfoBasictype basictype);
131void ffeinfo_init_0 (void);
132const char *ffeinfo_kind_message (ffeinfoKind kind);
133const char *ffeinfo_kind_string (ffeinfoKind kind);
134ffeinfoKindtype ffeinfo_kindtype_max(ffeinfoBasictype bt,
135 ffeinfoKindtype k1,
136 ffeinfoKindtype k2);
137const char *ffeinfo_kindtype_string (ffeinfoKindtype kind_type);
138const char *ffeinfo_where_string (ffeinfoWhere where);
139ffeinfo ffeinfo_new (ffeinfoBasictype basictype, ffeinfoKindtype kindtype,
140 ffeinfoRank rank, ffeinfoKind kind, ffeinfoWhere where,
141 ffetargetCharacterSize size);
142void ffeinfo_set_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype,
143 ffetype type);
144ffetype 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 */