+2012-01-29 Janne Blomqvist <jb@gcc.gnu.org>
+
+ * module.c (pointer_info): Make true_name and module pointers
+ rather than arrays, order pointers before other fields.
+ (free_pi_tree): free true_name and module as well.
+ (mio_read_string): Rename to read_string.
+ (mio_write_string): Remove.
+ (load_commons): Use read_string.
+ (read_module): Use read_string rather than mio_internal_string.
+ (write_blank_common): Call write_atom directly.
+ (write_symbol): Likewise.
+
2012-01-29 Tobias Burnus <burnus@net-b.de>
PR fortran/51972
struct
{
gfc_symbol *sym;
- char true_name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1];
+ char *true_name, *module, *binding_label;
+ fixup_t *stfixup;
+ gfc_symtree *symtree;
enum gfc_rsym_state state;
int ns, referenced, renamed;
module_locus where;
- fixup_t *stfixup;
- gfc_symtree *symtree;
- char* binding_label;
}
rsym;
free_pi_tree (p->right);
if (iomode == IO_INPUT)
- XDELETEVEC (p->u.rsym.binding_label);
+ {
+ XDELETEVEC (p->u.rsym.true_name);
+ XDELETEVEC (p->u.rsym.module);
+ XDELETEVEC (p->u.rsym.binding_label);
+ }
free (p);
}
}
+/* Read a string. The caller is responsible for freeing. */
+
+static char*
+read_string (void)
+{
+ char* p;
+ require_atom (ATOM_STRING);
+ p = atom_string;
+ atom_string = NULL;
+ return p;
+}
+
+
/**************** Module output subroutines ***************************/
/* Output a character to a module file. */
}
-/* Read a string. The caller is responsible for freeing. */
-
-static char*
-mio_read_string (void)
-{
- char* p;
- require_atom (ATOM_STRING);
- p = atom_string;
- atom_string = NULL;
- return p;
-}
-
-
-/* Write a string. */
-static void
-mio_write_string (const char* string)
-{
- write_atom (ATOM_STRING, string);
-}
-
-
typedef enum
{ AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
/* Get whether this was a bind(c) common or not. */
mio_integer (&p->is_bind_c);
/* Get the binding label. */
- label = mio_read_string ();
+ label = read_string ();
if (strlen (label))
p->binding_label = IDENTIFIER_POINTER (get_identifier (label));
XDELETEVEC (label);
info->type = P_SYMBOL;
info->u.rsym.state = UNUSED;
- mio_internal_string (info->u.rsym.true_name);
- mio_internal_string (info->u.rsym.module);
- bind_label = mio_read_string ();
+ info->u.rsym.true_name = read_string ();
+ info->u.rsym.module = read_string ();
+ bind_label = read_string ();
if (strlen (bind_label))
info->u.rsym.binding_label = bind_label;
else
mio_integer (&is_bind_c);
/* Write out an empty binding label. */
- mio_write_string ("");
+ write_atom (ATOM_STRING, "");
mio_rparen ();
}
mio_pool_string (&label);
}
else
- mio_write_string ("");
+ write_atom (ATOM_STRING, "");
mio_pointer_ref (&sym->ns);