2 Copyright (C) 2003, 2004 Free Software Foundation, Inc.
3 Contributed by Steven Bosscher
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
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 /* There are two types of array sections: either the
187 elements are identified by an integer array ('vector'),
188 or by an index range. In the former case we only have to
189 print the start expression which contains the vector, in
190 the latter case we have to print any of lower and upper
191 bound and the stride, if they're present. */
193 if (ar->start[i] != NULL)
194 gfc_show_expr (ar->start[i]);
196 if (ar->dimen_type[i] == DIMEN_RANGE)
198 gfc_status_char (':');
200 if (ar->end[i] != NULL)
201 gfc_show_expr (ar->end[i]);
203 if (ar->stride[i] != NULL)
205 gfc_status_char (':');
206 gfc_show_expr (ar->stride[i]);
210 if (i != ar->dimen - 1)
216 for (i = 0; i < ar->dimen; i++)
218 gfc_show_expr (ar->start[i]);
219 if (i != ar->dimen - 1)
225 gfc_status ("UNKNOWN");
229 gfc_internal_error ("gfc_show_array_ref(): Unknown array reference");
232 gfc_status_char (')');
236 /* Show a list of gfc_ref structures. */
239 gfc_show_ref (gfc_ref * p)
242 for (; p; p = p->next)
246 gfc_show_array_ref (&p->u.ar);
250 gfc_status (" %% %s", p->u.c.component->name);
254 gfc_status_char ('(');
255 gfc_show_expr (p->u.ss.start);
256 gfc_status_char (':');
257 gfc_show_expr (p->u.ss.end);
258 gfc_status_char (')');
262 gfc_internal_error ("gfc_show_ref(): Bad component code");
267 /* Display a constructor. Works recursively for array constructors. */
270 gfc_show_constructor (gfc_constructor * c)
273 for (; c; c = c->next)
275 if (c->iterator == NULL)
276 gfc_show_expr (c->expr);
279 gfc_status_char ('(');
280 gfc_show_expr (c->expr);
282 gfc_status_char (' ');
283 gfc_show_expr (c->iterator->var);
284 gfc_status_char ('=');
285 gfc_show_expr (c->iterator->start);
286 gfc_status_char (',');
287 gfc_show_expr (c->iterator->end);
288 gfc_status_char (',');
289 gfc_show_expr (c->iterator->step);
291 gfc_status_char (')');
300 /* Show an expression. */
303 gfc_show_expr (gfc_expr * p)
314 switch (p->expr_type)
317 c = p->value.character.string;
319 for (i = 0; i < p->value.character.length; i++, c++)
324 gfc_status ("%c", *c);
327 gfc_show_ref (p->ref);
331 gfc_status ("%s(", p->ts.derived->name);
332 gfc_show_constructor (p->value.constructor);
333 gfc_status_char (')');
338 gfc_show_constructor (p->value.constructor);
341 gfc_show_ref (p->ref);
345 gfc_status ("NULL()");
352 mpz_out_str (stdout, 10, p->value.integer);
354 if (p->ts.kind != gfc_default_integer_kind ())
355 gfc_status ("_%d", p->ts.kind);
359 if (p->value.logical)
360 gfc_status (".true.");
362 gfc_status (".false.");
366 mpf_out_str (stdout, 10, 0, p->value.real);
367 if (p->ts.kind != gfc_default_real_kind ())
368 gfc_status ("_%d", p->ts.kind);
372 c = p->value.character.string;
374 gfc_status_char ('\'');
376 for (i = 0; i < p->value.character.length; i++, c++)
381 gfc_status_char (*c);
384 gfc_status_char ('\'');
389 gfc_status ("(complex ");
391 mpf_out_str (stdout, 10, 0, p->value.complex.r);
392 if (p->ts.kind != gfc_default_complex_kind ())
393 gfc_status ("_%d", p->ts.kind);
397 mpf_out_str (stdout, 10, 0, p->value.complex.i);
398 if (p->ts.kind != gfc_default_complex_kind ())
399 gfc_status ("_%d", p->ts.kind);
412 gfc_status ("%s", p->symtree->n.sym->name);
413 gfc_show_ref (p->ref);
420 case INTRINSIC_UPLUS:
423 case INTRINSIC_UMINUS:
429 case INTRINSIC_MINUS:
432 case INTRINSIC_TIMES:
435 case INTRINSIC_DIVIDE:
438 case INTRINSIC_POWER:
441 case INTRINSIC_CONCAT:
454 gfc_status ("NEQV ");
480 ("gfc_show_expr(): Bad intrinsic in expression!");
483 gfc_show_expr (p->op1);
488 gfc_show_expr (p->op2);
495 if (p->value.function.name == NULL)
497 gfc_status ("%s[", p->symtree->n.sym->name);
498 gfc_show_actual_arglist (p->value.function.actual);
499 gfc_status_char (']');
503 gfc_status ("%s[[", p->value.function.name);
504 gfc_show_actual_arglist (p->value.function.actual);
505 gfc_status_char (']');
506 gfc_status_char (']');
512 gfc_internal_error ("gfc_show_expr(): Don't know how to show expr");
517 /* Show symbol attributes. The flavor and intent are followed by
518 whatever single bit attributes are present. */
521 gfc_show_attr (symbol_attribute * attr)
524 gfc_status ("(%s %s %s %s", gfc_code2string (flavors, attr->flavor),
525 gfc_intent_string (attr->intent),
526 gfc_code2string (access_types, attr->access),
527 gfc_code2string (procedures, attr->proc));
529 if (attr->allocatable)
530 gfc_status (" ALLOCATABLE");
532 gfc_status (" DIMENSION");
534 gfc_status (" EXTERNAL");
536 gfc_status (" INTRINSIC");
538 gfc_status (" OPTIONAL");
540 gfc_status (" POINTER");
542 gfc_status (" SAVE");
544 gfc_status (" TARGET");
546 gfc_status (" DUMMY");
548 gfc_status (" COMMON");
550 gfc_status (" RESULT");
552 gfc_status (" ENTRY");
555 gfc_status (" DATA");
557 gfc_status (" USE-ASSOC");
558 if (attr->in_namelist)
559 gfc_status (" IN-NAMELIST");
561 gfc_status (" IN-COMMON");
562 if (attr->saved_common)
563 gfc_status (" SAVED-COMMON");
566 gfc_status (" FUNCTION");
567 if (attr->subroutine)
568 gfc_status (" SUBROUTINE");
569 if (attr->implicit_type)
570 gfc_status (" IMPLICIT-TYPE");
573 gfc_status (" SEQUENCE");
575 gfc_status (" ELEMENTAL");
577 gfc_status (" PURE");
579 gfc_status (" RECURSIVE");
585 /* Show components of a derived type. */
588 gfc_show_components (gfc_symbol * sym)
592 for (c = sym->components; c; c = c->next)
594 gfc_status ("(%s ", c->name);
595 gfc_show_typespec (&c->ts);
597 gfc_status (" POINTER");
599 gfc_status (" DIMENSION");
600 gfc_status_char (' ');
601 gfc_show_array_spec (c->as);
604 gfc_status_char (' ');
609 /* Show a symbol. If a symbol is an ENTRY, SUBROUTINE or FUNCTION, we
610 show the interface. Information needed to reconstruct the list of
611 specific interfaces associated with a generic symbol is done within
615 gfc_show_symbol (gfc_symbol * sym)
617 gfc_formal_arglist *formal;
626 gfc_status ("symbol %s ", sym->name);
627 gfc_show_typespec (&sym->ts);
628 gfc_show_attr (&sym->attr);
633 gfc_status ("value: ");
634 gfc_show_expr (sym->value);
640 gfc_status ("Array spec:");
641 gfc_show_array_spec (sym->as);
647 gfc_status ("Generic interfaces:");
648 for (intr = sym->generic; intr; intr = intr->next)
649 gfc_status (" %s", intr->sym->name);
652 if (sym->common_head)
655 gfc_status ("Common members:");
656 for (s = sym->common_head; s; s = s->common_next)
657 gfc_status (" %s", s->name);
663 gfc_status ("result: %s", sym->result->name);
669 gfc_status ("components: ");
670 gfc_show_components (sym);
676 gfc_status ("Formal arglist:");
678 for (formal = sym->formal; formal; formal = formal->next)
679 gfc_status (" %s", formal->sym->name);
685 gfc_status ("Formal namespace");
686 gfc_show_namespace (sym->formal_ns);
689 gfc_status_char ('\n');
693 /* Show a user-defined operator. Just prints an operator
694 and the name of the associated subroutine, really. */
696 show_uop (gfc_user_op * uop)
701 gfc_status ("%s:", uop->name);
703 for (intr = uop->operator; intr; intr = intr->next)
704 gfc_status (" %s", intr->sym->name);
708 /* Workhorse function for traversing the user operator symtree. */
711 traverse_uop (gfc_symtree * st, void (*func) (gfc_user_op *))
719 traverse_uop (st->left, func);
720 traverse_uop (st->right, func);
724 /* Traverse the tree of user operator nodes. */
727 gfc_traverse_user_op (gfc_namespace * ns, void (*func) (gfc_user_op *))
730 traverse_uop (ns->uop_root, func);
734 /* Worker function to display the symbol tree. */
737 show_symtree (gfc_symtree * st)
741 gfc_status ("symtree: %s Ambig %d", st->name, st->ambiguous);
743 if (st->n.sym->ns != gfc_current_ns)
744 gfc_status (" from namespace %s", st->n.sym->ns->proc_name->name);
746 gfc_show_symbol (st->n.sym);
750 /******************* Show gfc_code structures **************/
754 static void gfc_show_code_node (int level, gfc_code * c);
756 /* Show a list of code structures. Mutually recursive with
757 gfc_show_code_node(). */
760 gfc_show_code (int level, gfc_code * c)
763 for (; c; c = c->next)
764 gfc_show_code_node (level, c);
768 /* Show a single code node and everything underneath it if necessary. */
771 gfc_show_code_node (int level, gfc_code * c)
773 gfc_forall_iterator *fa;
783 code_indent (level, c->here);
792 gfc_status ("CONTINUE");
796 gfc_status ("ASSIGN ");
797 gfc_show_expr (c->expr);
798 gfc_status_char (' ');
799 gfc_show_expr (c->expr2);
801 case EXEC_LABEL_ASSIGN:
802 gfc_status ("LABEL ASSIGN ");
803 gfc_show_expr (c->expr);
804 gfc_status (" %d", c->label->value);
807 case EXEC_POINTER_ASSIGN:
808 gfc_status ("POINTER ASSIGN ");
809 gfc_show_expr (c->expr);
810 gfc_status_char (' ');
811 gfc_show_expr (c->expr2);
815 gfc_status ("GOTO ");
817 gfc_status ("%d", c->label->value);
820 gfc_show_expr (c->expr);
825 for (; d; d = d ->block)
827 code_indent (level, d->label);
828 if (d->block != NULL)
829 gfc_status_char (',');
831 gfc_status_char (')');
838 gfc_status ("CALL %s ", c->resolved_sym->name);
839 gfc_show_actual_arglist (c->ext.actual);
843 gfc_status ("RETURN ");
845 gfc_show_expr (c->expr);
849 gfc_status ("PAUSE ");
852 gfc_show_expr (c->expr);
854 gfc_status ("%d", c->ext.stop_code);
859 gfc_status ("STOP ");
862 gfc_show_expr (c->expr);
864 gfc_status ("%d", c->ext.stop_code);
868 case EXEC_ARITHMETIC_IF:
870 gfc_show_expr (c->expr);
871 gfc_status (" %d, %d, %d",
872 c->label->value, c->label2->value, c->label3->value);
878 gfc_show_expr (d->expr);
879 gfc_status_char ('\n');
880 gfc_show_code (level + 1, d->next);
883 for (; d; d = d->block)
885 code_indent (level, 0);
888 gfc_status ("ELSE\n");
891 gfc_status ("ELSE IF ");
892 gfc_show_expr (d->expr);
893 gfc_status_char ('\n');
896 gfc_show_code (level + 1, d->next);
899 code_indent (level, c->label);
901 gfc_status ("ENDIF");
906 gfc_status ("SELECT CASE ");
907 gfc_show_expr (c->expr);
908 gfc_status_char ('\n');
910 for (; d; d = d->block)
912 code_indent (level, 0);
914 gfc_status ("CASE ");
915 for (cp = d->ext.case_list; cp; cp = cp->next)
917 gfc_status_char ('(');
918 gfc_show_expr (cp->low);
919 gfc_status_char (' ');
920 gfc_show_expr (cp->high);
921 gfc_status_char (')');
922 gfc_status_char (' ');
924 gfc_status_char ('\n');
926 gfc_show_code (level + 1, d->next);
929 code_indent (level, c->label);
930 gfc_status ("END SELECT");
934 gfc_status ("WHERE ");
937 gfc_show_expr (d->expr);
938 gfc_status_char ('\n');
940 gfc_show_code (level + 1, d->next);
942 for (d = d->block; d; d = d->block)
944 code_indent (level, 0);
945 gfc_status ("ELSE WHERE ");
946 gfc_show_expr (d->expr);
947 gfc_status_char ('\n');
948 gfc_show_code (level + 1, d->next);
951 code_indent (level, 0);
952 gfc_status ("END WHERE");
957 gfc_status ("FORALL ");
958 for (fa = c->ext.forall_iterator; fa; fa = fa->next)
960 gfc_show_expr (fa->var);
961 gfc_status_char (' ');
962 gfc_show_expr (fa->start);
963 gfc_status_char (':');
964 gfc_show_expr (fa->end);
965 gfc_status_char (':');
966 gfc_show_expr (fa->stride);
968 if (fa->next != NULL)
969 gfc_status_char (',');
974 gfc_status_char (',');
975 gfc_show_expr (c->expr);
977 gfc_status_char ('\n');
979 gfc_show_code (level + 1, c->block->next);
981 code_indent (level, 0);
982 gfc_status ("END FORALL");
988 gfc_show_expr (c->ext.iterator->var);
989 gfc_status_char ('=');
990 gfc_show_expr (c->ext.iterator->start);
991 gfc_status_char (' ');
992 gfc_show_expr (c->ext.iterator->end);
993 gfc_status_char (' ');
994 gfc_show_expr (c->ext.iterator->step);
995 gfc_status_char ('\n');
997 gfc_show_code (level + 1, c->block->next);
999 code_indent (level, 0);
1000 gfc_status ("END DO");
1004 gfc_status ("DO WHILE ");
1005 gfc_show_expr (c->expr);
1006 gfc_status_char ('\n');
1008 gfc_show_code (level + 1, c->block->next);
1010 code_indent (level, c->label);
1011 gfc_status ("END DO");
1015 gfc_status ("CYCLE");
1017 gfc_status (" %s", c->symtree->n.sym->name);
1021 gfc_status ("EXIT");
1023 gfc_status (" %s", c->symtree->n.sym->name);
1027 gfc_status ("ALLOCATE ");
1030 gfc_status (" STAT=");
1031 gfc_show_expr (c->expr);
1034 for (a = c->ext.alloc_list; a; a = a->next)
1036 gfc_status_char (' ');
1037 gfc_show_expr (a->expr);
1042 case EXEC_DEALLOCATE:
1043 gfc_status ("DEALLOCATE ");
1046 gfc_status (" STAT=");
1047 gfc_show_expr (c->expr);
1050 for (a = c->ext.alloc_list; a; a = a->next)
1052 gfc_status_char (' ');
1053 gfc_show_expr (a->expr);
1059 gfc_status ("OPEN");
1064 gfc_status (" UNIT=");
1065 gfc_show_expr (open->unit);
1069 gfc_status (" IOSTAT=");
1070 gfc_show_expr (open->iostat);
1074 gfc_status (" FILE=");
1075 gfc_show_expr (open->file);
1079 gfc_status (" STATUS=");
1080 gfc_show_expr (open->status);
1084 gfc_status (" ACCESS=");
1085 gfc_show_expr (open->access);
1089 gfc_status (" FORM=");
1090 gfc_show_expr (open->form);
1094 gfc_status (" RECL=");
1095 gfc_show_expr (open->recl);
1099 gfc_status (" BLANK=");
1100 gfc_show_expr (open->blank);
1104 gfc_status (" POSITION=");
1105 gfc_show_expr (open->position);
1109 gfc_status (" ACTION=");
1110 gfc_show_expr (open->action);
1114 gfc_status (" DELIM=");
1115 gfc_show_expr (open->delim);
1119 gfc_status (" PAD=");
1120 gfc_show_expr (open->pad);
1122 if (open->err != NULL)
1123 gfc_status (" ERR=%d", open->err->value);
1128 gfc_status ("CLOSE");
1129 close = c->ext.close;
1133 gfc_status (" UNIT=");
1134 gfc_show_expr (close->unit);
1138 gfc_status (" IOSTAT=");
1139 gfc_show_expr (close->iostat);
1143 gfc_status (" STATUS=");
1144 gfc_show_expr (close->status);
1146 if (close->err != NULL)
1147 gfc_status (" ERR=%d", close->err->value);
1150 case EXEC_BACKSPACE:
1151 gfc_status ("BACKSPACE");
1155 gfc_status ("ENDFILE");
1159 gfc_status ("REWIND");
1162 fp = c->ext.filepos;
1166 gfc_status (" UNIT=");
1167 gfc_show_expr (fp->unit);
1171 gfc_status (" IOSTAT=");
1172 gfc_show_expr (fp->iostat);
1174 if (fp->err != NULL)
1175 gfc_status (" ERR=%d", fp->err->value);
1179 gfc_status ("INQUIRE");
1184 gfc_status (" UNIT=");
1185 gfc_show_expr (i->unit);
1189 gfc_status (" FILE=");
1190 gfc_show_expr (i->file);
1195 gfc_status (" IOSTAT=");
1196 gfc_show_expr (i->iostat);
1200 gfc_status (" EXIST=");
1201 gfc_show_expr (i->exist);
1205 gfc_status (" OPENED=");
1206 gfc_show_expr (i->opened);
1210 gfc_status (" NUMBER=");
1211 gfc_show_expr (i->number);
1215 gfc_status (" NAMED=");
1216 gfc_show_expr (i->named);
1220 gfc_status (" NAME=");
1221 gfc_show_expr (i->name);
1225 gfc_status (" ACCESS=");
1226 gfc_show_expr (i->access);
1230 gfc_status (" SEQUENTIAL=");
1231 gfc_show_expr (i->sequential);
1236 gfc_status (" DIRECT=");
1237 gfc_show_expr (i->direct);
1241 gfc_status (" FORM=");
1242 gfc_show_expr (i->form);
1246 gfc_status (" FORMATTED");
1247 gfc_show_expr (i->formatted);
1251 gfc_status (" UNFORMATTED=");
1252 gfc_show_expr (i->unformatted);
1256 gfc_status (" RECL=");
1257 gfc_show_expr (i->recl);
1261 gfc_status (" NEXTREC=");
1262 gfc_show_expr (i->nextrec);
1266 gfc_status (" BLANK=");
1267 gfc_show_expr (i->blank);
1271 gfc_status (" POSITION=");
1272 gfc_show_expr (i->position);
1276 gfc_status (" ACTION=");
1277 gfc_show_expr (i->action);
1281 gfc_status (" READ=");
1282 gfc_show_expr (i->read);
1286 gfc_status (" WRITE=");
1287 gfc_show_expr (i->write);
1291 gfc_status (" READWRITE=");
1292 gfc_show_expr (i->readwrite);
1296 gfc_status (" DELIM=");
1297 gfc_show_expr (i->delim);
1301 gfc_status (" PAD=");
1302 gfc_show_expr (i->pad);
1306 gfc_status (" ERR=%d", i->err->value);
1310 gfc_status ("IOLENGTH ");
1311 gfc_show_expr (c->expr);
1315 gfc_status ("READ");
1319 gfc_status ("WRITE");
1325 gfc_status (" UNIT=");
1326 gfc_show_expr (dt->io_unit);
1329 if (dt->format_expr)
1331 gfc_status (" FMT=");
1332 gfc_show_expr (dt->format_expr);
1335 if (dt->format_label != NULL)
1336 gfc_status (" FMT=%d", dt->format_label->value);
1338 gfc_status (" NML=%s", dt->namelist->name);
1341 gfc_status (" IOSTAT=");
1342 gfc_show_expr (dt->iostat);
1346 gfc_status (" SIZE=");
1347 gfc_show_expr (dt->size);
1351 gfc_status (" REC=");
1352 gfc_show_expr (dt->rec);
1356 gfc_status (" ADVANCE=");
1357 gfc_show_expr (dt->advance);
1363 gfc_status ("TRANSFER ");
1364 gfc_show_expr (c->expr);
1368 gfc_status ("DT_END");
1371 if (dt->err != NULL)
1372 gfc_status (" ERR=%d", dt->err->value);
1373 if (dt->end != NULL)
1374 gfc_status (" END=%d", dt->end->value);
1375 if (dt->eor != NULL)
1376 gfc_status (" EOR=%d", dt->eor->value);
1380 gfc_internal_error ("gfc_show_code_node(): Bad statement code");
1383 gfc_status_char ('\n');
1387 /* Show and equivalence chain. */
1390 gfc_show_equiv (gfc_equiv *eq)
1393 gfc_status ("Equivalence: ");
1396 gfc_show_expr (eq->expr);
1404 /* Show a freakin' whole namespace. */
1407 gfc_show_namespace (gfc_namespace * ns)
1409 gfc_interface *intr;
1410 gfc_namespace *save;
1411 gfc_intrinsic_op op;
1415 save = gfc_current_ns;
1419 gfc_status ("Namespace:");
1427 while (i < GFC_LETTERS - 1
1428 && gfc_compare_types(&ns->default_type[i+1],
1429 &ns->default_type[l]))
1433 gfc_status(" %c-%c: ", l+'A', i+'A');
1435 gfc_status(" %c: ", l+'A');
1437 gfc_show_typespec(&ns->default_type[l]);
1439 } while (i < GFC_LETTERS);
1441 if (ns->proc_name != NULL)
1444 gfc_status ("procedure name = %s", ns->proc_name->name);
1447 gfc_current_ns = ns;
1448 gfc_traverse_symtree (ns, show_symtree);
1450 for (op = GFC_INTRINSIC_BEGIN; op != GFC_INTRINSIC_END; op++)
1452 /* User operator interfaces */
1453 intr = ns->operator[op];
1458 gfc_status ("Operator interfaces for %s:", gfc_op2string (op));
1460 for (; intr; intr = intr->next)
1461 gfc_status (" %s", intr->sym->name);
1464 if (ns->uop_root != NULL)
1467 gfc_status ("User operators:\n");
1468 gfc_traverse_user_op (ns, show_uop);
1472 for (eq = ns->equiv; eq; eq = eq->next)
1473 gfc_show_equiv (eq);
1475 gfc_status_char ('\n');
1476 gfc_status_char ('\n');
1478 gfc_show_code (0, ns->code);
1480 for (ns = ns->contained; ns; ns = ns->sibling)
1483 gfc_status ("CONTAINS\n");
1484 gfc_show_namespace (ns);
1488 gfc_status_char ('\n');
1489 gfc_current_ns = save;