OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [fortran/] [misc.c] - Blame information for rev 867

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 712 jeremybenn
/* Miscellaneous stuff that doesn't fit anywhere else.
2
   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
3
   Free Software Foundation, Inc.
4
   Contributed by Andy Vaught
5
 
6
This file is part of GCC.
7
 
8
GCC is free software; you can redistribute it and/or modify it under
9
the terms of the GNU General Public License as published by the Free
10
Software Foundation; either version 3, or (at your option) any later
11
version.
12
 
13
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14
WARRANTY; without even the implied warranty of MERCHANTABILITY or
15
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16
for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GCC; see the file COPYING3.  If not see
20
<http://www.gnu.org/licenses/>.  */
21
 
22
#include "config.h"
23
#include "system.h"
24
#include "gfortran.h"
25
 
26
 
27
/* Get terminal width.  */
28
 
29
int
30
gfc_terminal_width (void)
31
{
32
  return 80;
33
}
34
 
35
 
36
/* Initialize a typespec to unknown.  */
37
 
38
void
39
gfc_clear_ts (gfc_typespec *ts)
40
{
41
  ts->type = BT_UNKNOWN;
42
  ts->u.derived = NULL;
43
  ts->kind = 0;
44
  ts->u.cl = NULL;
45
  ts->interface = NULL;
46
  /* flag that says if the type is C interoperable */
47
  ts->is_c_interop = 0;
48
  /* says what f90 type the C kind interops with */
49
  ts->f90_type = BT_UNKNOWN;
50
  /* flag that says whether it's from iso_c_binding or not */
51
  ts->is_iso_c = 0;
52
  ts->deferred = false;
53
}
54
 
55
 
56
/* Open a file for reading.  */
57
 
58
FILE *
59
gfc_open_file (const char *name)
60
{
61
  if (!*name)
62
    return stdin;
63
 
64
  return fopen (name, "r");
65
}
66
 
67
 
68
/* Return a string for each type.  */
69
 
70
const char *
71
gfc_basic_typename (bt type)
72
{
73
  const char *p;
74
 
75
  switch (type)
76
    {
77
    case BT_INTEGER:
78
      p = "INTEGER";
79
      break;
80
    case BT_REAL:
81
      p = "REAL";
82
      break;
83
    case BT_COMPLEX:
84
      p = "COMPLEX";
85
      break;
86
    case BT_LOGICAL:
87
      p = "LOGICAL";
88
      break;
89
    case BT_CHARACTER:
90
      p = "CHARACTER";
91
      break;
92
    case BT_HOLLERITH:
93
      p = "HOLLERITH";
94
      break;
95
    case BT_DERIVED:
96
      p = "DERIVED";
97
      break;
98
    case BT_CLASS:
99
      p = "CLASS";
100
      break;
101
    case BT_PROCEDURE:
102
      p = "PROCEDURE";
103
      break;
104
    case BT_VOID:
105
      p = "VOID";
106
      break;
107
    case BT_UNKNOWN:
108
      p = "UNKNOWN";
109
      break;
110
    default:
111
      gfc_internal_error ("gfc_basic_typename(): Undefined type");
112
    }
113
 
114
  return p;
115
}
116
 
117
 
118
/* Return a string describing the type and kind of a typespec.  Because
119
   we return alternating buffers, this subroutine can appear twice in
120
   the argument list of a single statement.  */
121
 
122
const char *
123
gfc_typename (gfc_typespec *ts)
124
{
125
  static char buffer1[GFC_MAX_SYMBOL_LEN + 7];  /* 7 for "TYPE()" + '\0'.  */
126
  static char buffer2[GFC_MAX_SYMBOL_LEN + 7];
127
  static int flag = 0;
128
  char *buffer;
129
 
130
  buffer = flag ? buffer1 : buffer2;
131
  flag = !flag;
132
 
133
  switch (ts->type)
134
    {
135
    case BT_INTEGER:
136
      sprintf (buffer, "INTEGER(%d)", ts->kind);
137
      break;
138
    case BT_REAL:
139
      sprintf (buffer, "REAL(%d)", ts->kind);
140
      break;
141
    case BT_COMPLEX:
142
      sprintf (buffer, "COMPLEX(%d)", ts->kind);
143
      break;
144
    case BT_LOGICAL:
145
      sprintf (buffer, "LOGICAL(%d)", ts->kind);
146
      break;
147
    case BT_CHARACTER:
148
      sprintf (buffer, "CHARACTER(%d)", ts->kind);
149
      break;
150
    case BT_HOLLERITH:
151
      sprintf (buffer, "HOLLERITH");
152
      break;
153
    case BT_DERIVED:
154
      sprintf (buffer, "TYPE(%s)", ts->u.derived->name);
155
      break;
156
    case BT_CLASS:
157
      sprintf (buffer, "CLASS(%s)",
158
               ts->u.derived->components->ts.u.derived->name);
159
      break;
160
    case BT_PROCEDURE:
161
      strcpy (buffer, "PROCEDURE");
162
      break;
163
    case BT_UNKNOWN:
164
      strcpy (buffer, "UNKNOWN");
165
      break;
166
    default:
167
      gfc_internal_error ("gfc_typename(): Undefined type");
168
    }
169
 
170
  return buffer;
171
}
172
 
173
 
174
/* Given an mstring array and a code, locate the code in the table,
175
   returning a pointer to the string.  */
176
 
177
const char *
178
gfc_code2string (const mstring *m, int code)
179
{
180
  while (m->string != NULL)
181
    {
182
      if (m->tag == code)
183
        return m->string;
184
      m++;
185
    }
186
 
187
  gfc_internal_error ("gfc_code2string(): Bad code");
188
  /* Not reached */
189
}
190
 
191
 
192
/* Given an mstring array and a string, returns the value of the tag
193
   field.  Returns the final tag if no matches to the string are found.  */
194
 
195
int
196
gfc_string2code (const mstring *m, const char *string)
197
{
198
  for (; m->string != NULL; m++)
199
    if (strcmp (m->string, string) == 0)
200
      return m->tag;
201
 
202
  return m->tag;
203
}
204
 
205
 
206
/* Convert an intent code to a string.  */
207
/* TODO: move to gfortran.h as define.  */
208
 
209
const char *
210
gfc_intent_string (sym_intent i)
211
{
212
  return gfc_code2string (intents, i);
213
}
214
 
215
 
216
/***************** Initialization functions ****************/
217
 
218
/* Top level initialization.  */
219
 
220
void
221
gfc_init_1 (void)
222
{
223
  gfc_error_init_1 ();
224
  gfc_scanner_init_1 ();
225
  gfc_arith_init_1 ();
226
  gfc_intrinsic_init_1 ();
227
}
228
 
229
 
230
/* Per program unit initialization.  */
231
 
232
void
233
gfc_init_2 (void)
234
{
235
  gfc_symbol_init_2 ();
236
  gfc_module_init_2 ();
237
}
238
 
239
 
240
/******************* Destructor functions ******************/
241
 
242
/* Call all of the top level destructors.  */
243
 
244
void
245
gfc_done_1 (void)
246
{
247
  gfc_scanner_done_1 ();
248
  gfc_intrinsic_done_1 ();
249
  gfc_arith_done_1 ();
250
}
251
 
252
 
253
/* Per program unit destructors.  */
254
 
255
void
256
gfc_done_2 (void)
257
{
258
  gfc_symbol_done_2 ();
259
  gfc_module_done_2 ();
260
}
261
 
262
 
263
/* Returns the index into the table of C interoperable kinds where the
264
   kind with the given name (c_kind_name) was found.  */
265
 
266
int
267
get_c_kind(const char *c_kind_name, CInteropKind_t kinds_table[])
268
{
269
  int index = 0;
270
 
271
  for (index = 0; index < ISOCBINDING_LAST; index++)
272
    if (strcmp (kinds_table[index].name, c_kind_name) == 0)
273
      return index;
274
 
275
  return ISOCBINDING_INVALID;
276
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.