summaryrefslogtreecommitdiff
path: root/gcc/fortran/module.c
diff options
context:
space:
mode:
authorjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>2012-01-29 20:29:50 +0000
committerjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>2012-01-29 20:29:50 +0000
commit48409c9b3f08ea3be81abb6895852e7927d3add9 (patch)
treebae8d94d5edd3bb74f1f25459b78f00d2775be5d /gcc/fortran/module.c
parent067d530065b2d8f61c70e7d7cedb713350c725c2 (diff)
downloadgcc-48409c9b3f08ea3be81abb6895852e7927d3add9.tar.gz
Reduce size of pointer_info tree, minor cleanups.
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183681 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r--gcc/fortran/module.c59
1 files changed, 27 insertions, 32 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 4e6c520bc97..c68277b2536 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -155,13 +155,12 @@ typedef struct pointer_info
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;
@@ -229,7 +228,11 @@ free_pi_tree (pointer_info *p)
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);
}
@@ -1442,6 +1445,19 @@ find_enum (const mstring *m)
}
+/* 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. */
@@ -1816,27 +1832,6 @@ mio_internal_string (char *string)
}
-/* 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,
@@ -4168,7 +4163,7 @@ load_commons (void)
/* 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);
@@ -4531,9 +4526,9 @@ read_module (void)
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
@@ -4960,7 +4955,7 @@ write_blank_common (void)
mio_integer (&is_bind_c);
/* Write out an empty binding label. */
- mio_write_string ("");
+ write_atom (ATOM_STRING, "");
mio_rparen ();
}
@@ -5064,7 +5059,7 @@ write_symbol (int n, gfc_symbol *sym)
mio_pool_string (&label);
}
else
- mio_write_string ("");
+ write_atom (ATOM_STRING, "");
mio_pointer_ref (&sym->ns);