diff options
author | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-29 20:29:50 +0000 |
---|---|---|
committer | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-29 20:29:50 +0000 |
commit | 48409c9b3f08ea3be81abb6895852e7927d3add9 (patch) | |
tree | bae8d94d5edd3bb74f1f25459b78f00d2775be5d /gcc/fortran/module.c | |
parent | 067d530065b2d8f61c70e7d7cedb713350c725c2 (diff) | |
download | gcc-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.c | 59 |
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); |