diff options
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 4cbaaa0..b67b878 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -162,20 +162,6 @@ pointer_info; #define gfc_get_pointer_info() XCNEW (pointer_info) -/* Lists of rename info for the USE statement. */ - -typedef struct gfc_use_rename -{ - char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1]; - struct gfc_use_rename *next; - int found; - gfc_intrinsic_op op; - locus where; -} -gfc_use_rename; - -#define gfc_get_use_rename() XCNEW (gfc_use_rename); - /* Local variables */ /* The FILE for the module we're reading or writing. */ @@ -5058,6 +5044,7 @@ gfc_use_module (void) gfc_state_data *p; int c, line, start; gfc_symtree *mod_symtree; + gfc_use_list *use_stmt; filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION) + 1); @@ -5150,6 +5137,33 @@ gfc_use_module (void) pi_root = NULL; fclose (module_fp); + + use_stmt = gfc_get_use_list (); + use_stmt->module_name = gfc_get_string (module_name); + use_stmt->only_flag = only_flag; + use_stmt->rename = gfc_rename_list; + gfc_rename_list = NULL; + use_stmt->next = gfc_current_ns->use_stmts; + gfc_current_ns->use_stmts = use_stmt; +} + + +void +gfc_free_use_stmts (gfc_use_list *use_stmts) +{ + gfc_use_list *next; + for (; use_stmts; use_stmts = next) + { + gfc_use_rename *next_rename; + + for (; use_stmts->rename; use_stmts->rename = next_rename) + { + next_rename = use_stmts->rename->next; + gfc_free (use_stmts->rename); + } + next = use_stmts->next; + gfc_free (use_stmts); + } } |