1 /* Handle modules, which amounts to loading and saving symbols and
2 their attendant structures.
3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
5 Free Software Foundation, Inc.
6 Contributed by Andy Vaught
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
24 /* The syntax of gfortran modules resembles that of lisp lists, i.e. a
25 sequence of atoms, which can be left or right parenthesis, names,
26 integers or strings. Parenthesis are always matched which allows
27 us to skip over sections at high speed without having to know
28 anything about the internal structure of the lists. A "name" is
29 usually a fortran 95 identifier, but can also start with '@' in
30 order to reference a hidden symbol.
32 The first line of a module is an informational message about what
33 created the module, the file it came from and when it was created.
34 The second line is a warning for people not to edit the module.
35 The rest of the module looks like:
37 ( ( <Interface info for UPLUS> )
38 ( <Interface info for UMINUS> )
41 ( ( <name of operator interface> <module of op interface> <i/f1> ... )
44 ( ( <name of generic interface> <module of generic interface> <i/f1> ... )
47 ( ( <common name> <symbol> <saved flag>)
53 ( <Symbol Number (in no particular order)>
55 <Module name of symbol>
56 ( <symbol information> )
65 In general, symbols refer to other symbols by their symbol number,
66 which are zero based. Symbols are written to the module in no
74 #include "parse.h" /* FIXME */
76 #include "constructor.h"
78 #define MODULE_EXTENSION ".mod"
80 /* Don't put any single quote (') in MOD_VERSION,
81 if yout want it to be recognized. */
82 #define MOD_VERSION "5"
85 /* Structure that describes a position within a module file. */
94 /* Structure for list of symbols of intrinsic modules. */
107 P_UNKNOWN = 0, P_OTHER, P_NAMESPACE, P_COMPONENT, P_SYMBOL
111 /* The fixup structure lists pointers to pointers that have to
112 be updated when a pointer value becomes known. */
114 typedef struct fixup_t
117 struct fixup_t *next;
122 /* Structure for holding extra info needed for pointers being read. */
138 typedef struct pointer_info
140 BBT_HEADER (pointer_info);
144 /* The first component of each member of the union is the pointer
151 void *pointer; /* Member for doing pointer searches. */
156 char true_name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
157 enum gfc_rsym_state state;
158 int ns, referenced, renamed;
161 gfc_symtree *symtree;
162 char binding_label[GFC_MAX_SYMBOL_LEN + 1];
169 enum gfc_wsym_state state;
178 #define gfc_get_pointer_info() XCNEW (pointer_info)
181 /* Local variables */
183 /* The FILE for the module we're reading or writing. */
184 static FILE *module_fp;
186 /* MD5 context structure. */
187 static struct md5_ctx ctx;
189 /* The name of the module we're reading (USE'ing) or writing. */
190 static char module_name[GFC_MAX_SYMBOL_LEN + 1];
192 /* The way the module we're reading was specified. */
193 static bool specified_nonint, specified_int;
195 static int module_line, module_column, only_flag;
197 { IO_INPUT, IO_OUTPUT }
200 static gfc_use_rename *gfc_rename_list;
201 static pointer_info *pi_root;
202 static int symbol_number; /* Counter for assigning symbol numbers */
204 /* Tells mio_expr_ref to make symbols for unused equivalence members. */
205 static bool in_load_equiv;
207 static locus use_locus;
211 /*****************************************************************/
213 /* Pointer/integer conversion. Pointers between structures are stored
214 as integers in the module file. The next couple of subroutines
215 handle this translation for reading and writing. */
217 /* Recursively free the tree of pointer structures. */
220 free_pi_tree (pointer_info *p)
225 if (p->fixup != NULL)
226 gfc_internal_error ("free_pi_tree(): Unresolved fixup");
228 free_pi_tree (p->left);
229 free_pi_tree (p->right);
235 /* Compare pointers when searching by pointer. Used when writing a
239 compare_pointers (void *_sn1, void *_sn2)
241 pointer_info *sn1, *sn2;
243 sn1 = (pointer_info *) _sn1;
244 sn2 = (pointer_info *) _sn2;
246 if (sn1->u.pointer < sn2->u.pointer)
248 if (sn1->u.pointer > sn2->u.pointer)
255 /* Compare integers when searching by integer. Used when reading a
259 compare_integers (void *_sn1, void *_sn2)
261 pointer_info *sn1, *sn2;
263 sn1 = (pointer_info *) _sn1;
264 sn2 = (pointer_info *) _sn2;
266 if (sn1->integer < sn2->integer)
268 if (sn1->integer > sn2->integer)
275 /* Initialize the pointer_info tree. */
284 compare = (iomode == IO_INPUT) ? compare_integers : compare_pointers;
286 /* Pointer 0 is the NULL pointer. */
287 p = gfc_get_pointer_info ();
292 gfc_insert_bbt (&pi_root, p, compare);
294 /* Pointer 1 is the current namespace. */
295 p = gfc_get_pointer_info ();
296 p->u.pointer = gfc_current_ns;
298 p->type = P_NAMESPACE;
300 gfc_insert_bbt (&pi_root, p, compare);
306 /* During module writing, call here with a pointer to something,
307 returning the pointer_info node. */
309 static pointer_info *
310 find_pointer (void *gp)
317 if (p->u.pointer == gp)
319 p = (gp < p->u.pointer) ? p->left : p->right;
326 /* Given a pointer while writing, returns the pointer_info tree node,
327 creating it if it doesn't exist. */
329 static pointer_info *
330 get_pointer (void *gp)
334 p = find_pointer (gp);
338 /* Pointer doesn't have an integer. Give it one. */
339 p = gfc_get_pointer_info ();
342 p->integer = symbol_number++;
344 gfc_insert_bbt (&pi_root, p, compare_pointers);
350 /* Given an integer during reading, find it in the pointer_info tree,
351 creating the node if not found. */
353 static pointer_info *
354 get_integer (int integer)
364 c = compare_integers (&t, p);
368 p = (c < 0) ? p->left : p->right;
374 p = gfc_get_pointer_info ();
375 p->integer = integer;
378 gfc_insert_bbt (&pi_root, p, compare_integers);
384 /* Recursive function to find a pointer within a tree by brute force. */
386 static pointer_info *
387 fp2 (pointer_info *p, const void *target)
394 if (p->u.pointer == target)
397 q = fp2 (p->left, target);
401 return fp2 (p->right, target);
405 /* During reading, find a pointer_info node from the pointer value.
406 This amounts to a brute-force search. */
408 static pointer_info *
409 find_pointer2 (void *p)
411 return fp2 (pi_root, p);
415 /* Resolve any fixups using a known pointer. */
418 resolve_fixups (fixup_t *f, void *gp)
431 /* Call here during module reading when we know what pointer to
432 associate with an integer. Any fixups that exist are resolved at
436 associate_integer_pointer (pointer_info *p, void *gp)
438 if (p->u.pointer != NULL)
439 gfc_internal_error ("associate_integer_pointer(): Already associated");
443 resolve_fixups (p->fixup, gp);
449 /* During module reading, given an integer and a pointer to a pointer,
450 either store the pointer from an already-known value or create a
451 fixup structure in order to store things later. Returns zero if
452 the reference has been actually stored, or nonzero if the reference
453 must be fixed later (i.e., associate_integer_pointer must be called
454 sometime later. Returns the pointer_info structure. */
456 static pointer_info *
457 add_fixup (int integer, void *gp)
463 p = get_integer (integer);
465 if (p->integer == 0 || p->u.pointer != NULL)
468 *cp = (char *) p->u.pointer;
477 f->pointer = (void **) gp;
484 /*****************************************************************/
486 /* Parser related subroutines */
488 /* Free the rename list left behind by a USE statement. */
493 gfc_use_rename *next;
495 for (; gfc_rename_list; gfc_rename_list = next)
497 next = gfc_rename_list->next;
498 gfc_free (gfc_rename_list);
503 /* Match a USE statement. */
508 char name[GFC_MAX_SYMBOL_LEN + 1], module_nature[GFC_MAX_SYMBOL_LEN + 1];
509 gfc_use_rename *tail = NULL, *new_use;
510 interface_type type, type2;
514 specified_int = false;
515 specified_nonint = false;
517 if (gfc_match (" , ") == MATCH_YES)
519 if ((m = gfc_match (" %n ::", module_nature)) == MATCH_YES)
521 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: module "
522 "nature in USE statement at %C") == FAILURE)
525 if (strcmp (module_nature, "intrinsic") == 0)
526 specified_int = true;
529 if (strcmp (module_nature, "non_intrinsic") == 0)
530 specified_nonint = true;
533 gfc_error ("Module nature in USE statement at %C shall "
534 "be either INTRINSIC or NON_INTRINSIC");
541 /* Help output a better error message than "Unclassifiable
543 gfc_match (" %n", module_nature);
544 if (strcmp (module_nature, "intrinsic") == 0
545 || strcmp (module_nature, "non_intrinsic") == 0)
546 gfc_error ("\"::\" was expected after module nature at %C "
547 "but was not found");
553 m = gfc_match (" ::");
554 if (m == MATCH_YES &&
555 gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
556 "\"USE :: module\" at %C") == FAILURE)
561 m = gfc_match ("% ");
567 use_locus = gfc_current_locus;
569 m = gfc_match_name (module_name);
576 if (gfc_match_eos () == MATCH_YES)
578 if (gfc_match_char (',') != MATCH_YES)
581 if (gfc_match (" only :") == MATCH_YES)
584 if (gfc_match_eos () == MATCH_YES)
589 /* Get a new rename struct and add it to the rename list. */
590 new_use = gfc_get_use_rename ();
591 new_use->where = gfc_current_locus;
594 if (gfc_rename_list == NULL)
595 gfc_rename_list = new_use;
597 tail->next = new_use;
600 /* See what kind of interface we're dealing with. Assume it is
602 new_use->op = INTRINSIC_NONE;
603 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
608 case INTERFACE_NAMELESS:
609 gfc_error ("Missing generic specification in USE statement at %C");
612 case INTERFACE_USER_OP:
613 case INTERFACE_GENERIC:
614 m = gfc_match (" =>");
616 if (type == INTERFACE_USER_OP && m == MATCH_YES
617 && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Renaming "
618 "operators in USE statements at %C")
622 if (type == INTERFACE_USER_OP)
623 new_use->op = INTRINSIC_USER;
628 strcpy (new_use->use_name, name);
631 strcpy (new_use->local_name, name);
632 m = gfc_match_generic_spec (&type2, new_use->use_name, &op);
637 if (m == MATCH_ERROR)
645 strcpy (new_use->local_name, name);
647 m = gfc_match_generic_spec (&type2, new_use->use_name, &op);
652 if (m == MATCH_ERROR)
656 if (strcmp (new_use->use_name, module_name) == 0
657 || strcmp (new_use->local_name, module_name) == 0)
659 gfc_error ("The name '%s' at %C has already been used as "
660 "an external module name.", module_name);
665 case INTERFACE_INTRINSIC_OP:
673 if (gfc_match_eos () == MATCH_YES)
675 if (gfc_match_char (',') != MATCH_YES)
682 gfc_syntax_error (ST_USE);
690 /* Given a name and a number, inst, return the inst name
691 under which to load this symbol. Returns NULL if this
692 symbol shouldn't be loaded. If inst is zero, returns
693 the number of instances of this name. If interface is
694 true, a user-defined operator is sought, otherwise only
695 non-operators are sought. */
698 find_use_name_n (const char *name, int *inst, bool interface)
704 for (u = gfc_rename_list; u; u = u->next)
706 if (strcmp (u->use_name, name) != 0
707 || (u->op == INTRINSIC_USER && !interface)
708 || (u->op != INTRINSIC_USER && interface))
721 return only_flag ? NULL : name;
725 return (u->local_name[0] != '\0') ? u->local_name : name;
729 /* Given a name, return the name under which to load this symbol.
730 Returns NULL if this symbol shouldn't be loaded. */
733 find_use_name (const char *name, bool interface)
736 return find_use_name_n (name, &i, interface);
740 /* Given a real name, return the number of use names associated with it. */
743 number_use_names (const char *name, bool interface)
746 find_use_name_n (name, &i, interface);
751 /* Try to find the operator in the current list. */
753 static gfc_use_rename *
754 find_use_operator (gfc_intrinsic_op op)
758 for (u = gfc_rename_list; u; u = u->next)
766 /*****************************************************************/
768 /* The next couple of subroutines maintain a tree used to avoid a
769 brute-force search for a combination of true name and module name.
770 While symtree names, the name that a particular symbol is known by
771 can changed with USE statements, we still have to keep track of the
772 true names to generate the correct reference, and also avoid
773 loading the same real symbol twice in a program unit.
775 When we start reading, the true name tree is built and maintained
776 as symbols are read. The tree is searched as we load new symbols
777 to see if it already exists someplace in the namespace. */
779 typedef struct true_name
781 BBT_HEADER (true_name);
786 static true_name *true_name_root;
789 /* Compare two true_name structures. */
792 compare_true_names (void *_t1, void *_t2)
797 t1 = (true_name *) _t1;
798 t2 = (true_name *) _t2;
800 c = ((t1->sym->module > t2->sym->module)
801 - (t1->sym->module < t2->sym->module));
805 return strcmp (t1->sym->name, t2->sym->name);
809 /* Given a true name, search the true name tree to see if it exists
810 within the main namespace. */
813 find_true_name (const char *name, const char *module)
819 sym.name = gfc_get_string (name);
821 sym.module = gfc_get_string (module);
829 c = compare_true_names ((void *) (&t), (void *) p);
833 p = (c < 0) ? p->left : p->right;
840 /* Given a gfc_symbol pointer that is not in the true name tree, add it. */
843 add_true_name (gfc_symbol *sym)
847 t = XCNEW (true_name);
850 gfc_insert_bbt (&true_name_root, t, compare_true_names);
854 /* Recursive function to build the initial true name tree by
855 recursively traversing the current namespace. */
858 build_tnt (gfc_symtree *st)
863 build_tnt (st->left);
864 build_tnt (st->right);
866 if (find_true_name (st->n.sym->name, st->n.sym->module) != NULL)
869 add_true_name (st->n.sym);
873 /* Initialize the true name tree with the current namespace. */
876 init_true_name_tree (void)
878 true_name_root = NULL;
879 build_tnt (gfc_current_ns->sym_root);
883 /* Recursively free a true name tree node. */
886 free_true_name (true_name *t)
890 free_true_name (t->left);
891 free_true_name (t->right);
897 /*****************************************************************/
899 /* Module reading and writing. */
903 ATOM_NAME, ATOM_LPAREN, ATOM_RPAREN, ATOM_INTEGER, ATOM_STRING
907 static atom_type last_atom;
910 /* The name buffer must be at least as long as a symbol name. Right
911 now it's not clear how we're going to store numeric constants--
912 probably as a hexadecimal string, since this will allow the exact
913 number to be preserved (this can't be done by a decimal
914 representation). Worry about that later. TODO! */
916 #define MAX_ATOM_SIZE 100
919 static char *atom_string, atom_name[MAX_ATOM_SIZE];
922 /* Report problems with a module. Error reporting is not very
923 elaborate, since this sorts of errors shouldn't really happen.
924 This subroutine never returns. */
926 static void bad_module (const char *) ATTRIBUTE_NORETURN;
929 bad_module (const char *msgid)
936 gfc_fatal_error ("Reading module %s at line %d column %d: %s",
937 module_name, module_line, module_column, msgid);
940 gfc_fatal_error ("Writing module %s at line %d column %d: %s",
941 module_name, module_line, module_column, msgid);
944 gfc_fatal_error ("Module %s at line %d column %d: %s",
945 module_name, module_line, module_column, msgid);
951 /* Set the module's input pointer. */
954 set_module_locus (module_locus *m)
956 module_column = m->column;
957 module_line = m->line;
958 fsetpos (module_fp, &m->pos);
962 /* Get the module's input pointer so that we can restore it later. */
965 get_module_locus (module_locus *m)
967 m->column = module_column;
968 m->line = module_line;
969 fgetpos (module_fp, &m->pos);
973 /* Get the next character in the module, updating our reckoning of
981 c = getc (module_fp);
984 bad_module ("Unexpected EOF");
997 /* Parse a string constant. The delimiter is guaranteed to be a
1007 get_module_locus (&start);
1011 /* See how long the string is. */
1016 bad_module ("Unexpected end of module in string constant");
1034 set_module_locus (&start);
1036 atom_string = p = XCNEWVEC (char, len + 1);
1038 for (; len > 0; len--)
1042 module_char (); /* Guaranteed to be another \'. */
1046 module_char (); /* Terminating \'. */
1047 *p = '\0'; /* C-style string for debug purposes. */
1051 /* Parse a small integer. */
1054 parse_integer (int c)
1062 get_module_locus (&m);
1068 atom_int = 10 * atom_int + c - '0';
1069 if (atom_int > 99999999)
1070 bad_module ("Integer overflow");
1073 set_module_locus (&m);
1091 get_module_locus (&m);
1096 if (!ISALNUM (c) && c != '_' && c != '-')
1100 if (++len > GFC_MAX_SYMBOL_LEN)
1101 bad_module ("Name too long");
1106 fseek (module_fp, -1, SEEK_CUR);
1107 module_column = m.column + len - 1;
1114 /* Read the next atom in the module's input stream. */
1125 while (c == ' ' || c == '\r' || c == '\n');
1150 return ATOM_INTEGER;
1208 bad_module ("Bad name");
1215 /* Peek at the next atom on the input. */
1223 get_module_locus (&m);
1226 if (a == ATOM_STRING)
1227 gfc_free (atom_string);
1229 set_module_locus (&m);
1234 /* Read the next atom from the input, requiring that it be a
1238 require_atom (atom_type type)
1244 get_module_locus (&m);
1252 p = _("Expected name");
1255 p = _("Expected left parenthesis");
1258 p = _("Expected right parenthesis");
1261 p = _("Expected integer");
1264 p = _("Expected string");
1267 gfc_internal_error ("require_atom(): bad atom type required");
1270 set_module_locus (&m);
1276 /* Given a pointer to an mstring array, require that the current input
1277 be one of the strings in the array. We return the enum value. */
1280 find_enum (const mstring *m)
1284 i = gfc_string2code (m, atom_name);
1288 bad_module ("find_enum(): Enum not found");
1294 /**************** Module output subroutines ***************************/
1296 /* Output a character to a module file. */
1299 write_char (char out)
1301 if (putc (out, module_fp) == EOF)
1302 gfc_fatal_error ("Error writing modules file: %s", strerror (errno));
1304 /* Add this to our MD5. */
1305 md5_process_bytes (&out, sizeof (out), &ctx);
1317 /* Write an atom to a module. The line wrapping isn't perfect, but it
1318 should work most of the time. This isn't that big of a deal, since
1319 the file really isn't meant to be read by people anyway. */
1322 write_atom (atom_type atom, const void *v)
1332 p = (const char *) v;
1344 i = *((const int *) v);
1346 gfc_internal_error ("write_atom(): Writing negative integer");
1348 sprintf (buffer, "%d", i);
1353 gfc_internal_error ("write_atom(): Trying to write dab atom");
1357 if(p == NULL || *p == '\0')
1362 if (atom != ATOM_RPAREN)
1364 if (module_column + len > 72)
1369 if (last_atom != ATOM_LPAREN && module_column != 1)
1374 if (atom == ATOM_STRING)
1377 while (p != NULL && *p)
1379 if (atom == ATOM_STRING && *p == '\'')
1384 if (atom == ATOM_STRING)
1392 /***************** Mid-level I/O subroutines *****************/
1394 /* These subroutines let their caller read or write atoms without
1395 caring about which of the two is actually happening. This lets a
1396 subroutine concentrate on the actual format of the data being
1399 static void mio_expr (gfc_expr **);
1400 pointer_info *mio_symbol_ref (gfc_symbol **);
1401 pointer_info *mio_interface_rest (gfc_interface **);
1402 static void mio_symtree_ref (gfc_symtree **);
1404 /* Read or write an enumerated value. On writing, we return the input
1405 value for the convenience of callers. We avoid using an integer
1406 pointer because enums are sometimes inside bitfields. */
1409 mio_name (int t, const mstring *m)
1411 if (iomode == IO_OUTPUT)
1412 write_atom (ATOM_NAME, gfc_code2string (m, t));
1415 require_atom (ATOM_NAME);
1422 /* Specialization of mio_name. */
1424 #define DECL_MIO_NAME(TYPE) \
1425 static inline TYPE \
1426 MIO_NAME(TYPE) (TYPE t, const mstring *m) \
1428 return (TYPE) mio_name ((int) t, m); \
1430 #define MIO_NAME(TYPE) mio_name_##TYPE
1435 if (iomode == IO_OUTPUT)
1436 write_atom (ATOM_LPAREN, NULL);
1438 require_atom (ATOM_LPAREN);
1445 if (iomode == IO_OUTPUT)
1446 write_atom (ATOM_RPAREN, NULL);
1448 require_atom (ATOM_RPAREN);
1453 mio_integer (int *ip)
1455 if (iomode == IO_OUTPUT)
1456 write_atom (ATOM_INTEGER, ip);
1459 require_atom (ATOM_INTEGER);
1465 /* Read or write a gfc_intrinsic_op value. */
1468 mio_intrinsic_op (gfc_intrinsic_op* op)
1470 /* FIXME: Would be nicer to do this via the operators symbolic name. */
1471 if (iomode == IO_OUTPUT)
1473 int converted = (int) *op;
1474 write_atom (ATOM_INTEGER, &converted);
1478 require_atom (ATOM_INTEGER);
1479 *op = (gfc_intrinsic_op) atom_int;
1484 /* Read or write a character pointer that points to a string on the heap. */
1487 mio_allocated_string (const char *s)
1489 if (iomode == IO_OUTPUT)
1491 write_atom (ATOM_STRING, s);
1496 require_atom (ATOM_STRING);
1502 /* Functions for quoting and unquoting strings. */
1505 quote_string (const gfc_char_t *s, const size_t slength)
1507 const gfc_char_t *p;
1511 /* Calculate the length we'll need: a backslash takes two ("\\"),
1512 non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */
1513 for (p = s, i = 0; i < slength; p++, i++)
1517 else if (!gfc_wide_is_printable (*p))
1523 q = res = XCNEWVEC (char, len + 1);
1524 for (p = s, i = 0; i < slength; p++, i++)
1527 *q++ = '\\', *q++ = '\\';
1528 else if (!gfc_wide_is_printable (*p))
1530 sprintf (q, "\\U%08" HOST_WIDE_INT_PRINT "x",
1531 (unsigned HOST_WIDE_INT) *p);
1535 *q++ = (unsigned char) *p;
1543 unquote_string (const char *s)
1549 for (p = s, len = 0; *p; p++, len++)
1556 else if (p[1] == 'U')
1557 p += 9; /* That is a "\U????????". */
1559 gfc_internal_error ("unquote_string(): got bad string");
1562 res = gfc_get_wide_string (len + 1);
1563 for (i = 0, p = s; i < len; i++, p++)
1568 res[i] = (unsigned char) *p;
1569 else if (p[1] == '\\')
1571 res[i] = (unsigned char) '\\';
1576 /* We read the 8-digits hexadecimal constant that follows. */
1581 gcc_assert (p[1] == 'U');
1582 for (j = 0; j < 8; j++)
1585 gcc_assert (sscanf (&p[j+2], "%01x", &n) == 1);
1599 /* Read or write a character pointer that points to a wide string on the
1600 heap, performing quoting/unquoting of nonprintable characters using the
1601 form \U???????? (where each ? is a hexadecimal digit).
1602 Length is the length of the string, only known and used in output mode. */
1604 static const gfc_char_t *
1605 mio_allocated_wide_string (const gfc_char_t *s, const size_t length)
1607 if (iomode == IO_OUTPUT)
1609 char *quoted = quote_string (s, length);
1610 write_atom (ATOM_STRING, quoted);
1616 gfc_char_t *unquoted;
1618 require_atom (ATOM_STRING);
1619 unquoted = unquote_string (atom_string);
1620 gfc_free (atom_string);
1626 /* Read or write a string that is in static memory. */
1629 mio_pool_string (const char **stringp)
1631 /* TODO: one could write the string only once, and refer to it via a
1634 /* As a special case we have to deal with a NULL string. This
1635 happens for the 'module' member of 'gfc_symbol's that are not in a
1636 module. We read / write these as the empty string. */
1637 if (iomode == IO_OUTPUT)
1639 const char *p = *stringp == NULL ? "" : *stringp;
1640 write_atom (ATOM_STRING, p);
1644 require_atom (ATOM_STRING);
1645 *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
1646 gfc_free (atom_string);
1651 /* Read or write a string that is inside of some already-allocated
1655 mio_internal_string (char *string)
1657 if (iomode == IO_OUTPUT)
1658 write_atom (ATOM_STRING, string);
1661 require_atom (ATOM_STRING);
1662 strcpy (string, atom_string);
1663 gfc_free (atom_string);
1669 { AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
1670 AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
1671 AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
1672 AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
1673 AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
1674 AB_POINTER_COMP, AB_PRIVATE_COMP, AB_VALUE, AB_VOLATILE, AB_PROTECTED,
1675 AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
1676 AB_IS_CLASS, AB_PROCEDURE, AB_PROC_POINTER, AB_ASYNCHRONOUS, AB_CODIMENSION,
1677 AB_COARRAY_COMP, AB_VTYPE, AB_VTAB
1681 static const mstring attr_bits[] =
1683 minit ("ALLOCATABLE", AB_ALLOCATABLE),
1684 minit ("ASYNCHRONOUS", AB_ASYNCHRONOUS),
1685 minit ("DIMENSION", AB_DIMENSION),
1686 minit ("CODIMENSION", AB_CODIMENSION),
1687 minit ("EXTERNAL", AB_EXTERNAL),
1688 minit ("INTRINSIC", AB_INTRINSIC),
1689 minit ("OPTIONAL", AB_OPTIONAL),
1690 minit ("POINTER", AB_POINTER),
1691 minit ("VOLATILE", AB_VOLATILE),
1692 minit ("TARGET", AB_TARGET),
1693 minit ("THREADPRIVATE", AB_THREADPRIVATE),
1694 minit ("DUMMY", AB_DUMMY),
1695 minit ("RESULT", AB_RESULT),
1696 minit ("DATA", AB_DATA),
1697 minit ("IN_NAMELIST", AB_IN_NAMELIST),
1698 minit ("IN_COMMON", AB_IN_COMMON),
1699 minit ("FUNCTION", AB_FUNCTION),
1700 minit ("SUBROUTINE", AB_SUBROUTINE),
1701 minit ("SEQUENCE", AB_SEQUENCE),
1702 minit ("ELEMENTAL", AB_ELEMENTAL),
1703 minit ("PURE", AB_PURE),
1704 minit ("RECURSIVE", AB_RECURSIVE),
1705 minit ("GENERIC", AB_GENERIC),
1706 minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT),
1707 minit ("CRAY_POINTER", AB_CRAY_POINTER),
1708 minit ("CRAY_POINTEE", AB_CRAY_POINTEE),
1709 minit ("IS_BIND_C", AB_IS_BIND_C),
1710 minit ("IS_C_INTEROP", AB_IS_C_INTEROP),
1711 minit ("IS_ISO_C", AB_IS_ISO_C),
1712 minit ("VALUE", AB_VALUE),
1713 minit ("ALLOC_COMP", AB_ALLOC_COMP),
1714 minit ("COARRAY_COMP", AB_COARRAY_COMP),
1715 minit ("POINTER_COMP", AB_POINTER_COMP),
1716 minit ("PRIVATE_COMP", AB_PRIVATE_COMP),
1717 minit ("ZERO_COMP", AB_ZERO_COMP),
1718 minit ("PROTECTED", AB_PROTECTED),
1719 minit ("ABSTRACT", AB_ABSTRACT),
1720 minit ("IS_CLASS", AB_IS_CLASS),
1721 minit ("PROCEDURE", AB_PROCEDURE),
1722 minit ("PROC_POINTER", AB_PROC_POINTER),
1723 minit ("VTYPE", AB_VTYPE),
1724 minit ("VTAB", AB_VTAB),
1728 /* For binding attributes. */
1729 static const mstring binding_passing[] =
1732 minit ("NOPASS", 1),
1735 static const mstring binding_overriding[] =
1737 minit ("OVERRIDABLE", 0),
1738 minit ("NON_OVERRIDABLE", 1),
1739 minit ("DEFERRED", 2),
1742 static const mstring binding_generic[] =
1744 minit ("SPECIFIC", 0),
1745 minit ("GENERIC", 1),
1748 static const mstring binding_ppc[] =
1750 minit ("NO_PPC", 0),
1755 /* Specialization of mio_name. */
1756 DECL_MIO_NAME (ab_attribute)
1757 DECL_MIO_NAME (ar_type)
1758 DECL_MIO_NAME (array_type)
1760 DECL_MIO_NAME (expr_t)
1761 DECL_MIO_NAME (gfc_access)
1762 DECL_MIO_NAME (gfc_intrinsic_op)
1763 DECL_MIO_NAME (ifsrc)
1764 DECL_MIO_NAME (save_state)
1765 DECL_MIO_NAME (procedure_type)
1766 DECL_MIO_NAME (ref_type)
1767 DECL_MIO_NAME (sym_flavor)
1768 DECL_MIO_NAME (sym_intent)
1769 #undef DECL_MIO_NAME
1771 /* Symbol attributes are stored in list with the first three elements
1772 being the enumerated fields, while the remaining elements (if any)
1773 indicate the individual attribute bits. The access field is not
1774 saved-- it controls what symbols are exported when a module is
1778 mio_symbol_attribute (symbol_attribute *attr)
1781 unsigned ext_attr,extension_level;
1785 attr->flavor = MIO_NAME (sym_flavor) (attr->flavor, flavors);
1786 attr->intent = MIO_NAME (sym_intent) (attr->intent, intents);
1787 attr->proc = MIO_NAME (procedure_type) (attr->proc, procedures);
1788 attr->if_source = MIO_NAME (ifsrc) (attr->if_source, ifsrc_types);
1789 attr->save = MIO_NAME (save_state) (attr->save, save_status);
1791 ext_attr = attr->ext_attr;
1792 mio_integer ((int *) &ext_attr);
1793 attr->ext_attr = ext_attr;
1795 extension_level = attr->extension;
1796 mio_integer ((int *) &extension_level);
1797 attr->extension = extension_level;
1799 if (iomode == IO_OUTPUT)
1801 if (attr->allocatable)
1802 MIO_NAME (ab_attribute) (AB_ALLOCATABLE, attr_bits);
1803 if (attr->asynchronous)
1804 MIO_NAME (ab_attribute) (AB_ASYNCHRONOUS, attr_bits);
1805 if (attr->dimension)
1806 MIO_NAME (ab_attribute) (AB_DIMENSION, attr_bits);
1807 if (attr->codimension)
1808 MIO_NAME (ab_attribute) (AB_CODIMENSION, attr_bits);
1810 MIO_NAME (ab_attribute) (AB_EXTERNAL, attr_bits);
1811 if (attr->intrinsic)
1812 MIO_NAME (ab_attribute) (AB_INTRINSIC, attr_bits);
1814 MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits);
1816 MIO_NAME (ab_attribute) (AB_POINTER, attr_bits);
1817 if (attr->is_protected)
1818 MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits);
1820 MIO_NAME (ab_attribute) (AB_VALUE, attr_bits);
1821 if (attr->volatile_)
1822 MIO_NAME (ab_attribute) (AB_VOLATILE, attr_bits);
1824 MIO_NAME (ab_attribute) (AB_TARGET, attr_bits);
1825 if (attr->threadprivate)
1826 MIO_NAME (ab_attribute) (AB_THREADPRIVATE, attr_bits);
1828 MIO_NAME (ab_attribute) (AB_DUMMY, attr_bits);
1830 MIO_NAME (ab_attribute) (AB_RESULT, attr_bits);
1831 /* We deliberately don't preserve the "entry" flag. */
1834 MIO_NAME (ab_attribute) (AB_DATA, attr_bits);
1835 if (attr->in_namelist)
1836 MIO_NAME (ab_attribute) (AB_IN_NAMELIST, attr_bits);
1837 if (attr->in_common)
1838 MIO_NAME (ab_attribute) (AB_IN_COMMON, attr_bits);
1841 MIO_NAME (ab_attribute) (AB_FUNCTION, attr_bits);
1842 if (attr->subroutine)
1843 MIO_NAME (ab_attribute) (AB_SUBROUTINE, attr_bits);
1845 MIO_NAME (ab_attribute) (AB_GENERIC, attr_bits);
1847 MIO_NAME (ab_attribute) (AB_ABSTRACT, attr_bits);
1850 MIO_NAME (ab_attribute) (AB_SEQUENCE, attr_bits);
1851 if (attr->elemental)
1852 MIO_NAME (ab_attribute) (AB_ELEMENTAL, attr_bits);
1854 MIO_NAME (ab_attribute) (AB_PURE, attr_bits);
1855 if (attr->recursive)
1856 MIO_NAME (ab_attribute) (AB_RECURSIVE, attr_bits);
1857 if (attr->always_explicit)
1858 MIO_NAME (ab_attribute) (AB_ALWAYS_EXPLICIT, attr_bits);
1859 if (attr->cray_pointer)
1860 MIO_NAME (ab_attribute) (AB_CRAY_POINTER, attr_bits);
1861 if (attr->cray_pointee)
1862 MIO_NAME (ab_attribute) (AB_CRAY_POINTEE, attr_bits);
1863 if (attr->is_bind_c)
1864 MIO_NAME(ab_attribute) (AB_IS_BIND_C, attr_bits);
1865 if (attr->is_c_interop)
1866 MIO_NAME(ab_attribute) (AB_IS_C_INTEROP, attr_bits);
1868 MIO_NAME(ab_attribute) (AB_IS_ISO_C, attr_bits);
1869 if (attr->alloc_comp)
1870 MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits);
1871 if (attr->pointer_comp)
1872 MIO_NAME (ab_attribute) (AB_POINTER_COMP, attr_bits);
1873 if (attr->private_comp)
1874 MIO_NAME (ab_attribute) (AB_PRIVATE_COMP, attr_bits);
1875 if (attr->coarray_comp)
1876 MIO_NAME (ab_attribute) (AB_COARRAY_COMP, attr_bits);
1877 if (attr->zero_comp)
1878 MIO_NAME (ab_attribute) (AB_ZERO_COMP, attr_bits);
1880 MIO_NAME (ab_attribute) (AB_IS_CLASS, attr_bits);
1881 if (attr->procedure)
1882 MIO_NAME (ab_attribute) (AB_PROCEDURE, attr_bits);
1883 if (attr->proc_pointer)
1884 MIO_NAME (ab_attribute) (AB_PROC_POINTER, attr_bits);
1886 MIO_NAME (ab_attribute) (AB_VTYPE, attr_bits);
1888 MIO_NAME (ab_attribute) (AB_VTAB, attr_bits);
1898 if (t == ATOM_RPAREN)
1901 bad_module ("Expected attribute bit name");
1903 switch ((ab_attribute) find_enum (attr_bits))
1905 case AB_ALLOCATABLE:
1906 attr->allocatable = 1;
1908 case AB_ASYNCHRONOUS:
1909 attr->asynchronous = 1;
1912 attr->dimension = 1;
1914 case AB_CODIMENSION:
1915 attr->codimension = 1;
1921 attr->intrinsic = 1;
1930 attr->is_protected = 1;
1936 attr->volatile_ = 1;
1941 case AB_THREADPRIVATE:
1942 attr->threadprivate = 1;
1953 case AB_IN_NAMELIST:
1954 attr->in_namelist = 1;
1957 attr->in_common = 1;
1963 attr->subroutine = 1;
1975 attr->elemental = 1;
1981 attr->recursive = 1;
1983 case AB_ALWAYS_EXPLICIT:
1984 attr->always_explicit = 1;
1986 case AB_CRAY_POINTER:
1987 attr->cray_pointer = 1;
1989 case AB_CRAY_POINTEE:
1990 attr->cray_pointee = 1;
1993 attr->is_bind_c = 1;
1995 case AB_IS_C_INTEROP:
1996 attr->is_c_interop = 1;
2002 attr->alloc_comp = 1;
2004 case AB_COARRAY_COMP:
2005 attr->coarray_comp = 1;
2007 case AB_POINTER_COMP:
2008 attr->pointer_comp = 1;
2010 case AB_PRIVATE_COMP:
2011 attr->private_comp = 1;
2014 attr->zero_comp = 1;
2020 attr->procedure = 1;
2022 case AB_PROC_POINTER:
2023 attr->proc_pointer = 1;
2037 static const mstring bt_types[] = {
2038 minit ("INTEGER", BT_INTEGER),
2039 minit ("REAL", BT_REAL),
2040 minit ("COMPLEX", BT_COMPLEX),
2041 minit ("LOGICAL", BT_LOGICAL),
2042 minit ("CHARACTER", BT_CHARACTER),
2043 minit ("DERIVED", BT_DERIVED),
2044 minit ("CLASS", BT_CLASS),
2045 minit ("PROCEDURE", BT_PROCEDURE),
2046 minit ("UNKNOWN", BT_UNKNOWN),
2047 minit ("VOID", BT_VOID),
2053 mio_charlen (gfc_charlen **clp)
2059 if (iomode == IO_OUTPUT)
2063 mio_expr (&cl->length);
2067 if (peek_atom () != ATOM_RPAREN)
2069 cl = gfc_new_charlen (gfc_current_ns, NULL);
2070 mio_expr (&cl->length);
2079 /* See if a name is a generated name. */
2082 check_unique_name (const char *name)
2084 return *name == '@';
2089 mio_typespec (gfc_typespec *ts)
2093 ts->type = MIO_NAME (bt) (ts->type, bt_types);
2095 if (ts->type != BT_DERIVED && ts->type != BT_CLASS)
2096 mio_integer (&ts->kind);
2098 mio_symbol_ref (&ts->u.derived);
2100 /* Add info for C interop and is_iso_c. */
2101 mio_integer (&ts->is_c_interop);
2102 mio_integer (&ts->is_iso_c);
2104 /* If the typespec is for an identifier either from iso_c_binding, or
2105 a constant that was initialized to an identifier from it, use the
2106 f90_type. Otherwise, use the ts->type, since it shouldn't matter. */
2108 ts->f90_type = MIO_NAME (bt) (ts->f90_type, bt_types);
2110 ts->f90_type = MIO_NAME (bt) (ts->type, bt_types);
2112 if (ts->type != BT_CHARACTER)
2114 /* ts->u.cl is only valid for BT_CHARACTER. */
2119 mio_charlen (&ts->u.cl);
2125 static const mstring array_spec_types[] = {
2126 minit ("EXPLICIT", AS_EXPLICIT),
2127 minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE),
2128 minit ("DEFERRED", AS_DEFERRED),
2129 minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE),
2135 mio_array_spec (gfc_array_spec **asp)
2142 if (iomode == IO_OUTPUT)
2150 if (peek_atom () == ATOM_RPAREN)
2156 *asp = as = gfc_get_array_spec ();
2159 mio_integer (&as->rank);
2160 mio_integer (&as->corank);
2161 as->type = MIO_NAME (array_type) (as->type, array_spec_types);
2163 for (i = 0; i < as->rank + as->corank; i++)
2165 mio_expr (&as->lower[i]);
2166 mio_expr (&as->upper[i]);
2174 /* Given a pointer to an array reference structure (which lives in a
2175 gfc_ref structure), find the corresponding array specification
2176 structure. Storing the pointer in the ref structure doesn't quite
2177 work when loading from a module. Generating code for an array
2178 reference also needs more information than just the array spec. */
2180 static const mstring array_ref_types[] = {
2181 minit ("FULL", AR_FULL),
2182 minit ("ELEMENT", AR_ELEMENT),
2183 minit ("SECTION", AR_SECTION),
2189 mio_array_ref (gfc_array_ref *ar)
2194 ar->type = MIO_NAME (ar_type) (ar->type, array_ref_types);
2195 mio_integer (&ar->dimen);
2203 for (i = 0; i < ar->dimen; i++)
2204 mio_expr (&ar->start[i]);
2209 for (i = 0; i < ar->dimen; i++)
2211 mio_expr (&ar->start[i]);
2212 mio_expr (&ar->end[i]);
2213 mio_expr (&ar->stride[i]);
2219 gfc_internal_error ("mio_array_ref(): Unknown array ref");
2222 /* Unfortunately, ar->dimen_type is an anonymous enumerated type so
2223 we can't call mio_integer directly. Instead loop over each element
2224 and cast it to/from an integer. */
2225 if (iomode == IO_OUTPUT)
2227 for (i = 0; i < ar->dimen; i++)
2229 int tmp = (int)ar->dimen_type[i];
2230 write_atom (ATOM_INTEGER, &tmp);
2235 for (i = 0; i < ar->dimen; i++)
2237 require_atom (ATOM_INTEGER);
2238 ar->dimen_type[i] = (enum gfc_array_ref_dimen_type) atom_int;
2242 if (iomode == IO_INPUT)
2244 ar->where = gfc_current_locus;
2246 for (i = 0; i < ar->dimen; i++)
2247 ar->c_where[i] = gfc_current_locus;
2254 /* Saves or restores a pointer. The pointer is converted back and
2255 forth from an integer. We return the pointer_info pointer so that
2256 the caller can take additional action based on the pointer type. */
2258 static pointer_info *
2259 mio_pointer_ref (void *gp)
2263 if (iomode == IO_OUTPUT)
2265 p = get_pointer (*((char **) gp));
2266 write_atom (ATOM_INTEGER, &p->integer);
2270 require_atom (ATOM_INTEGER);
2271 p = add_fixup (atom_int, gp);
2278 /* Save and load references to components that occur within
2279 expressions. We have to describe these references by a number and
2280 by name. The number is necessary for forward references during
2281 reading, and the name is necessary if the symbol already exists in
2282 the namespace and is not loaded again. */
2285 mio_component_ref (gfc_component **cp, gfc_symbol *sym)
2287 char name[GFC_MAX_SYMBOL_LEN + 1];
2291 p = mio_pointer_ref (cp);
2292 if (p->type == P_UNKNOWN)
2293 p->type = P_COMPONENT;
2295 if (iomode == IO_OUTPUT)
2296 mio_pool_string (&(*cp)->name);
2299 mio_internal_string (name);
2301 /* It can happen that a component reference can be read before the
2302 associated derived type symbol has been loaded. Return now and
2303 wait for a later iteration of load_needed. */
2307 if (sym->components != NULL && p->u.pointer == NULL)
2309 /* Symbol already loaded, so search by name. */
2310 for (q = sym->components; q; q = q->next)
2311 if (strcmp (q->name, name) == 0)
2315 gfc_internal_error ("mio_component_ref(): Component not found");
2317 associate_integer_pointer (p, q);
2320 /* Make sure this symbol will eventually be loaded. */
2321 p = find_pointer2 (sym);
2322 if (p->u.rsym.state == UNUSED)
2323 p->u.rsym.state = NEEDED;
2328 static void mio_namespace_ref (gfc_namespace **nsp);
2329 static void mio_formal_arglist (gfc_formal_arglist **formal);
2330 static void mio_typebound_proc (gfc_typebound_proc** proc);
2333 mio_component (gfc_component *c)
2337 gfc_formal_arglist *formal;
2341 if (iomode == IO_OUTPUT)
2343 p = get_pointer (c);
2344 mio_integer (&p->integer);
2349 p = get_integer (n);
2350 associate_integer_pointer (p, c);
2353 if (p->type == P_UNKNOWN)
2354 p->type = P_COMPONENT;
2356 mio_pool_string (&c->name);
2357 mio_typespec (&c->ts);
2358 mio_array_spec (&c->as);
2360 mio_symbol_attribute (&c->attr);
2361 c->attr.access = MIO_NAME (gfc_access) (c->attr.access, access_types);
2363 mio_expr (&c->initializer);
2365 if (c->attr.proc_pointer)
2367 if (iomode == IO_OUTPUT)
2370 while (formal && !formal->sym)
2371 formal = formal->next;
2374 mio_namespace_ref (&formal->sym->ns);
2376 mio_namespace_ref (&c->formal_ns);
2380 mio_namespace_ref (&c->formal_ns);
2381 /* TODO: if (c->formal_ns)
2383 c->formal_ns->proc_name = c;
2388 mio_formal_arglist (&c->formal);
2390 mio_typebound_proc (&c->tb);
2398 mio_component_list (gfc_component **cp)
2400 gfc_component *c, *tail;
2404 if (iomode == IO_OUTPUT)
2406 for (c = *cp; c; c = c->next)
2416 if (peek_atom () == ATOM_RPAREN)
2419 c = gfc_get_component ();
2436 mio_actual_arg (gfc_actual_arglist *a)
2439 mio_pool_string (&a->name);
2440 mio_expr (&a->expr);
2446 mio_actual_arglist (gfc_actual_arglist **ap)
2448 gfc_actual_arglist *a, *tail;
2452 if (iomode == IO_OUTPUT)
2454 for (a = *ap; a; a = a->next)
2464 if (peek_atom () != ATOM_LPAREN)
2467 a = gfc_get_actual_arglist ();
2483 /* Read and write formal argument lists. */
2486 mio_formal_arglist (gfc_formal_arglist **formal)
2488 gfc_formal_arglist *f, *tail;
2492 if (iomode == IO_OUTPUT)
2494 for (f = *formal; f; f = f->next)
2495 mio_symbol_ref (&f->sym);
2499 *formal = tail = NULL;
2501 while (peek_atom () != ATOM_RPAREN)
2503 f = gfc_get_formal_arglist ();
2504 mio_symbol_ref (&f->sym);
2506 if (*formal == NULL)
2519 /* Save or restore a reference to a symbol node. */
2522 mio_symbol_ref (gfc_symbol **symp)
2526 p = mio_pointer_ref (symp);
2527 if (p->type == P_UNKNOWN)
2530 if (iomode == IO_OUTPUT)
2532 if (p->u.wsym.state == UNREFERENCED)
2533 p->u.wsym.state = NEEDS_WRITE;
2537 if (p->u.rsym.state == UNUSED)
2538 p->u.rsym.state = NEEDED;
2544 /* Save or restore a reference to a symtree node. */
2547 mio_symtree_ref (gfc_symtree **stp)
2552 if (iomode == IO_OUTPUT)
2553 mio_symbol_ref (&(*stp)->n.sym);
2556 require_atom (ATOM_INTEGER);
2557 p = get_integer (atom_int);
2559 /* An unused equivalence member; make a symbol and a symtree
2561 if (in_load_equiv && p->u.rsym.symtree == NULL)
2563 /* Since this is not used, it must have a unique name. */
2564 p->u.rsym.symtree = gfc_get_unique_symtree (gfc_current_ns);
2566 /* Make the symbol. */
2567 if (p->u.rsym.sym == NULL)
2569 p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
2571 p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
2574 p->u.rsym.symtree->n.sym = p->u.rsym.sym;
2575 p->u.rsym.symtree->n.sym->refs++;
2576 p->u.rsym.referenced = 1;
2578 /* If the symbol is PRIVATE and in COMMON, load_commons will
2579 generate a fixup symbol, which must be associated. */
2581 resolve_fixups (p->fixup, p->u.rsym.sym);
2585 if (p->type == P_UNKNOWN)
2588 if (p->u.rsym.state == UNUSED)
2589 p->u.rsym.state = NEEDED;
2591 if (p->u.rsym.symtree != NULL)
2593 *stp = p->u.rsym.symtree;
2597 f = XCNEW (fixup_t);
2599 f->next = p->u.rsym.stfixup;
2600 p->u.rsym.stfixup = f;
2602 f->pointer = (void **) stp;
2609 mio_iterator (gfc_iterator **ip)
2615 if (iomode == IO_OUTPUT)
2622 if (peek_atom () == ATOM_RPAREN)
2628 *ip = gfc_get_iterator ();
2633 mio_expr (&iter->var);
2634 mio_expr (&iter->start);
2635 mio_expr (&iter->end);
2636 mio_expr (&iter->step);
2644 mio_constructor (gfc_constructor_base *cp)
2650 if (iomode == IO_OUTPUT)
2652 for (c = gfc_constructor_first (*cp); c; c = gfc_constructor_next (c))
2655 mio_expr (&c->expr);
2656 mio_iterator (&c->iterator);
2662 while (peek_atom () != ATOM_RPAREN)
2664 c = gfc_constructor_append_expr (cp, NULL, NULL);
2667 mio_expr (&c->expr);
2668 mio_iterator (&c->iterator);
2677 static const mstring ref_types[] = {
2678 minit ("ARRAY", REF_ARRAY),
2679 minit ("COMPONENT", REF_COMPONENT),
2680 minit ("SUBSTRING", REF_SUBSTRING),
2686 mio_ref (gfc_ref **rp)
2693 r->type = MIO_NAME (ref_type) (r->type, ref_types);
2698 mio_array_ref (&r->u.ar);
2702 mio_symbol_ref (&r->u.c.sym);
2703 mio_component_ref (&r->u.c.component, r->u.c.sym);
2707 mio_expr (&r->u.ss.start);
2708 mio_expr (&r->u.ss.end);
2709 mio_charlen (&r->u.ss.length);
2718 mio_ref_list (gfc_ref **rp)
2720 gfc_ref *ref, *head, *tail;
2724 if (iomode == IO_OUTPUT)
2726 for (ref = *rp; ref; ref = ref->next)
2733 while (peek_atom () != ATOM_RPAREN)
2736 head = tail = gfc_get_ref ();
2739 tail->next = gfc_get_ref ();
2753 /* Read and write an integer value. */
2756 mio_gmp_integer (mpz_t *integer)
2760 if (iomode == IO_INPUT)
2762 if (parse_atom () != ATOM_STRING)
2763 bad_module ("Expected integer string");
2765 mpz_init (*integer);
2766 if (mpz_set_str (*integer, atom_string, 10))
2767 bad_module ("Error converting integer");
2769 gfc_free (atom_string);
2773 p = mpz_get_str (NULL, 10, *integer);
2774 write_atom (ATOM_STRING, p);
2781 mio_gmp_real (mpfr_t *real)
2786 if (iomode == IO_INPUT)
2788 if (parse_atom () != ATOM_STRING)
2789 bad_module ("Expected real string");
2792 mpfr_set_str (*real, atom_string, 16, GFC_RND_MODE);
2793 gfc_free (atom_string);
2797 p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE);
2799 if (mpfr_nan_p (*real) || mpfr_inf_p (*real))
2801 write_atom (ATOM_STRING, p);
2806 atom_string = XCNEWVEC (char, strlen (p) + 20);
2808 sprintf (atom_string, "0.%s@%ld", p, exponent);
2810 /* Fix negative numbers. */
2811 if (atom_string[2] == '-')
2813 atom_string[0] = '-';
2814 atom_string[1] = '0';
2815 atom_string[2] = '.';
2818 write_atom (ATOM_STRING, atom_string);
2820 gfc_free (atom_string);
2826 /* Save and restore the shape of an array constructor. */
2829 mio_shape (mpz_t **pshape, int rank)
2835 /* A NULL shape is represented by (). */
2838 if (iomode == IO_OUTPUT)
2850 if (t == ATOM_RPAREN)
2857 shape = gfc_get_shape (rank);
2861 for (n = 0; n < rank; n++)
2862 mio_gmp_integer (&shape[n]);
2868 static const mstring expr_types[] = {
2869 minit ("OP", EXPR_OP),
2870 minit ("FUNCTION", EXPR_FUNCTION),
2871 minit ("CONSTANT", EXPR_CONSTANT),
2872 minit ("VARIABLE", EXPR_VARIABLE),
2873 minit ("SUBSTRING", EXPR_SUBSTRING),
2874 minit ("STRUCTURE", EXPR_STRUCTURE),
2875 minit ("ARRAY", EXPR_ARRAY),
2876 minit ("NULL", EXPR_NULL),
2877 minit ("COMPCALL", EXPR_COMPCALL),
2881 /* INTRINSIC_ASSIGN is missing because it is used as an index for
2882 generic operators, not in expressions. INTRINSIC_USER is also
2883 replaced by the correct function name by the time we see it. */
2885 static const mstring intrinsics[] =
2887 minit ("UPLUS", INTRINSIC_UPLUS),
2888 minit ("UMINUS", INTRINSIC_UMINUS),
2889 minit ("PLUS", INTRINSIC_PLUS),
2890 minit ("MINUS", INTRINSIC_MINUS),
2891 minit ("TIMES", INTRINSIC_TIMES),
2892 minit ("DIVIDE", INTRINSIC_DIVIDE),
2893 minit ("POWER", INTRINSIC_POWER),
2894 minit ("CONCAT", INTRINSIC_CONCAT),
2895 minit ("AND", INTRINSIC_AND),
2896 minit ("OR", INTRINSIC_OR),
2897 minit ("EQV", INTRINSIC_EQV),
2898 minit ("NEQV", INTRINSIC_NEQV),
2899 minit ("EQ_SIGN", INTRINSIC_EQ),
2900 minit ("EQ", INTRINSIC_EQ_OS),
2901 minit ("NE_SIGN", INTRINSIC_NE),
2902 minit ("NE", INTRINSIC_NE_OS),
2903 minit ("GT_SIGN", INTRINSIC_GT),
2904 minit ("GT", INTRINSIC_GT_OS),
2905 minit ("GE_SIGN", INTRINSIC_GE),
2906 minit ("GE", INTRINSIC_GE_OS),
2907 minit ("LT_SIGN", INTRINSIC_LT),
2908 minit ("LT", INTRINSIC_LT_OS),
2909 minit ("LE_SIGN", INTRINSIC_LE),
2910 minit ("LE", INTRINSIC_LE_OS),
2911 minit ("NOT", INTRINSIC_NOT),
2912 minit ("PARENTHESES", INTRINSIC_PARENTHESES),
2917 /* Remedy a couple of situations where the gfc_expr's can be defective. */
2920 fix_mio_expr (gfc_expr *e)
2922 gfc_symtree *ns_st = NULL;
2925 if (iomode != IO_OUTPUT)
2930 /* If this is a symtree for a symbol that came from a contained module
2931 namespace, it has a unique name and we should look in the current
2932 namespace to see if the required, non-contained symbol is available
2933 yet. If so, the latter should be written. */
2934 if (e->symtree->n.sym && check_unique_name (e->symtree->name))
2935 ns_st = gfc_find_symtree (gfc_current_ns->sym_root,
2936 e->symtree->n.sym->name);
2938 /* On the other hand, if the existing symbol is the module name or the
2939 new symbol is a dummy argument, do not do the promotion. */
2940 if (ns_st && ns_st->n.sym
2941 && ns_st->n.sym->attr.flavor != FL_MODULE
2942 && !e->symtree->n.sym->attr.dummy)
2945 else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
2949 /* In some circumstances, a function used in an initialization
2950 expression, in one use associated module, can fail to be
2951 coupled to its symtree when used in a specification
2952 expression in another module. */
2953 fname = e->value.function.esym ? e->value.function.esym->name
2954 : e->value.function.isym->name;
2955 e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname);
2960 /* This is probably a reference to a private procedure from another
2961 module. To prevent a segfault, make a generic with no specific
2962 instances. If this module is used, without the required
2963 specific coming from somewhere, the appropriate error message
2965 gfc_get_symbol (fname, gfc_current_ns, &sym);
2966 sym->attr.flavor = FL_PROCEDURE;
2967 sym->attr.generic = 1;
2968 e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname);
2973 /* Read and write expressions. The form "()" is allowed to indicate a
2977 mio_expr (gfc_expr **ep)
2985 if (iomode == IO_OUTPUT)
2994 MIO_NAME (expr_t) (e->expr_type, expr_types);
2999 if (t == ATOM_RPAREN)
3006 bad_module ("Expected expression type");
3008 e = *ep = gfc_get_expr ();
3009 e->where = gfc_current_locus;
3010 e->expr_type = (expr_t) find_enum (expr_types);
3013 mio_typespec (&e->ts);
3014 mio_integer (&e->rank);
3018 switch (e->expr_type)
3022 = MIO_NAME (gfc_intrinsic_op) (e->value.op.op, intrinsics);
3024 switch (e->value.op.op)
3026 case INTRINSIC_UPLUS:
3027 case INTRINSIC_UMINUS:
3029 case INTRINSIC_PARENTHESES:
3030 mio_expr (&e->value.op.op1);
3033 case INTRINSIC_PLUS:
3034 case INTRINSIC_MINUS:
3035 case INTRINSIC_TIMES:
3036 case INTRINSIC_DIVIDE:
3037 case INTRINSIC_POWER:
3038 case INTRINSIC_CONCAT:
3042 case INTRINSIC_NEQV:
3044 case INTRINSIC_EQ_OS:
3046 case INTRINSIC_NE_OS:
3048 case INTRINSIC_GT_OS:
3050 case INTRINSIC_GE_OS:
3052 case INTRINSIC_LT_OS:
3054 case INTRINSIC_LE_OS:
3055 mio_expr (&e->value.op.op1);
3056 mio_expr (&e->value.op.op2);
3060 bad_module ("Bad operator");
3066 mio_symtree_ref (&e->symtree);
3067 mio_actual_arglist (&e->value.function.actual);
3069 if (iomode == IO_OUTPUT)
3071 e->value.function.name
3072 = mio_allocated_string (e->value.function.name);
3073 flag = e->value.function.esym != NULL;
3074 mio_integer (&flag);
3076 mio_symbol_ref (&e->value.function.esym);
3078 write_atom (ATOM_STRING, e->value.function.isym->name);
3082 require_atom (ATOM_STRING);
3083 e->value.function.name = gfc_get_string (atom_string);
3084 gfc_free (atom_string);
3086 mio_integer (&flag);
3088 mio_symbol_ref (&e->value.function.esym);
3091 require_atom (ATOM_STRING);
3092 e->value.function.isym = gfc_find_function (atom_string);
3093 gfc_free (atom_string);
3100 mio_symtree_ref (&e->symtree);
3101 mio_ref_list (&e->ref);
3104 case EXPR_SUBSTRING:
3105 e->value.character.string
3106 = CONST_CAST (gfc_char_t *,
3107 mio_allocated_wide_string (e->value.character.string,
3108 e->value.character.length));
3109 mio_ref_list (&e->ref);
3112 case EXPR_STRUCTURE:
3114 mio_constructor (&e->value.constructor);
3115 mio_shape (&e->shape, e->rank);
3122 mio_gmp_integer (&e->value.integer);
3126 gfc_set_model_kind (e->ts.kind);
3127 mio_gmp_real (&e->value.real);
3131 gfc_set_model_kind (e->ts.kind);
3132 mio_gmp_real (&mpc_realref (e->value.complex));
3133 mio_gmp_real (&mpc_imagref (e->value.complex));
3137 mio_integer (&e->value.logical);
3141 mio_integer (&e->value.character.length);
3142 e->value.character.string
3143 = CONST_CAST (gfc_char_t *,
3144 mio_allocated_wide_string (e->value.character.string,
3145 e->value.character.length));
3149 bad_module ("Bad type in constant expression");
3167 /* Read and write namelists. */
3170 mio_namelist (gfc_symbol *sym)
3172 gfc_namelist *n, *m;
3173 const char *check_name;
3177 if (iomode == IO_OUTPUT)
3179 for (n = sym->namelist; n; n = n->next)
3180 mio_symbol_ref (&n->sym);
3184 /* This departure from the standard is flagged as an error.
3185 It does, in fact, work correctly. TODO: Allow it
3187 if (sym->attr.flavor == FL_NAMELIST)
3189 check_name = find_use_name (sym->name, false);
3190 if (check_name && strcmp (check_name, sym->name) != 0)
3191 gfc_error ("Namelist %s cannot be renamed by USE "
3192 "association to %s", sym->name, check_name);
3196 while (peek_atom () != ATOM_RPAREN)
3198 n = gfc_get_namelist ();
3199 mio_symbol_ref (&n->sym);
3201 if (sym->namelist == NULL)
3208 sym->namelist_tail = m;
3215 /* Save/restore lists of gfc_interface structures. When loading an
3216 interface, we are really appending to the existing list of
3217 interfaces. Checking for duplicate and ambiguous interfaces has to
3218 be done later when all symbols have been loaded. */
3221 mio_interface_rest (gfc_interface **ip)
3223 gfc_interface *tail, *p;
3224 pointer_info *pi = NULL;
3226 if (iomode == IO_OUTPUT)
3229 for (p = *ip; p; p = p->next)
3230 mio_symbol_ref (&p->sym);
3245 if (peek_atom () == ATOM_RPAREN)
3248 p = gfc_get_interface ();
3249 p->where = gfc_current_locus;
3250 pi = mio_symbol_ref (&p->sym);
3266 /* Save/restore a nameless operator interface. */
3269 mio_interface (gfc_interface **ip)
3272 mio_interface_rest (ip);
3276 /* Save/restore a named operator interface. */
3279 mio_symbol_interface (const char **name, const char **module,
3283 mio_pool_string (name);
3284 mio_pool_string (module);
3285 mio_interface_rest (ip);
3290 mio_namespace_ref (gfc_namespace **nsp)
3295 p = mio_pointer_ref (nsp);
3297 if (p->type == P_UNKNOWN)
3298 p->type = P_NAMESPACE;
3300 if (iomode == IO_INPUT && p->integer != 0)
3302 ns = (gfc_namespace *) p->u.pointer;
3305 ns = gfc_get_namespace (NULL, 0);
3306 associate_integer_pointer (p, ns);
3314 /* Save/restore the f2k_derived namespace of a derived-type symbol. */
3316 static gfc_namespace* current_f2k_derived;
3319 mio_typebound_proc (gfc_typebound_proc** proc)
3322 int overriding_flag;
3324 if (iomode == IO_INPUT)
3326 *proc = gfc_get_typebound_proc ();
3327 (*proc)->where = gfc_current_locus;
3333 (*proc)->access = MIO_NAME (gfc_access) ((*proc)->access, access_types);
3335 /* IO the NON_OVERRIDABLE/DEFERRED combination. */
3336 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3337 overriding_flag = ((*proc)->deferred << 1) | (*proc)->non_overridable;
3338 overriding_flag = mio_name (overriding_flag, binding_overriding);
3339 (*proc)->deferred = ((overriding_flag & 2) != 0);
3340 (*proc)->non_overridable = ((overriding_flag & 1) != 0);
3341 gcc_assert (!((*proc)->deferred && (*proc)->non_overridable));
3343 (*proc)->nopass = mio_name ((*proc)->nopass, binding_passing);
3344 (*proc)->is_generic = mio_name ((*proc)->is_generic, binding_generic);
3345 (*proc)->ppc = mio_name((*proc)->ppc, binding_ppc);
3347 mio_pool_string (&((*proc)->pass_arg));
3349 flag = (int) (*proc)->pass_arg_num;
3350 mio_integer (&flag);
3351 (*proc)->pass_arg_num = (unsigned) flag;
3353 if ((*proc)->is_generic)
3359 if (iomode == IO_OUTPUT)
3360 for (g = (*proc)->u.generic; g; g = g->next)
3361 mio_allocated_string (g->specific_st->name);
3364 (*proc)->u.generic = NULL;
3365 while (peek_atom () != ATOM_RPAREN)
3367 gfc_symtree** sym_root;
3369 g = gfc_get_tbp_generic ();
3372 require_atom (ATOM_STRING);
3373 sym_root = ¤t_f2k_derived->tb_sym_root;
3374 g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string);
3375 gfc_free (atom_string);
3377 g->next = (*proc)->u.generic;
3378 (*proc)->u.generic = g;
3384 else if (!(*proc)->ppc)
3385 mio_symtree_ref (&(*proc)->u.specific);
3390 /* Walker-callback function for this purpose. */
3392 mio_typebound_symtree (gfc_symtree* st)
3394 if (iomode == IO_OUTPUT && !st->n.tb)
3397 if (iomode == IO_OUTPUT)
3400 mio_allocated_string (st->name);
3402 /* For IO_INPUT, the above is done in mio_f2k_derived. */
3404 mio_typebound_proc (&st->n.tb);
3408 /* IO a full symtree (in all depth). */
3410 mio_full_typebound_tree (gfc_symtree** root)
3414 if (iomode == IO_OUTPUT)
3415 gfc_traverse_symtree (*root, &mio_typebound_symtree);
3418 while (peek_atom () == ATOM_LPAREN)
3424 require_atom (ATOM_STRING);
3425 st = gfc_get_tbp_symtree (root, atom_string);
3426 gfc_free (atom_string);
3428 mio_typebound_symtree (st);
3436 mio_finalizer (gfc_finalizer **f)
3438 if (iomode == IO_OUTPUT)
3441 gcc_assert ((*f)->proc_tree); /* Should already be resolved. */
3442 mio_symtree_ref (&(*f)->proc_tree);
3446 *f = gfc_get_finalizer ();
3447 (*f)->where = gfc_current_locus; /* Value should not matter. */
3450 mio_symtree_ref (&(*f)->proc_tree);
3451 (*f)->proc_sym = NULL;
3456 mio_f2k_derived (gfc_namespace *f2k)
3458 current_f2k_derived = f2k;
3460 /* Handle the list of finalizer procedures. */
3462 if (iomode == IO_OUTPUT)
3465 for (f = f2k->finalizers; f; f = f->next)
3470 f2k->finalizers = NULL;
3471 while (peek_atom () != ATOM_RPAREN)
3473 gfc_finalizer *cur = NULL;
3474 mio_finalizer (&cur);
3475 cur->next = f2k->finalizers;
3476 f2k->finalizers = cur;
3481 /* Handle type-bound procedures. */
3482 mio_full_typebound_tree (&f2k->tb_sym_root);
3484 /* Type-bound user operators. */
3485 mio_full_typebound_tree (&f2k->tb_uop_root);
3487 /* Type-bound intrinsic operators. */
3489 if (iomode == IO_OUTPUT)
3492 for (op = GFC_INTRINSIC_BEGIN; op != GFC_INTRINSIC_END; ++op)
3494 gfc_intrinsic_op realop;
3496 if (op == INTRINSIC_USER || !f2k->tb_op[op])
3500 realop = (gfc_intrinsic_op) op;
3501 mio_intrinsic_op (&realop);
3502 mio_typebound_proc (&f2k->tb_op[op]);
3507 while (peek_atom () != ATOM_RPAREN)
3509 gfc_intrinsic_op op = GFC_INTRINSIC_BEGIN; /* Silence GCC. */
3512 mio_intrinsic_op (&op);
3513 mio_typebound_proc (&f2k->tb_op[op]);
3520 mio_full_f2k_derived (gfc_symbol *sym)
3524 if (iomode == IO_OUTPUT)
3526 if (sym->f2k_derived)
3527 mio_f2k_derived (sym->f2k_derived);
3531 if (peek_atom () != ATOM_RPAREN)
3533 sym->f2k_derived = gfc_get_namespace (NULL, 0);
3534 mio_f2k_derived (sym->f2k_derived);
3537 gcc_assert (!sym->f2k_derived);
3544 /* Unlike most other routines, the address of the symbol node is already
3545 fixed on input and the name/module has already been filled in. */
3548 mio_symbol (gfc_symbol *sym)
3550 int intmod = INTMOD_NONE;
3554 mio_symbol_attribute (&sym->attr);
3555 mio_typespec (&sym->ts);
3557 if (iomode == IO_OUTPUT)
3558 mio_namespace_ref (&sym->formal_ns);
3561 mio_namespace_ref (&sym->formal_ns);
3564 sym->formal_ns->proc_name = sym;
3569 /* Save/restore common block links. */
3570 mio_symbol_ref (&sym->common_next);
3572 mio_formal_arglist (&sym->formal);
3574 if (sym->attr.flavor == FL_PARAMETER)
3575 mio_expr (&sym->value);
3577 mio_array_spec (&sym->as);
3579 mio_symbol_ref (&sym->result);
3581 if (sym->attr.cray_pointee)
3582 mio_symbol_ref (&sym->cp_pointer);
3584 /* Note that components are always saved, even if they are supposed
3585 to be private. Component access is checked during searching. */
3587 mio_component_list (&sym->components);
3589 if (sym->components != NULL)
3590 sym->component_access
3591 = MIO_NAME (gfc_access) (sym->component_access, access_types);
3593 /* Load/save the f2k_derived namespace of a derived-type symbol. */
3594 mio_full_f2k_derived (sym);
3598 /* Add the fields that say whether this is from an intrinsic module,
3599 and if so, what symbol it is within the module. */
3600 /* mio_integer (&(sym->from_intmod)); */
3601 if (iomode == IO_OUTPUT)
3603 intmod = sym->from_intmod;
3604 mio_integer (&intmod);
3608 mio_integer (&intmod);
3609 sym->from_intmod = (intmod_id) intmod;
3612 mio_integer (&(sym->intmod_sym_id));
3614 if (sym->attr.flavor == FL_DERIVED)
3615 mio_integer (&(sym->hash_value));
3621 /************************* Top level subroutines *************************/
3623 /* Given a root symtree node and a symbol, try to find a symtree that
3624 references the symbol that is not a unique name. */
3626 static gfc_symtree *
3627 find_symtree_for_symbol (gfc_symtree *st, gfc_symbol *sym)
3629 gfc_symtree *s = NULL;
3634 s = find_symtree_for_symbol (st->right, sym);
3637 s = find_symtree_for_symbol (st->left, sym);
3641 if (st->n.sym == sym && !check_unique_name (st->name))
3648 /* A recursive function to look for a specific symbol by name and by
3649 module. Whilst several symtrees might point to one symbol, its
3650 is sufficient for the purposes here than one exist. Note that
3651 generic interfaces are distinguished as are symbols that have been
3652 renamed in another module. */
3653 static gfc_symtree *
3654 find_symbol (gfc_symtree *st, const char *name,
3655 const char *module, int generic)
3658 gfc_symtree *retval, *s;
3660 if (st == NULL || st->n.sym == NULL)
3663 c = strcmp (name, st->n.sym->name);
3664 if (c == 0 && st->n.sym->module
3665 && strcmp (module, st->n.sym->module) == 0
3666 && !check_unique_name (st->name))
3668 s = gfc_find_symtree (gfc_current_ns->sym_root, name);
3670 /* Detect symbols that are renamed by use association in another
3671 module by the absence of a symtree and null attr.use_rename,
3672 since the latter is not transmitted in the module file. */
3673 if (((!generic && !st->n.sym->attr.generic)
3674 || (generic && st->n.sym->attr.generic))
3675 && !(s == NULL && !st->n.sym->attr.use_rename))
3679 retval = find_symbol (st->left, name, module, generic);
3682 retval = find_symbol (st->right, name, module, generic);
3688 /* Skip a list between balanced left and right parens. */
3698 switch (parse_atom ())
3709 gfc_free (atom_string);
3721 /* Load operator interfaces from the module. Interfaces are unusual
3722 in that they attach themselves to existing symbols. */
3725 load_operator_interfaces (void)
3728 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3730 pointer_info *pi = NULL;
3735 while (peek_atom () != ATOM_RPAREN)
3739 mio_internal_string (name);
3740 mio_internal_string (module);
3742 n = number_use_names (name, true);
3745 for (i = 1; i <= n; i++)
3747 /* Decide if we need to load this one or not. */
3748 p = find_use_name_n (name, &i, true);
3752 while (parse_atom () != ATOM_RPAREN);
3758 uop = gfc_get_uop (p);
3759 pi = mio_interface_rest (&uop->op);
3763 if (gfc_find_uop (p, NULL))
3765 uop = gfc_get_uop (p);
3766 uop->op = gfc_get_interface ();
3767 uop->op->where = gfc_current_locus;
3768 add_fixup (pi->integer, &uop->op->sym);
3777 /* Load interfaces from the module. Interfaces are unusual in that
3778 they attach themselves to existing symbols. */
3781 load_generic_interfaces (void)
3784 char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
3786 gfc_interface *generic = NULL, *gen = NULL;
3788 bool ambiguous_set = false;
3792 while (peek_atom () != ATOM_RPAREN)
3796 mio_internal_string (name);
3797 mio_internal_string (module);
3799 n = number_use_names (name, false);
3800 renamed = n ? 1 : 0;
3803 for (i = 1; i <= n; i++)
3806 /* Decide if we need to load this one or not. */
3807 p = find_use_name_n (name, &i, false);
3809 st = find_symbol (gfc_current_ns->sym_root,
3810 name, module_name, 1);
3812 if (!p || gfc_find_symbol (p, NULL, 0, &sym))
3814 /* Skip the specific names for these cases. */
3815 while (i == 1 && parse_atom () != ATOM_RPAREN);
3820 /* If the symbol exists already and is being USEd without being
3821 in an ONLY clause, do not load a new symtree(11.3.2). */
3822 if (!only_flag && st)
3827 /* Make the symbol inaccessible if it has been added by a USE
3828 statement without an ONLY(11.3.2). */
3830 && !st->n.sym->attr.use_only
3831 && !st->n.sym->attr.use_rename
3832 && strcmp (st->n.sym->module, module_name) == 0)
3835 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
3836 st = gfc_get_unique_symtree (gfc_current_ns);
3843 if (strcmp (st->name, p) != 0)
3845 st = gfc_new_symtree (&gfc_current_ns->sym_root, p);
3851 /* Since we haven't found a valid generic interface, we had
3855 gfc_get_symbol (p, NULL, &sym);
3856 sym->name = gfc_get_string (name);
3857 sym->module = gfc_get_string (module_name);
3858 sym->attr.flavor = FL_PROCEDURE;
3859 sym->attr.generic = 1;
3860 sym->attr.use_assoc = 1;
3865 /* Unless sym is a generic interface, this reference
3868 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
3872 if (st && !sym->attr.generic
3875 && strcmp(module, sym->module))
3877 ambiguous_set = true;
3882 sym->attr.use_only = only_flag;
3883 sym->attr.use_rename = renamed;
3887 mio_interface_rest (&sym->generic);
3888 generic = sym->generic;
3890 else if (!sym->generic)
3892 sym->generic = generic;
3893 sym->attr.generic_copy = 1;
3896 /* If a procedure that is not generic has generic interfaces
3897 that include itself, it is generic! We need to take care
3898 to retain symbols ambiguous that were already so. */
3899 if (sym->attr.use_assoc
3900 && !sym->attr.generic
3901 && sym->attr.flavor == FL_PROCEDURE)
3903 for (gen = generic; gen; gen = gen->next)
3905 if (gen->sym == sym)
3907 sym->attr.generic = 1;
3922 /* Load common blocks. */
3927 char name[GFC_MAX_SYMBOL_LEN + 1];
3932 while (peek_atom () != ATOM_RPAREN)
3936 mio_internal_string (name);
3938 p = gfc_get_common (name, 1);
3940 mio_symbol_ref (&p->head);
3941 mio_integer (&flags);
3945 p->threadprivate = 1;
3948 /* Get whether this was a bind(c) common or not. */
3949 mio_integer (&p->is_bind_c);
3950 /* Get the binding label. */
3951 mio_internal_string (p->binding_label);
3960 /* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this
3961 so that unused variables are not loaded and so that the expression can
3967 gfc_equiv *head, *tail, *end, *eq;
3971 in_load_equiv = true;
3973 end = gfc_current_ns->equiv;
3974 while (end != NULL && end->next != NULL)
3977 while (peek_atom () != ATOM_RPAREN) {
3981 while(peek_atom () != ATOM_RPAREN)
3984 head = tail = gfc_get_equiv ();
3987 tail->eq = gfc_get_equiv ();
3991 mio_pool_string (&tail->module);
3992 mio_expr (&tail->expr);
3995 /* Unused equivalence members have a unique name. In addition, it
3996 must be checked that the symbols are from the same module. */
3998 for (eq = head; eq; eq = eq->eq)
4000 if (eq->expr->symtree->n.sym->module
4001 && head->expr->symtree->n.sym->module
4002 && strcmp (head->expr->symtree->n.sym->module,
4003 eq->expr->symtree->n.sym->module) == 0
4004 && !check_unique_name (eq->expr->symtree->name))
4013 for (eq = head; eq; eq = head)
4016 gfc_free_expr (eq->expr);
4022 gfc_current_ns->equiv = head;
4033 in_load_equiv = false;
4037 /* This function loads the sym_root of f2k_derived with the extensions to
4038 the derived type. */
4040 load_derived_extensions (void)
4043 gfc_symbol *derived;
4047 char name[GFC_MAX_SYMBOL_LEN + 1];
4048 char module[GFC_MAX_SYMBOL_LEN + 1];
4052 while (peek_atom () != ATOM_RPAREN)
4055 mio_integer (&symbol);
4056 info = get_integer (symbol);
4057 derived = info->u.rsym.sym;
4059 /* This one is not being loaded. */
4060 if (!info || !derived)
4062 while (peek_atom () != ATOM_RPAREN)
4067 gcc_assert (derived->attr.flavor == FL_DERIVED);
4068 if (derived->f2k_derived == NULL)
4069 derived->f2k_derived = gfc_get_namespace (NULL, 0);
4071 while (peek_atom () != ATOM_RPAREN)
4074 mio_internal_string (name);
4075 mio_internal_string (module);
4077 /* Only use one use name to find the symbol. */
4079 p = find_use_name_n (name, &j, false);
4082 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
4084 st = gfc_find_symtree (derived->f2k_derived->sym_root, name);
4087 /* Only use the real name in f2k_derived to ensure a single
4089 st = gfc_new_symtree (&derived->f2k_derived->sym_root, name);
4102 /* Recursive function to traverse the pointer_info tree and load a
4103 needed symbol. We return nonzero if we load a symbol and stop the
4104 traversal, because the act of loading can alter the tree. */
4107 load_needed (pointer_info *p)
4118 rv |= load_needed (p->left);
4119 rv |= load_needed (p->right);
4121 if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED)
4124 p->u.rsym.state = USED;
4126 set_module_locus (&p->u.rsym.where);
4128 sym = p->u.rsym.sym;
4131 q = get_integer (p->u.rsym.ns);
4133 ns = (gfc_namespace *) q->u.pointer;
4136 /* Create an interface namespace if necessary. These are
4137 the namespaces that hold the formal parameters of module
4140 ns = gfc_get_namespace (NULL, 0);
4141 associate_integer_pointer (q, ns);
4144 /* Use the module sym as 'proc_name' so that gfc_get_symbol_decl
4145 doesn't go pear-shaped if the symbol is used. */
4147 gfc_find_symbol (p->u.rsym.module, gfc_current_ns,
4150 sym = gfc_new_symbol (p->u.rsym.true_name, ns);
4151 sym->module = gfc_get_string (p->u.rsym.module);
4152 strcpy (sym->binding_label, p->u.rsym.binding_label);
4154 associate_integer_pointer (p, sym);
4158 sym->attr.use_assoc = 1;
4160 sym->attr.use_only = 1;
4161 if (p->u.rsym.renamed)
4162 sym->attr.use_rename = 1;
4168 /* Recursive function for cleaning up things after a module has been read. */
4171 read_cleanup (pointer_info *p)
4179 read_cleanup (p->left);
4180 read_cleanup (p->right);
4182 if (p->type == P_SYMBOL && p->u.rsym.state == USED && !p->u.rsym.referenced)
4184 /* Add hidden symbols to the symtree. */
4185 q = get_integer (p->u.rsym.ns);
4186 st = gfc_get_unique_symtree ((gfc_namespace *) q->u.pointer);
4188 st->n.sym = p->u.rsym.sym;
4191 /* Fixup any symtree references. */
4192 p->u.rsym.symtree = st;
4193 resolve_fixups (p->u.rsym.stfixup, st);
4194 p->u.rsym.stfixup = NULL;
4197 /* Free unused symbols. */
4198 if (p->type == P_SYMBOL && p->u.rsym.state == UNUSED)
4199 gfc_free_symbol (p->u.rsym.sym);
4203 /* It is not quite enough to check for ambiguity in the symbols by
4204 the loaded symbol and the new symbol not being identical. */
4206 check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
4210 symbol_attribute attr;
4212 rsym = info->u.rsym.sym;
4216 if (st_sym->attr.vtab || st_sym->attr.vtype)
4219 /* If the existing symbol is generic from a different module and
4220 the new symbol is generic there can be no ambiguity. */
4221 if (st_sym->attr.generic
4223 && strcmp (st_sym->module, module_name))
4225 /* The new symbol's attributes have not yet been read. Since
4226 we need attr.generic, read it directly. */
4227 get_module_locus (&locus);
4228 set_module_locus (&info->u.rsym.where);
4231 mio_symbol_attribute (&attr);
4232 set_module_locus (&locus);
4241 /* Read a module file. */
4246 module_locus operator_interfaces, user_operators, extensions;
4248 char name[GFC_MAX_SYMBOL_LEN + 1];
4250 int ambiguous, j, nuse, symbol;
4251 pointer_info *info, *q;
4256 get_module_locus (&operator_interfaces); /* Skip these for now. */
4259 get_module_locus (&user_operators);
4263 /* Skip commons, equivalences and derived type extensions for now. */
4267 get_module_locus (&extensions);
4272 /* Create the fixup nodes for all the symbols. */
4274 while (peek_atom () != ATOM_RPAREN)
4276 require_atom (ATOM_INTEGER);
4277 info = get_integer (atom_int);
4279 info->type = P_SYMBOL;
4280 info->u.rsym.state = UNUSED;
4282 mio_internal_string (info->u.rsym.true_name);
4283 mio_internal_string (info->u.rsym.module);
4284 mio_internal_string (info->u.rsym.binding_label);
4287 require_atom (ATOM_INTEGER);
4288 info->u.rsym.ns = atom_int;
4290 get_module_locus (&info->u.rsym.where);
4293 /* See if the symbol has already been loaded by a previous module.
4294 If so, we reference the existing symbol and prevent it from
4295 being loaded again. This should not happen if the symbol being
4296 read is an index for an assumed shape dummy array (ns != 1). */
4298 sym = find_true_name (info->u.rsym.true_name, info->u.rsym.module);
4301 || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
4304 info->u.rsym.state = USED;
4305 info->u.rsym.sym = sym;
4307 /* Some symbols do not have a namespace (eg. formal arguments),
4308 so the automatic "unique symtree" mechanism must be suppressed
4309 by marking them as referenced. */
4310 q = get_integer (info->u.rsym.ns);
4311 if (q->u.pointer == NULL)
4313 info->u.rsym.referenced = 1;
4317 /* If possible recycle the symtree that references the symbol.
4318 If a symtree is not found and the module does not import one,
4319 a unique-name symtree is found by read_cleanup. */
4320 st = find_symtree_for_symbol (gfc_current_ns->sym_root, sym);
4323 info->u.rsym.symtree = st;
4324 info->u.rsym.referenced = 1;
4330 /* Parse the symtree lists. This lets us mark which symbols need to
4331 be loaded. Renaming is also done at this point by replacing the
4336 while (peek_atom () != ATOM_RPAREN)
4338 mio_internal_string (name);
4339 mio_integer (&ambiguous);
4340 mio_integer (&symbol);
4342 info = get_integer (symbol);
4344 /* See how many use names there are. If none, go through the start
4345 of the loop at least once. */
4346 nuse = number_use_names (name, false);
4347 info->u.rsym.renamed = nuse ? 1 : 0;
4352 for (j = 1; j <= nuse; j++)
4354 /* Get the jth local name for this symbol. */
4355 p = find_use_name_n (name, &j, false);
4357 if (p == NULL && strcmp (name, module_name) == 0)
4360 /* Skip symtree nodes not in an ONLY clause, unless there
4361 is an existing symtree loaded from another USE statement. */
4364 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4366 info->u.rsym.symtree = st;
4370 /* If a symbol of the same name and module exists already,
4371 this symbol, which is not in an ONLY clause, must not be
4372 added to the namespace(11.3.2). Note that find_symbol
4373 only returns the first occurrence that it finds. */
4374 if (!only_flag && !info->u.rsym.renamed
4375 && strcmp (name, module_name) != 0
4376 && find_symbol (gfc_current_ns->sym_root, name,
4380 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
4384 /* Check for ambiguous symbols. */
4385 if (check_for_ambiguous (st->n.sym, info))
4387 info->u.rsym.symtree = st;
4391 st = gfc_find_symtree (gfc_current_ns->sym_root, name);
4393 /* Delete the symtree if the symbol has been added by a USE
4394 statement without an ONLY(11.3.2). Remember that the rsym
4395 will be the same as the symbol found in the symtree, for
4397 if (st && (only_flag || info->u.rsym.renamed)
4398 && !st->n.sym->attr.use_only
4399 && !st->n.sym->attr.use_rename
4400 && info->u.rsym.sym == st->n.sym)
4401 gfc_delete_symtree (&gfc_current_ns->sym_root, name);
4403 /* Create a symtree node in the current namespace for this
4405 st = check_unique_name (p)
4406 ? gfc_get_unique_symtree (gfc_current_ns)
4407 : gfc_new_symtree (&gfc_current_ns->sym_root, p);
4408 st->ambiguous = ambiguous;
4410 sym = info->u.rsym.sym;
4412 /* Create a symbol node if it doesn't already exist. */
4415 info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
4417 sym = info->u.rsym.sym;
4418 sym->module = gfc_get_string (info->u.rsym.module);
4420 /* TODO: hmm, can we test this? Do we know it will be
4421 initialized to zeros? */
4422 if (info->u.rsym.binding_label[0] != '\0')
4423 strcpy (sym->binding_label, info->u.rsym.binding_label);
4429 if (strcmp (name, p) != 0)
4430 sym->attr.use_rename = 1;
4432 /* We need to set the only_flag here so that symbols from the
4433 same USE...ONLY but earlier are not deleted from the tree in
4434 the gfc_delete_symtree above. */
4435 sym->attr.use_only = only_flag;
4437 /* Store the symtree pointing to this symbol. */
4438 info->u.rsym.symtree = st;
4440 if (info->u.rsym.state == UNUSED)
4441 info->u.rsym.state = NEEDED;
4442 info->u.rsym.referenced = 1;
4449 /* Load intrinsic operator interfaces. */
4450 set_module_locus (&operator_interfaces);
4453 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4455 if (i == INTRINSIC_USER)
4460 u = find_use_operator ((gfc_intrinsic_op) i);
4471 mio_interface (&gfc_current_ns->op[i]);
4476 /* Load generic and user operator interfaces. These must follow the
4477 loading of symtree because otherwise symbols can be marked as
4480 set_module_locus (&user_operators);
4482 load_operator_interfaces ();
4483 load_generic_interfaces ();
4488 /* At this point, we read those symbols that are needed but haven't
4489 been loaded yet. If one symbol requires another, the other gets
4490 marked as NEEDED if its previous state was UNUSED. */
4492 while (load_needed (pi_root));
4494 /* Make sure all elements of the rename-list were found in the module. */
4496 for (u = gfc_rename_list; u; u = u->next)
4501 if (u->op == INTRINSIC_NONE)
4503 gfc_error ("Symbol '%s' referenced at %L not found in module '%s'",
4504 u->use_name, &u->where, module_name);
4508 if (u->op == INTRINSIC_USER)
4510 gfc_error ("User operator '%s' referenced at %L not found "
4511 "in module '%s'", u->use_name, &u->where, module_name);
4515 gfc_error ("Intrinsic operator '%s' referenced at %L not found "
4516 "in module '%s'", gfc_op2string (u->op), &u->where,
4520 /* Now we should be in a position to fill f2k_derived with derived type
4521 extensions, since everything has been loaded. */
4522 set_module_locus (&extensions);
4523 load_derived_extensions ();
4525 /* Clean up symbol nodes that were never loaded, create references
4526 to hidden symbols. */
4528 read_cleanup (pi_root);
4532 /* Given an access type that is specific to an entity and the default
4533 access, return nonzero if the entity is publicly accessible. If the
4534 element is declared as PUBLIC, then it is public; if declared
4535 PRIVATE, then private, and otherwise it is public unless the default
4536 access in this context has been declared PRIVATE. */
4539 gfc_check_access (gfc_access specific_access, gfc_access default_access)
4541 if (specific_access == ACCESS_PUBLIC)
4543 if (specific_access == ACCESS_PRIVATE)
4546 if (gfc_option.flag_module_private)
4547 return default_access == ACCESS_PUBLIC;
4549 return default_access != ACCESS_PRIVATE;
4553 /* A structure to remember which commons we've already written. */
4555 struct written_common
4557 BBT_HEADER(written_common);
4558 const char *name, *label;
4561 static struct written_common *written_commons = NULL;
4563 /* Comparison function used for balancing the binary tree. */
4566 compare_written_commons (void *a1, void *b1)
4568 const char *aname = ((struct written_common *) a1)->name;
4569 const char *alabel = ((struct written_common *) a1)->label;
4570 const char *bname = ((struct written_common *) b1)->name;
4571 const char *blabel = ((struct written_common *) b1)->label;
4572 int c = strcmp (aname, bname);
4574 return (c != 0 ? c : strcmp (alabel, blabel));
4577 /* Free a list of written commons. */
4580 free_written_common (struct written_common *w)
4586 free_written_common (w->left);
4588 free_written_common (w->right);
4593 /* Write a common block to the module -- recursive helper function. */
4596 write_common_0 (gfc_symtree *st, bool this_module)
4602 struct written_common *w;
4603 bool write_me = true;
4608 write_common_0 (st->left, this_module);
4610 /* We will write out the binding label, or the name if no label given. */
4611 name = st->n.common->name;
4613 label = p->is_bind_c ? p->binding_label : p->name;
4615 /* Check if we've already output this common. */
4616 w = written_commons;
4619 int c = strcmp (name, w->name);
4620 c = (c != 0 ? c : strcmp (label, w->label));
4624 w = (c < 0) ? w->left : w->right;
4627 if (this_module && p->use_assoc)
4632 /* Write the common to the module. */
4634 mio_pool_string (&name);
4636 mio_symbol_ref (&p->head);
4637 flags = p->saved ? 1 : 0;
4638 if (p->threadprivate)
4640 mio_integer (&flags);
4642 /* Write out whether the common block is bind(c) or not. */
4643 mio_integer (&(p->is_bind_c));
4645 mio_pool_string (&label);
4648 /* Record that we have written this common. */
4649 w = XCNEW (struct written_common);
4652 gfc_insert_bbt (&written_commons, w, compare_written_commons);
4655 write_common_0 (st->right, this_module);
4659 /* Write a common, by initializing the list of written commons, calling
4660 the recursive function write_common_0() and cleaning up afterwards. */
4663 write_common (gfc_symtree *st)
4665 written_commons = NULL;
4666 write_common_0 (st, true);
4667 write_common_0 (st, false);
4668 free_written_common (written_commons);
4669 written_commons = NULL;
4673 /* Write the blank common block to the module. */
4676 write_blank_common (void)
4678 const char * name = BLANK_COMMON_NAME;
4680 /* TODO: Blank commons are not bind(c). The F2003 standard probably says
4681 this, but it hasn't been checked. Just making it so for now. */
4684 if (gfc_current_ns->blank_common.head == NULL)
4689 mio_pool_string (&name);
4691 mio_symbol_ref (&gfc_current_ns->blank_common.head);
4692 saved = gfc_current_ns->blank_common.saved;
4693 mio_integer (&saved);
4695 /* Write out whether the common block is bind(c) or not. */
4696 mio_integer (&is_bind_c);
4698 /* Write out the binding label, which is BLANK_COMMON_NAME, though
4699 it doesn't matter because the label isn't used. */
4700 mio_pool_string (&name);
4706 /* Write equivalences to the module. */
4715 for (eq = gfc_current_ns->equiv; eq; eq = eq->next)
4719 for (e = eq; e; e = e->eq)
4721 if (e->module == NULL)
4722 e->module = gfc_get_string ("%s.eq.%d", module_name, num);
4723 mio_allocated_string (e->module);
4724 mio_expr (&e->expr);
4733 /* Write derived type extensions to the module. */
4736 write_dt_extensions (gfc_symtree *st)
4738 if (!gfc_check_access (st->n.sym->attr.access,
4739 st->n.sym->ns->default_access))
4743 mio_pool_string (&st->n.sym->name);
4744 if (st->n.sym->module != NULL)
4745 mio_pool_string (&st->n.sym->module);
4747 mio_internal_string (module_name);
4752 write_derived_extensions (gfc_symtree *st)
4754 if (!((st->n.sym->attr.flavor == FL_DERIVED)
4755 && (st->n.sym->f2k_derived != NULL)
4756 && (st->n.sym->f2k_derived->sym_root != NULL)))
4760 mio_symbol_ref (&(st->n.sym));
4761 gfc_traverse_symtree (st->n.sym->f2k_derived->sym_root,
4762 write_dt_extensions);
4767 /* Write a symbol to the module. */
4770 write_symbol (int n, gfc_symbol *sym)
4774 if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL)
4775 gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym->name);
4778 mio_pool_string (&sym->name);
4780 mio_pool_string (&sym->module);
4781 if (sym->attr.is_bind_c || sym->attr.is_iso_c)
4783 label = sym->binding_label;
4784 mio_pool_string (&label);
4787 mio_pool_string (&sym->name);
4789 mio_pointer_ref (&sym->ns);
4796 /* Recursive traversal function to write the initial set of symbols to
4797 the module. We check to see if the symbol should be written
4798 according to the access specification. */
4801 write_symbol0 (gfc_symtree *st)
4805 bool dont_write = false;
4810 write_symbol0 (st->left);
4813 if (sym->module == NULL)
4814 sym->module = gfc_get_string (module_name);
4816 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4817 && !sym->attr.subroutine && !sym->attr.function)
4820 if (!gfc_check_access (sym->attr.access, sym->ns->default_access))
4825 p = get_pointer (sym);
4826 if (p->type == P_UNKNOWN)
4829 if (p->u.wsym.state != WRITTEN)
4831 write_symbol (p->integer, sym);
4832 p->u.wsym.state = WRITTEN;
4836 write_symbol0 (st->right);
4840 /* Recursive traversal function to write the secondary set of symbols
4841 to the module file. These are symbols that were not public yet are
4842 needed by the public symbols or another dependent symbol. The act
4843 of writing a symbol can modify the pointer_info tree, so we cease
4844 traversal if we find a symbol to write. We return nonzero if a
4845 symbol was written and pass that information upwards. */
4848 write_symbol1 (pointer_info *p)
4855 result = write_symbol1 (p->left);
4857 if (!(p->type != P_SYMBOL || p->u.wsym.state != NEEDS_WRITE))
4859 p->u.wsym.state = WRITTEN;
4860 write_symbol (p->integer, p->u.wsym.sym);
4864 result |= write_symbol1 (p->right);
4869 /* Write operator interfaces associated with a symbol. */
4872 write_operator (gfc_user_op *uop)
4874 static char nullstring[] = "";
4875 const char *p = nullstring;
4878 || !gfc_check_access (uop->access, uop->ns->default_access))
4881 mio_symbol_interface (&uop->name, &p, &uop->op);
4885 /* Write generic interfaces from the namespace sym_root. */
4888 write_generic (gfc_symtree *st)
4895 write_generic (st->left);
4896 write_generic (st->right);
4899 if (!sym || check_unique_name (st->name))
4902 if (sym->generic == NULL
4903 || !gfc_check_access (sym->attr.access, sym->ns->default_access))
4906 if (sym->module == NULL)
4907 sym->module = gfc_get_string (module_name);
4909 mio_symbol_interface (&st->name, &sym->module, &sym->generic);
4914 write_symtree (gfc_symtree *st)
4921 /* A symbol in an interface body must not be visible in the
4923 if (sym->ns != gfc_current_ns
4924 && sym->ns->proc_name
4925 && sym->ns->proc_name->attr.if_source == IFSRC_IFBODY)
4928 if (!gfc_check_access (sym->attr.access, sym->ns->default_access)
4929 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
4930 && !sym->attr.subroutine && !sym->attr.function))
4933 if (check_unique_name (st->name))
4936 p = find_pointer (sym);
4938 gfc_internal_error ("write_symtree(): Symbol not written");
4940 mio_pool_string (&st->name);
4941 mio_integer (&st->ambiguous);
4942 mio_integer (&p->integer);
4951 /* Write the operator interfaces. */
4954 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
4956 if (i == INTRINSIC_USER)
4959 mio_interface (gfc_check_access (gfc_current_ns->operator_access[i],
4960 gfc_current_ns->default_access)
4961 ? &gfc_current_ns->op[i] : NULL);
4969 gfc_traverse_user_op (gfc_current_ns, write_operator);
4975 write_generic (gfc_current_ns->sym_root);
4981 write_blank_common ();
4982 write_common (gfc_current_ns->common_root);
4994 gfc_traverse_symtree (gfc_current_ns->sym_root,
4995 write_derived_extensions);
5000 /* Write symbol information. First we traverse all symbols in the
5001 primary namespace, writing those that need to be written.
5002 Sometimes writing one symbol will cause another to need to be
5003 written. A list of these symbols ends up on the write stack, and
5004 we end by popping the bottom of the stack and writing the symbol
5005 until the stack is empty. */
5009 write_symbol0 (gfc_current_ns->sym_root);
5010 while (write_symbol1 (pi_root))
5019 gfc_traverse_symtree (gfc_current_ns->sym_root, write_symtree);
5024 /* Read a MD5 sum from the header of a module file. If the file cannot
5025 be opened, or we have any other error, we return -1. */
5028 read_md5_from_module_file (const char * filename, unsigned char md5[16])
5034 /* Open the file. */
5035 if ((file = fopen (filename, "r")) == NULL)
5038 /* Read the first line. */
5039 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
5045 /* The file also needs to be overwritten if the version number changed. */
5046 n = strlen ("GFORTRAN module version '" MOD_VERSION "' created");
5047 if (strncmp (buf, "GFORTRAN module version '" MOD_VERSION "' created", n) != 0)
5053 /* Read a second line. */
5054 if (fgets (buf, sizeof (buf) - 1, file) == NULL)
5060 /* Close the file. */
5063 /* If the header is not what we expect, or is too short, bail out. */
5064 if (strncmp (buf, "MD5:", 4) != 0 || strlen (buf) < 4 + 16)
5067 /* Now, we have a real MD5, read it into the array. */
5068 for (n = 0; n < 16; n++)
5072 if (sscanf (&(buf[4+2*n]), "%02x", &x) != 1)
5082 /* Given module, dump it to disk. If there was an error while
5083 processing the module, dump_flag will be set to zero and we delete
5084 the module file, even if it was already there. */
5087 gfc_dump_module (const char *name, int dump_flag)
5090 char *filename, *filename_tmp, *p;
5093 unsigned char md5_new[16], md5_old[16];
5095 n = strlen (name) + strlen (MODULE_EXTENSION) + 1;
5096 if (gfc_option.module_dir != NULL)
5098 n += strlen (gfc_option.module_dir);
5099 filename = (char *) alloca (n);
5100 strcpy (filename, gfc_option.module_dir);
5101 strcat (filename, name);
5105 filename = (char *) alloca (n);
5106 strcpy (filename, name);
5108 strcat (filename, MODULE_EXTENSION);
5110 /* Name of the temporary file used to write the module. */
5111 filename_tmp = (char *) alloca (n + 1);
5112 strcpy (filename_tmp, filename);
5113 strcat (filename_tmp, "0");
5115 /* There was an error while processing the module. We delete the
5116 module file, even if it was already there. */
5123 /* Write the module to the temporary file. */
5124 module_fp = fopen (filename_tmp, "w");
5125 if (module_fp == NULL)
5126 gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s",
5127 filename_tmp, strerror (errno));
5129 /* Write the header, including space reserved for the MD5 sum. */
5133 *strchr (p, '\n') = '\0';
5135 fprintf (module_fp, "GFORTRAN module version '%s' created from %s on %s\n"
5136 "MD5:", MOD_VERSION, gfc_source_file, p);
5137 fgetpos (module_fp, &md5_pos);
5138 fputs ("00000000000000000000000000000000 -- "
5139 "If you edit this, you'll get what you deserve.\n\n", module_fp);
5141 /* Initialize the MD5 context that will be used for output. */
5142 md5_init_ctx (&ctx);
5144 /* Write the module itself. */
5146 strcpy (module_name, name);
5152 free_pi_tree (pi_root);
5157 /* Write the MD5 sum to the header of the module file. */
5158 md5_finish_ctx (&ctx, md5_new);
5159 fsetpos (module_fp, &md5_pos);
5160 for (n = 0; n < 16; n++)
5161 fprintf (module_fp, "%02x", md5_new[n]);
5163 if (fclose (module_fp))
5164 gfc_fatal_error ("Error writing module file '%s' for writing: %s",
5165 filename_tmp, strerror (errno));
5167 /* Read the MD5 from the header of the old module file and compare. */
5168 if (read_md5_from_module_file (filename, md5_old) != 0
5169 || memcmp (md5_old, md5_new, sizeof (md5_old)) != 0)
5171 /* Module file have changed, replace the old one. */
5172 if (unlink (filename) && errno != ENOENT)
5173 gfc_fatal_error ("Can't delete module file '%s': %s", filename,
5175 if (rename (filename_tmp, filename))
5176 gfc_fatal_error ("Can't rename module file '%s' to '%s': %s",
5177 filename_tmp, filename, strerror (errno));
5181 if (unlink (filename_tmp))
5182 gfc_fatal_error ("Can't delete temporary module file '%s': %s",
5183 filename_tmp, strerror (errno));
5189 sort_iso_c_rename_list (void)
5191 gfc_use_rename *tmp_list = NULL;
5192 gfc_use_rename *curr;
5193 gfc_use_rename *kinds_used[ISOCBINDING_NUMBER] = {NULL};
5197 for (curr = gfc_rename_list; curr; curr = curr->next)
5199 c_kind = get_c_kind (curr->use_name, c_interop_kinds_table);
5200 if (c_kind == ISOCBINDING_INVALID || c_kind == ISOCBINDING_LAST)
5202 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5203 "intrinsic module ISO_C_BINDING.", curr->use_name,
5207 /* Put it in the list. */
5208 kinds_used[c_kind] = curr;
5211 /* Make a new (sorted) rename list. */
5213 while (i < ISOCBINDING_NUMBER && kinds_used[i] == NULL)
5216 if (i < ISOCBINDING_NUMBER)
5218 tmp_list = kinds_used[i];
5222 for (; i < ISOCBINDING_NUMBER; i++)
5223 if (kinds_used[i] != NULL)
5225 curr->next = kinds_used[i];
5231 gfc_rename_list = tmp_list;
5235 /* Import the intrinsic ISO_C_BINDING module, generating symbols in
5236 the current namespace for all named constants, pointer types, and
5237 procedures in the module unless the only clause was used or a rename
5238 list was provided. */
5241 import_iso_c_binding_module (void)
5243 gfc_symbol *mod_sym = NULL;
5244 gfc_symtree *mod_symtree = NULL;
5245 const char *iso_c_module_name = "__iso_c_binding";
5250 /* Look only in the current namespace. */
5251 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, iso_c_module_name);
5253 if (mod_symtree == NULL)
5255 /* symtree doesn't already exist in current namespace. */
5256 gfc_get_sym_tree (iso_c_module_name, gfc_current_ns, &mod_symtree,
5259 if (mod_symtree != NULL)
5260 mod_sym = mod_symtree->n.sym;
5262 gfc_internal_error ("import_iso_c_binding_module(): Unable to "
5263 "create symbol for %s", iso_c_module_name);
5265 mod_sym->attr.flavor = FL_MODULE;
5266 mod_sym->attr.intrinsic = 1;
5267 mod_sym->module = gfc_get_string (iso_c_module_name);
5268 mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
5271 /* Generate the symbols for the named constants representing
5272 the kinds for intrinsic data types. */
5275 /* Sort the rename list because there are dependencies between types
5276 and procedures (e.g., c_loc needs c_ptr). */
5277 sort_iso_c_rename_list ();
5279 for (u = gfc_rename_list; u; u = u->next)
5281 i = get_c_kind (u->use_name, c_interop_kinds_table);
5283 if (i == ISOCBINDING_INVALID || i == ISOCBINDING_LAST)
5285 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5286 "intrinsic module ISO_C_BINDING.", u->use_name,
5291 generate_isocbinding_symbol (iso_c_module_name,
5292 (iso_c_binding_symbol) i,
5298 for (i = 0; i < ISOCBINDING_NUMBER; i++)
5301 for (u = gfc_rename_list; u; u = u->next)
5303 if (strcmp (c_interop_kinds_table[i].name, u->use_name) == 0)
5305 local_name = u->local_name;
5310 generate_isocbinding_symbol (iso_c_module_name,
5311 (iso_c_binding_symbol) i,
5315 for (u = gfc_rename_list; u; u = u->next)
5320 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5321 "module ISO_C_BINDING", u->use_name, &u->where);
5327 /* Add an integer named constant from a given module. */
5330 create_int_parameter (const char *name, int value, const char *modname,
5331 intmod_id module, int id)
5333 gfc_symtree *tmp_symtree;
5336 tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
5337 if (tmp_symtree != NULL)
5339 if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
5342 gfc_error ("Symbol '%s' already declared", name);
5345 gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree, false);
5346 sym = tmp_symtree->n.sym;
5348 sym->module = gfc_get_string (modname);
5349 sym->attr.flavor = FL_PARAMETER;
5350 sym->ts.type = BT_INTEGER;
5351 sym->ts.kind = gfc_default_integer_kind;
5352 sym->value = gfc_get_int_expr (gfc_default_integer_kind, NULL, value);
5353 sym->attr.use_assoc = 1;
5354 sym->from_intmod = module;
5355 sym->intmod_sym_id = id;
5359 /* USE the ISO_FORTRAN_ENV intrinsic module. */
5362 use_iso_fortran_env_module (void)
5364 static char mod[] = "iso_fortran_env";
5365 const char *local_name;
5367 gfc_symbol *mod_sym;
5368 gfc_symtree *mod_symtree;
5371 intmod_sym symbol[] = {
5372 #define NAMED_INTCST(a,b,c,d) { a, b, 0, d },
5373 #include "iso-fortran-env.def"
5375 { ISOFORTRANENV_INVALID, NULL, -1234, 0 } };
5378 #define NAMED_INTCST(a,b,c,d) symbol[i++].value = c;
5379 #include "iso-fortran-env.def"
5382 /* Generate the symbol for the module itself. */
5383 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod);
5384 if (mod_symtree == NULL)
5386 gfc_get_sym_tree (mod, gfc_current_ns, &mod_symtree, false);
5387 gcc_assert (mod_symtree);
5388 mod_sym = mod_symtree->n.sym;
5390 mod_sym->attr.flavor = FL_MODULE;
5391 mod_sym->attr.intrinsic = 1;
5392 mod_sym->module = gfc_get_string (mod);
5393 mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
5396 if (!mod_symtree->n.sym->attr.intrinsic)
5397 gfc_error ("Use of intrinsic module '%s' at %C conflicts with "
5398 "non-intrinsic module name used previously", mod);
5400 /* Generate the symbols for the module integer named constants. */
5402 for (u = gfc_rename_list; u; u = u->next)
5404 for (i = 0; symbol[i].name; i++)
5405 if (strcmp (symbol[i].name, u->use_name) == 0)
5408 if (symbol[i].name == NULL)
5410 gfc_error ("Symbol '%s' referenced at %L does not exist in "
5411 "intrinsic module ISO_FORTRAN_ENV", u->use_name,
5416 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5417 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5418 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5419 "from intrinsic module ISO_FORTRAN_ENV at %L is "
5420 "incompatible with option %s", &u->where,
5421 gfc_option.flag_default_integer
5422 ? "-fdefault-integer-8" : "-fdefault-real-8");
5424 if (gfc_notify_std (symbol[i].standard, "The symbol '%s', referrenced "
5425 "at %C, is not in the selected standard",
5426 symbol[i].name) == FAILURE)
5429 create_int_parameter (u->local_name[0] ? u->local_name
5431 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5436 for (i = 0; symbol[i].name; i++)
5440 if ((gfc_option.allow_std & symbol[i].standard) == 0)
5443 for (u = gfc_rename_list; u; u = u->next)
5445 if (strcmp (symbol[i].name, u->use_name) == 0)
5447 local_name = u->local_name;
5453 if (u && gfc_notify_std (symbol[i].standard, "The symbol '%s', "
5454 "referrenced at %C, is not in the selected "
5455 "standard", symbol[i].name) == FAILURE)
5457 else if ((gfc_option.allow_std & symbol[i].standard) == 0)
5460 if ((gfc_option.flag_default_integer || gfc_option.flag_default_real)
5461 && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
5462 gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant "
5463 "from intrinsic module ISO_FORTRAN_ENV at %C is "
5464 "incompatible with option %s",
5465 gfc_option.flag_default_integer
5466 ? "-fdefault-integer-8" : "-fdefault-real-8");
5468 create_int_parameter (local_name ? local_name : symbol[i].name,
5469 symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV,
5473 for (u = gfc_rename_list; u; u = u->next)
5478 gfc_error ("Symbol '%s' referenced at %L not found in intrinsic "
5479 "module ISO_FORTRAN_ENV", u->use_name, &u->where);
5485 /* Process a USE directive. */
5488 gfc_use_module (void)
5493 gfc_symtree *mod_symtree;
5494 gfc_use_list *use_stmt;
5496 filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION)
5498 strcpy (filename, module_name);
5499 strcat (filename, MODULE_EXTENSION);
5501 /* First, try to find an non-intrinsic module, unless the USE statement
5502 specified that the module is intrinsic. */
5505 module_fp = gfc_open_included_file (filename, true, true);
5507 /* Then, see if it's an intrinsic one, unless the USE statement
5508 specified that the module is non-intrinsic. */
5509 if (module_fp == NULL && !specified_nonint)
5511 if (strcmp (module_name, "iso_fortran_env") == 0
5512 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ISO_FORTRAN_ENV "
5513 "intrinsic module at %C") != FAILURE)
5515 use_iso_fortran_env_module ();
5519 if (strcmp (module_name, "iso_c_binding") == 0
5520 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: "
5521 "ISO_C_BINDING module at %C") != FAILURE)
5523 import_iso_c_binding_module();
5527 module_fp = gfc_open_intrinsic_module (filename);
5529 if (module_fp == NULL && specified_int)
5530 gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C",
5534 if (module_fp == NULL)
5535 gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
5536 filename, strerror (errno));
5538 /* Check that we haven't already USEd an intrinsic module with the
5541 mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, module_name);
5542 if (mod_symtree && mod_symtree->n.sym->attr.intrinsic)
5543 gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with "
5544 "intrinsic module name used previously", module_name);
5551 /* Skip the first two lines of the module, after checking that this is
5552 a gfortran module file. */
5558 bad_module ("Unexpected end of module");
5561 if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0)
5562 || (start == 2 && strcmp (atom_name, " module") != 0))
5563 gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module "
5567 if (strcmp (atom_name, " version") != 0
5568 || module_char () != ' '
5569 || parse_atom () != ATOM_STRING)
5570 gfc_fatal_error ("Parse error when checking module version"
5571 " for file '%s' opened at %C", filename);
5573 if (strcmp (atom_string, MOD_VERSION))
5575 gfc_fatal_error ("Wrong module version '%s' (expected '%s') "
5576 "for file '%s' opened at %C", atom_string,
5577 MOD_VERSION, filename);
5585 /* Make sure we're not reading the same module that we may be building. */
5586 for (p = gfc_state_stack; p; p = p->previous)
5587 if (p->state == COMP_MODULE && strcmp (p->sym->name, module_name) == 0)
5588 gfc_fatal_error ("Can't USE the same module we're building!");
5591 init_true_name_tree ();
5595 free_true_name (true_name_root);
5596 true_name_root = NULL;
5598 free_pi_tree (pi_root);
5603 use_stmt = gfc_get_use_list ();
5604 use_stmt->module_name = gfc_get_string (module_name);
5605 use_stmt->only_flag = only_flag;
5606 use_stmt->rename = gfc_rename_list;
5607 use_stmt->where = use_locus;
5608 gfc_rename_list = NULL;
5609 use_stmt->next = gfc_current_ns->use_stmts;
5610 gfc_current_ns->use_stmts = use_stmt;
5615 gfc_free_use_stmts (gfc_use_list *use_stmts)
5618 for (; use_stmts; use_stmts = next)
5620 gfc_use_rename *next_rename;
5622 for (; use_stmts->rename; use_stmts->rename = next_rename)
5624 next_rename = use_stmts->rename->next;
5625 gfc_free (use_stmts->rename);
5627 next = use_stmts->next;
5628 gfc_free (use_stmts);
5634 gfc_module_init_2 (void)
5636 last_atom = ATOM_LPAREN;
5641 gfc_module_done_2 (void)