2 Copyright (C) 2003 Free Software Foundation, Inc.
3 Contributed by Steven Bosscher
5 This file is part of GNU G95.
7 GNU G95 is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU G95 is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU G95; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 /* Actually this is just a collection of routines that used to be
24 scattered around the sources. Now that they are all in a single
25 file, almost all of them can be static, and the other files don't
26 have this mess in them.
28 As a nice side-effect, this file can act as documentation of the
29 gfc_code and gfc_expr structures and all their friends and
37 /* Keep track of indentation for symbol tree dumps. */
38 static int show_level = 0;
41 /* Forward declaration because this one needs all, and all need
43 static void gfc_show_expr (gfc_expr *);
45 /* Do indentation for a specific level. */
48 code_indent (int level, gfc_st_label * label)
53 gfc_status ("%-5d ", label->value);
57 for (i = 0; i < 2 * level; i++)
58 gfc_status_char (' ');
62 /* Simple indentation at the current level. This one
63 is used to show symbols. */
68 code_indent (show_level, NULL);
72 /* Show type-specific information. */
74 gfc_show_typespec (gfc_typespec * ts)
77 gfc_status ("(%s ", gfc_basic_typename (ts->type));
82 gfc_status ("%s", ts->derived->name);
86 gfc_show_expr (ts->cl->length);
90 gfc_status ("%d", ts->kind);
98 /* Show an actual argument list. */
101 gfc_show_actual_arglist (gfc_actual_arglist * a)
106 for (; a; a = a->next)
108 gfc_status_char ('(');
109 if (a->name[0] != '\0')
110 gfc_status ("%s = ", a->name);
112 gfc_show_expr (a->expr);
114 gfc_status ("(arg not-present)");
116 gfc_status_char (')');
125 /* Show an gfc_array_spec array specification structure. */
128 gfc_show_array_spec (gfc_array_spec * as)
139 gfc_status ("(%d", as->rank);
145 case AS_EXPLICIT: c = "AS_EXPLICIT"; break;
146 case AS_DEFERRED: c = "AS_DEFERRED"; break;
147 case AS_ASSUMED_SIZE: c = "AS_ASSUMED_SIZE"; break;
148 case AS_ASSUMED_SHAPE: c = "AS_ASSUMED_SHAPE"; break;
151 ("gfc_show_array_spec(): Unhandled array shape type.");
153 gfc_status (" %s ", c);
155 for (i = 0; i < as->rank; i++)
157 gfc_show_expr (as->lower[i]);
158 gfc_status_char (' ');
159 gfc_show_expr (as->upper[i]);
160 gfc_status_char (' ');
168 /* Show an gfc_array_ref array reference structure. */
171 gfc_show_array_ref (gfc_array_ref * ar)
175 gfc_status_char ('(');
184 for (i = 0; i < ar->dimen; i++)
186 if (ar->start[i] != NULL)
187 gfc_show_expr (ar->start[i]);
189 gfc_status_char (':');
191 if (ar->end[i] != NULL)
192 gfc_show_expr (ar->end[i]);
194 if (ar->stride[i] != NULL)
196 gfc_status_char (':');
197 gfc_show_expr (ar->stride[i]);
200 if (i != ar->dimen - 1)
206 for (i = 0; i < ar->dimen; i++)
208 gfc_show_expr (ar->start[i]);
209 if (i != ar->dimen - 1)
215 gfc_status ("UNKNOWN");
219 gfc_internal_error ("gfc_show_array_ref(): Unknown array reference");
222 gfc_status_char (')');
226 /* Show a list of gfc_ref structures. */
229 gfc_show_ref (gfc_ref * p)
232 for (; p; p = p->next)
236 gfc_show_array_ref (&p->u.ar);
240 gfc_status (" %% %s", p->u.c.component->name);
244 gfc_status_char ('(');
245 gfc_show_expr (p->u.ss.start);
246 gfc_status_char (':');
247 gfc_show_expr (p->u.ss.end);
248 gfc_status_char (')');
252 gfc_internal_error ("gfc_show_ref(): Bad component code");
257 /* Display a constructor. Works recursively for array constructors. */
260 gfc_show_constructor (gfc_constructor * c)
263 for (; c; c = c->next)
265 if (c->iterator == NULL)
266 gfc_show_expr (c->expr);
269 gfc_status_char ('(');
270 gfc_show_expr (c->expr);
272 gfc_status_char (' ');
273 gfc_show_expr (c->iterator->var);
274 gfc_status_char ('=');
275 gfc_show_expr (c->iterator->start);
276 gfc_status_char (',');
277 gfc_show_expr (c->iterator->end);
278 gfc_status_char (',');
279 gfc_show_expr (c->iterator->step);
281 gfc_status_char (')');
290 /* Show an expression. */
293 gfc_show_expr (gfc_expr * p)
304 switch (p->expr_type)
307 c = p->value.character.string;
309 for (i = 0; i < p->value.character.length; i++, c++)
314 gfc_status ("%c", *c);
317 gfc_show_ref (p->ref);
321 gfc_status ("%s(", p->ts.derived->name);
322 gfc_show_constructor (p->value.constructor);
323 gfc_status_char (')');
328 gfc_show_constructor (p->value.constructor);
331 gfc_show_ref (p->ref);
335 gfc_status ("NULL()");
342 mpz_out_str (stdout, 10, p->value.integer);
344 if (p->ts.kind != gfc_default_integer_kind ())
345 gfc_status ("_%d", p->ts.kind);
349 if (p->value.logical)
350 gfc_status (".true.");
352 gfc_status (".false.");
356 mpf_out_str (stdout, 10, 0, p->value.real);
357 if (p->ts.kind != gfc_default_real_kind ())
358 gfc_status ("_%d", p->ts.kind);
362 c = p->value.character.string;
364 gfc_status_char ('\'');
366 for (i = 0; i < p->value.character.length; i++, c++)
371 gfc_status_char (*c);
374 gfc_status_char ('\'');
379 gfc_status ("(complex ");
381 mpf_out_str (stdout, 10, 0, p->value.complex.r);
382 if (p->ts.kind != gfc_default_complex_kind ())
383 gfc_status ("_%d", p->ts.kind);
387 mpf_out_str (stdout, 10, 0, p->value.complex.i);
388 if (p->ts.kind != gfc_default_complex_kind ())
389 gfc_status ("_%d", p->ts.kind);
402 gfc_status ("%s", p->symtree->n.sym->name);
403 gfc_show_ref (p->ref);
410 case INTRINSIC_UPLUS:
413 case INTRINSIC_UMINUS:
419 case INTRINSIC_MINUS:
422 case INTRINSIC_TIMES:
425 case INTRINSIC_DIVIDE:
428 case INTRINSIC_POWER:
431 case INTRINSIC_CONCAT:
444 gfc_status ("NEQV ");
470 ("gfc_show_expr(): Bad intrinsic in expression!");
473 gfc_show_expr (p->op1);
478 gfc_show_expr (p->op2);
485 if (p->value.function.name == NULL)
487 gfc_status ("%s[", p->symtree->n.sym->name);
488 gfc_show_actual_arglist (p->value.function.actual);
489 gfc_status_char (']');
493 gfc_status ("%s[[", p->value.function.name);
494 gfc_show_actual_arglist (p->value.function.actual);
495 gfc_status_char (']');
496 gfc_status_char (']');
502 gfc_internal_error ("gfc_show_expr(): Don't know how to show expr");
507 /* Show symbol attributes. The flavor and intent are followed by
508 whatever single bit attributes are present. */
511 gfc_show_attr (symbol_attribute * attr)
514 gfc_status ("(%s %s %s %s", gfc_code2string (flavors, attr->flavor),
515 gfc_intent_string (attr->intent),
516 gfc_code2string (access_types, attr->access),
517 gfc_code2string (procedures, attr->proc));
519 if (attr->allocatable)
520 gfc_status (" ALLOCATABLE");
522 gfc_status (" DIMENSION");
524 gfc_status (" EXTERNAL");
526 gfc_status (" INTRINSIC");
528 gfc_status (" OPTIONAL");
530 gfc_status (" POINTER");
532 gfc_status (" SAVE");
534 gfc_status (" TARGET");
536 gfc_status (" DUMMY");
538 gfc_status (" COMMON");
540 gfc_status (" RESULT");
542 gfc_status (" ENTRY");
545 gfc_status (" DATA");
547 gfc_status (" USE-ASSOC");
548 if (attr->in_namelist)
549 gfc_status (" IN-NAMELIST");
551 gfc_status (" IN-COMMON");
552 if (attr->saved_common)
553 gfc_status (" SAVED-COMMON");
556 gfc_status (" FUNCTION");
557 if (attr->subroutine)
558 gfc_status (" SUBROUTINE");
559 if (attr->implicit_type)
560 gfc_status (" IMPLICIT-TYPE");
563 gfc_status (" SEQUENCE");
565 gfc_status (" ELEMENTAL");
567 gfc_status (" PURE");
569 gfc_status (" RECURSIVE");
575 /* Show components of a derived type. */
578 gfc_show_components (gfc_symbol * sym)
582 for (c = sym->components; c; c = c->next)
584 gfc_status ("(%s ", c->name);
585 gfc_show_typespec (&c->ts);
587 gfc_status (" POINTER");
589 gfc_status (" DIMENSION");
590 gfc_status_char (' ');
591 gfc_show_array_spec (c->as);
594 gfc_status_char (' ');
599 /* Show a symbol. If a symbol is an ENTRY, SUBROUTINE or FUNCTION, we
600 show the interface. Information needed to reconstruct the list of
601 specific interfaces associated with a generic symbol is done within
605 gfc_show_symbol (gfc_symbol * sym)
607 gfc_formal_arglist *formal;
616 gfc_status ("symbol %s ", sym->name);
617 gfc_show_typespec (&sym->ts);
618 gfc_show_attr (&sym->attr);
623 gfc_status ("value: ");
624 gfc_show_expr (sym->value);
630 gfc_status ("Array spec:");
631 gfc_show_array_spec (sym->as);
637 gfc_status ("Generic interfaces:");
638 for (intr = sym->generic; intr; intr = intr->next)
639 gfc_status (" %s", intr->sym->name);
642 if (sym->common_head)
645 gfc_status ("Common members:");
646 for (s = sym->common_head; s; s = s->common_next)
647 gfc_status (" %s", s->name);
653 gfc_status ("result: %s", sym->result->name);
659 gfc_status ("components: ");
660 gfc_show_components (sym);
666 gfc_status ("Formal arglist:");
668 for (formal = sym->formal; formal; formal = formal->next)
669 gfc_status (" %s", formal->sym->name);
675 gfc_status ("Formal namespace");
676 gfc_show_namespace (sym->formal_ns);
679 gfc_status_char ('\n');
683 /* Show a user-defined operator. Just prints an operator
684 and the name of the associated subroutine, really. */
686 show_uop (gfc_user_op * uop)
691 gfc_status ("%s:", uop->name);
693 for (intr = uop->operator; intr; intr = intr->next)
694 gfc_status (" %s", intr->sym->name);
698 /* Workhorse function for traversing the user operator symtree. */
701 traverse_uop (gfc_symtree * st, void (*func) (gfc_user_op *))
709 traverse_uop (st->left, func);
710 traverse_uop (st->right, func);
714 /* Traverse the tree of user operator nodes. */
717 gfc_traverse_user_op (gfc_namespace * ns, void (*func) (gfc_user_op *))
720 traverse_uop (ns->uop_root, func);
724 /* Worker function to display the symbol tree. */
727 show_symtree (gfc_symtree * st)
731 gfc_status ("symtree: %s Ambig %d", st->name, st->ambiguous);
733 if (st->n.sym->ns != gfc_current_ns)
734 gfc_status (" from namespace %s", st->n.sym->ns->proc_name->name);
736 gfc_show_symbol (st->n.sym);
740 /******************* Show gfc_code structures **************/
744 static void gfc_show_code_node (int level, gfc_code * c);
746 /* Show a list of code structures. Mutually recursive with
747 gfc_show_code_node(). */
750 gfc_show_code (int level, gfc_code * c)
753 for (; c; c = c->next)
754 gfc_show_code_node (level, c);
758 /* Show a single code node and everything underneath it if necessary. */
761 gfc_show_code_node (int level, gfc_code * c)
763 gfc_forall_iterator *fa;
773 code_indent (level, c->here);
782 gfc_status ("CONTINUE");
786 gfc_status ("ASSIGN ");
787 gfc_show_expr (c->expr);
788 gfc_status_char (' ');
789 gfc_show_expr (c->expr2);
791 case EXEC_LABEL_ASSIGN:
792 gfc_status ("LABEL ASSIGN ");
793 gfc_show_expr (c->expr);
794 gfc_status (" %d", c->label->value);
797 case EXEC_POINTER_ASSIGN:
798 gfc_status ("POINTER ASSIGN ");
799 gfc_show_expr (c->expr);
800 gfc_status_char (' ');
801 gfc_show_expr (c->expr2);
805 gfc_status ("GOTO ");
807 gfc_status ("%d", c->label->value);
810 gfc_show_expr (c->expr);
815 for (; d; d = d ->block)
817 code_indent (level, d->label);
818 if (d->block != NULL)
819 gfc_status_char (',');
821 gfc_status_char (')');
828 gfc_status ("CALL %s ", c->resolved_sym->name);
829 gfc_show_actual_arglist (c->ext.actual);
833 gfc_status ("RETURN ");
835 gfc_show_expr (c->expr);
839 gfc_status ("PAUSE ");
842 gfc_show_expr (c->expr);
844 gfc_status ("%d", c->ext.stop_code);
849 gfc_status ("STOP ");
852 gfc_show_expr (c->expr);
854 gfc_status ("%d", c->ext.stop_code);
858 case EXEC_ARITHMETIC_IF:
860 gfc_show_expr (c->expr);
861 gfc_status (" %d, %d, %d",
862 c->label->value, c->label2->value, c->label3->value);
868 gfc_show_expr (d->expr);
869 gfc_status_char ('\n');
870 gfc_show_code (level + 1, d->next);
873 for (; d; d = d->block)
875 code_indent (level, 0);
878 gfc_status ("ELSE\n");
881 gfc_status ("ELSE IF ");
882 gfc_show_expr (d->expr);
883 gfc_status_char ('\n');
886 gfc_show_code (level + 1, d->next);
889 code_indent (level, c->label);
891 gfc_status ("ENDIF");
896 gfc_status ("SELECT CASE ");
897 gfc_show_expr (c->expr);
898 gfc_status_char ('\n');
900 for (; d; d = d->block)
902 code_indent (level, 0);
904 gfc_status ("CASE ");
905 for (cp = d->ext.case_list; cp; cp = cp->next)
907 gfc_status_char ('(');
908 gfc_show_expr (cp->low);
909 gfc_status_char (' ');
910 gfc_show_expr (cp->high);
911 gfc_status_char (')');
912 gfc_status_char (' ');
914 gfc_status_char ('\n');
916 gfc_show_code (level + 1, d->next);
919 code_indent (level, c->label);
920 gfc_status ("END SELECT");
924 gfc_status ("WHERE ");
927 gfc_show_expr (d->expr);
928 gfc_status_char ('\n');
930 gfc_show_code (level + 1, d->next);
932 for (d = d->block; d; d = d->block)
934 code_indent (level, 0);
935 gfc_status ("ELSE WHERE ");
936 gfc_show_expr (d->expr);
937 gfc_status_char ('\n');
938 gfc_show_code (level + 1, d->next);
941 code_indent (level, 0);
942 gfc_status ("END WHERE");
947 gfc_status ("FORALL ");
948 for (fa = c->ext.forall_iterator; fa; fa = fa->next)
950 gfc_show_expr (fa->var);
951 gfc_status_char (' ');
952 gfc_show_expr (fa->start);
953 gfc_status_char (':');
954 gfc_show_expr (fa->end);
955 gfc_status_char (':');
956 gfc_show_expr (fa->stride);
958 if (fa->next != NULL)
959 gfc_status_char (',');
964 gfc_status_char (',');
965 gfc_show_expr (c->expr);
967 gfc_status_char ('\n');
969 gfc_show_code (level + 1, c->block->next);
971 code_indent (level, 0);
972 gfc_status ("END FORALL");
978 gfc_show_expr (c->ext.iterator->var);
979 gfc_status_char ('=');
980 gfc_show_expr (c->ext.iterator->start);
981 gfc_status_char (' ');
982 gfc_show_expr (c->ext.iterator->end);
983 gfc_status_char (' ');
984 gfc_show_expr (c->ext.iterator->step);
985 gfc_status_char ('\n');
987 gfc_show_code (level + 1, c->block->next);
989 code_indent (level, 0);
990 gfc_status ("END DO");
994 gfc_status ("DO WHILE ");
995 gfc_show_expr (c->expr);
996 gfc_status_char ('\n');
998 gfc_show_code (level + 1, c->block->next);
1000 code_indent (level, c->label);
1001 gfc_status ("END DO");
1005 gfc_status ("CYCLE");
1007 gfc_status (" %s", c->symtree->n.sym->name);
1011 gfc_status ("EXIT");
1013 gfc_status (" %s", c->symtree->n.sym->name);
1017 gfc_status ("ALLOCATE ");
1020 gfc_status (" STAT=");
1021 gfc_show_expr (c->expr);
1024 for (a = c->ext.alloc_list; a; a = a->next)
1026 gfc_status_char (' ');
1027 gfc_show_expr (a->expr);
1032 case EXEC_DEALLOCATE:
1033 gfc_status ("DEALLOCATE ");
1036 gfc_status (" STAT=");
1037 gfc_show_expr (c->expr);
1040 for (a = c->ext.alloc_list; a; a = a->next)
1042 gfc_status_char (' ');
1043 gfc_show_expr (a->expr);
1049 gfc_status ("OPEN");
1054 gfc_status (" UNIT=");
1055 gfc_show_expr (open->unit);
1059 gfc_status (" IOSTAT=");
1060 gfc_show_expr (open->iostat);
1064 gfc_status (" FILE=");
1065 gfc_show_expr (open->file);
1069 gfc_status (" STATUS=");
1070 gfc_show_expr (open->status);
1074 gfc_status (" ACCESS=");
1075 gfc_show_expr (open->access);
1079 gfc_status (" FORM=");
1080 gfc_show_expr (open->form);
1084 gfc_status (" RECL=");
1085 gfc_show_expr (open->recl);
1089 gfc_status (" BLANK=");
1090 gfc_show_expr (open->blank);
1094 gfc_status (" POSITION=");
1095 gfc_show_expr (open->position);
1099 gfc_status (" ACTION=");
1100 gfc_show_expr (open->action);
1104 gfc_status (" DELIM=");
1105 gfc_show_expr (open->delim);
1109 gfc_status (" PAD=");
1110 gfc_show_expr (open->pad);
1112 if (open->err != NULL)
1113 gfc_status (" ERR=%d", open->err->value);
1118 gfc_status ("CLOSE");
1119 close = c->ext.close;
1123 gfc_status (" UNIT=");
1124 gfc_show_expr (close->unit);
1128 gfc_status (" IOSTAT=");
1129 gfc_show_expr (close->iostat);
1133 gfc_status (" STATUS=");
1134 gfc_show_expr (close->status);
1136 if (close->err != NULL)
1137 gfc_status (" ERR=%d", close->err->value);
1140 case EXEC_BACKSPACE:
1141 gfc_status ("BACKSPACE");
1145 gfc_status ("ENDFILE");
1149 gfc_status ("REWIND");
1152 fp = c->ext.filepos;
1156 gfc_status (" UNIT=");
1157 gfc_show_expr (fp->unit);
1161 gfc_status (" IOSTAT=");
1162 gfc_show_expr (fp->iostat);
1164 if (fp->err != NULL)
1165 gfc_status (" ERR=%d", fp->err->value);
1169 gfc_status ("INQUIRE");
1174 gfc_status (" UNIT=");
1175 gfc_show_expr (i->unit);
1179 gfc_status (" FILE=");
1180 gfc_show_expr (i->file);
1185 gfc_status (" IOSTAT=");
1186 gfc_show_expr (i->iostat);
1190 gfc_status (" EXIST=");
1191 gfc_show_expr (i->exist);
1195 gfc_status (" OPENED=");
1196 gfc_show_expr (i->opened);
1200 gfc_status (" NUMBER=");
1201 gfc_show_expr (i->number);
1205 gfc_status (" NAMED=");
1206 gfc_show_expr (i->named);
1210 gfc_status (" NAME=");
1211 gfc_show_expr (i->name);
1215 gfc_status (" ACCESS=");
1216 gfc_show_expr (i->access);
1220 gfc_status (" SEQUENTIAL=");
1221 gfc_show_expr (i->sequential);
1226 gfc_status (" DIRECT=");
1227 gfc_show_expr (i->direct);
1231 gfc_status (" FORM=");
1232 gfc_show_expr (i->form);
1236 gfc_status (" FORMATTED");
1237 gfc_show_expr (i->formatted);
1241 gfc_status (" UNFORMATTED=");
1242 gfc_show_expr (i->unformatted);
1246 gfc_status (" RECL=");
1247 gfc_show_expr (i->recl);
1251 gfc_status (" NEXTREC=");
1252 gfc_show_expr (i->nextrec);
1256 gfc_status (" BLANK=");
1257 gfc_show_expr (i->blank);
1261 gfc_status (" POSITION=");
1262 gfc_show_expr (i->position);
1266 gfc_status (" ACTION=");
1267 gfc_show_expr (i->action);
1271 gfc_status (" READ=");
1272 gfc_show_expr (i->read);
1276 gfc_status (" WRITE=");
1277 gfc_show_expr (i->write);
1281 gfc_status (" READWRITE=");
1282 gfc_show_expr (i->readwrite);
1286 gfc_status (" DELIM=");
1287 gfc_show_expr (i->delim);
1291 gfc_status (" PAD=");
1292 gfc_show_expr (i->pad);
1296 gfc_status (" ERR=%d", i->err->value);
1300 gfc_status ("IOLENGTH ");
1301 gfc_show_expr (c->expr);
1305 gfc_status ("READ");
1309 gfc_status ("WRITE");
1315 gfc_status (" UNIT=");
1316 gfc_show_expr (dt->io_unit);
1319 if (dt->format_expr)
1321 gfc_status (" FMT=");
1322 gfc_show_expr (dt->format_expr);
1325 if (dt->format_label != NULL)
1326 gfc_status (" FMT=%d", dt->format_label->value);
1328 gfc_status (" NML=%s", dt->namelist->name);
1331 gfc_status (" IOSTAT=");
1332 gfc_show_expr (dt->iostat);
1336 gfc_status (" SIZE=");
1337 gfc_show_expr (dt->size);
1341 gfc_status (" REC=");
1342 gfc_show_expr (dt->rec);
1346 gfc_status (" ADVANCE=");
1347 gfc_show_expr (dt->advance);
1353 gfc_status ("TRANSFER ");
1354 gfc_show_expr (c->expr);
1358 gfc_status ("DT_END");
1361 if (dt->err != NULL)
1362 gfc_status (" ERR=%d", dt->err->value);
1363 if (dt->end != NULL)
1364 gfc_status (" END=%d", dt->end->value);
1365 if (dt->eor != NULL)
1366 gfc_status (" EOR=%d", dt->eor->value);
1370 gfc_internal_error ("gfc_show_code_node(): Bad statement code");
1373 gfc_status_char ('\n');
1377 /* Show a freakin' whole namespace. */
1380 gfc_show_namespace (gfc_namespace * ns)
1382 gfc_interface *intr;
1383 gfc_namespace *save;
1384 gfc_intrinsic_op op;
1387 save = gfc_current_ns;
1391 gfc_status ("Namespace:");
1399 while (i < GFC_LETTERS - 1
1400 && gfc_compare_types(&ns->default_type[i+1],
1401 &ns->default_type[l]))
1405 gfc_status(" %c-%c: ", l+'A', i+'A');
1407 gfc_status(" %c: ", l+'A');
1409 gfc_show_typespec(&ns->default_type[l]);
1411 } while (i < GFC_LETTERS);
1413 if (ns->proc_name != NULL)
1416 gfc_status ("procedure name = %s", ns->proc_name->name);
1419 gfc_current_ns = ns;
1420 gfc_traverse_symtree (ns, show_symtree);
1422 for (op = GFC_INTRINSIC_BEGIN; op != GFC_INTRINSIC_END; op++)
1424 /* User operator interfaces */
1425 intr = ns->operator[op];
1430 gfc_status ("Operator interfaces for %s:", gfc_op2string (op));
1432 for (; intr; intr = intr->next)
1433 gfc_status (" %s", intr->sym->name);
1436 if (ns->uop_root != NULL)
1439 gfc_status ("User operators:\n");
1440 gfc_traverse_user_op (ns, show_uop);
1444 gfc_status_char ('\n');
1445 gfc_status_char ('\n');
1447 gfc_show_code (0, ns->code);
1449 for (ns = ns->contained; ns; ns = ns->sibling)
1452 gfc_status ("CONTAINS\n");
1453 gfc_show_namespace (ns);
1457 gfc_status_char ('\n');
1458 gfc_current_ns = save;