diff options
author | Daniel Kraft <d@domob.eu> | 2009-04-24 17:20:23 +0200 |
---|---|---|
committer | Daniel Kraft <domob@gcc.gnu.org> | 2009-04-24 17:20:23 +0200 |
commit | e34ccb4cd1f39f31ff1bd7374ece738ec7521d74 (patch) | |
tree | 6857c66e3f14011e7afd4f510d84a7d7ded9cc88 /gcc/fortran/module.c | |
parent | b178461a93752916e0ff817e7db879aa638ab956 (diff) | |
download | gcc-e34ccb4cd1f39f31ff1bd7374ece738ec7521d74.zip gcc-e34ccb4cd1f39f31ff1bd7374ece738ec7521d74.tar.gz gcc-e34ccb4cd1f39f31ff1bd7374ece738ec7521d74.tar.bz2 |
gfortran.h (gfc_get_typebound_proc): Removed as macro, now a function.
2009-04-24 Daniel Kraft <d@domob.eu>
* gfortran.h (gfc_get_typebound_proc): Removed as macro, now a function.
(struct gfc_symtree): Moved `typebound' member inside union.
(struct gfc_namespace): Add `tb_sym_root' as new symtree to sort out
type-bound procedures there.
(gfc_get_tbp_symtree): New procedure.
* symbol.c (tentative_tbp_list): New global.
(gfc_get_namespace): NULL new `tb_sym_root' member.
(gfc_new_symtree): Removed initialization of `typebound' member.
(gfc_undo_symbols): Process list of tentative tbp's.
(gfc_commit_symbols): Ditto.
(free_tb_tree): New method.
(gfc_free_namespace): Call it.
(gfc_get_typebound_proc): New method.
(gfc_get_tbp_symtree): New method.
(gfc_find_typebound_proc): Adapt to structural changes of gfc_symtree
and gfc_namespace with regards to tbp's.
* dump-parse-tree.c (show_typebound): Ditto.
* primary.c (gfc_match_varspec): Ditto. Don't reference tbp-symbol
as it isn't a symbol any longer.
* module.c (mio_typebound_symtree): Adapt to changes.
(mio_typebound_proc): Ditto, create symtrees using `gfc_get_tbp_symtree'
rather than `gfc_get_sym_tree'.
(mio_f2k_derived): Ditto.
* decl.c (match_procedure_in_type): Ditto.
(gfc_match_generic): Ditto. Don't reference tbp-symbol.
* resolve.c (check_typebound_override): Adapt to changes.
(resolve_typebound_generic): Ditto.
(resolve_typebound_procedures): Ditto.
(ensure_not_abstract_walker): Ditto.
(ensure_not_abstract): Ditto.
(resolve_typebound_procedure): Ditto, ignore erraneous symbols (for
instance, through removed tentative ones).
* gfc-internals.texi (Type-bound procedures): Document changes.
2009-04-24 Daniel Kraft <d@domob.eu>
* gfortran.dg/typebound_generic_1.f03: Change so that no error is
expected on already erraneous symbol (renamed to fresh one).
From-SVN: r146733
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 9c55c2f..12ac966 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3251,12 +3251,14 @@ mio_typebound_proc (gfc_typebound_proc** proc) (*proc)->u.generic = NULL; while (peek_atom () != ATOM_RPAREN) { + gfc_symtree** sym_root; + g = gfc_get_tbp_generic (); g->specific = NULL; require_atom (ATOM_STRING); - gfc_get_sym_tree (atom_string, current_f2k_derived, - &g->specific_st); + sym_root = ¤t_f2k_derived->tb_sym_root; + g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string); gfc_free (atom_string); g->next = (*proc)->u.generic; @@ -3275,7 +3277,7 @@ mio_typebound_proc (gfc_typebound_proc** proc) static void mio_typebound_symtree (gfc_symtree* st) { - if (iomode == IO_OUTPUT && !st->typebound) + if (iomode == IO_OUTPUT && !st->n.tb) return; if (iomode == IO_OUTPUT) @@ -3285,7 +3287,7 @@ mio_typebound_symtree (gfc_symtree* st) } /* For IO_INPUT, the above is done in mio_f2k_derived. */ - mio_typebound_proc (&st->typebound); + mio_typebound_proc (&st->n.tb); mio_rparen (); } @@ -3338,7 +3340,7 @@ mio_f2k_derived (gfc_namespace *f2k) /* Handle type-bound procedures. */ mio_lparen (); if (iomode == IO_OUTPUT) - gfc_traverse_symtree (f2k->sym_root, &mio_typebound_symtree); + gfc_traverse_symtree (f2k->tb_sym_root, &mio_typebound_symtree); else { while (peek_atom () == ATOM_LPAREN) @@ -3348,7 +3350,7 @@ mio_f2k_derived (gfc_namespace *f2k) mio_lparen (); require_atom (ATOM_STRING); - gfc_get_sym_tree (atom_string, f2k, &st); + st = gfc_get_tbp_symtree (&f2k->tb_sym_root, atom_string); gfc_free (atom_string); mio_typebound_symtree (st); |