Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / gcc / fortran / parse.c
bloba3f0ac19539ded0fd7a9e6fa2b96c51327a5f073
1 /* Main parser.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
3 Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
24 #include "config.h"
25 #include "system.h"
26 #include <setjmp.h>
27 #include "gfortran.h"
28 #include "match.h"
29 #include "parse.h"
31 /* Current statement label. Zero means no statement label. Because
32 new_st can get wiped during statement matching, we have to keep it
33 separate. */
35 gfc_st_label *gfc_statement_label;
37 static locus label_locus;
38 static jmp_buf eof_buf;
40 gfc_state_data *gfc_state_stack;
42 /* TODO: Re-order functions to kill these forward decls. */
43 static void check_statement_label (gfc_statement);
44 static void undo_new_statement (void);
45 static void reject_statement (void);
47 /* A sort of half-matching function. We try to match the word on the
48 input with the passed string. If this succeeds, we call the
49 keyword-dependent matching function that will match the rest of the
50 statement. For single keywords, the matching subroutine is
51 gfc_match_eos(). */
53 static match
54 match_word (const char *str, match (*subr) (void), locus * old_locus)
56 match m;
58 if (str != NULL)
60 m = gfc_match (str);
61 if (m != MATCH_YES)
62 return m;
65 m = (*subr) ();
67 if (m != MATCH_YES)
69 gfc_current_locus = *old_locus;
70 reject_statement ();
73 return m;
77 /* Figure out what the next statement is, (mostly) regardless of
78 proper ordering. */
80 #define match(keyword, subr, st) \
81 if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
82 return st; \
83 else \
84 undo_new_statement ();
86 static gfc_statement
87 decode_statement (void)
89 gfc_statement st;
90 locus old_locus;
91 match m;
92 int c;
94 #ifdef GFC_DEBUG
95 gfc_symbol_state ();
96 #endif
98 gfc_clear_error (); /* Clear any pending errors. */
99 gfc_clear_warning (); /* Clear any pending warnings. */
101 if (gfc_match_eos () == MATCH_YES)
102 return ST_NONE;
104 old_locus = gfc_current_locus;
106 /* Try matching a data declaration or function declaration. The
107 input "REALFUNCTIONA(N)" can mean several things in different
108 contexts, so it (and its relatives) get special treatment. */
110 if (gfc_current_state () == COMP_NONE
111 || gfc_current_state () == COMP_INTERFACE
112 || gfc_current_state () == COMP_CONTAINS)
114 m = gfc_match_function_decl ();
115 if (m == MATCH_YES)
116 return ST_FUNCTION;
117 else if (m == MATCH_ERROR)
118 reject_statement ();
120 gfc_undo_symbols ();
121 gfc_current_locus = old_locus;
124 /* Match statements whose error messages are meant to be overwritten
125 by something better. */
127 match (NULL, gfc_match_assignment, ST_ASSIGNMENT);
128 match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT);
129 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
131 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
133 /* Try to match a subroutine statement, which has the same optional
134 prefixes that functions can have. */
136 if (gfc_match_subroutine () == MATCH_YES)
137 return ST_SUBROUTINE;
138 gfc_undo_symbols ();
139 gfc_current_locus = old_locus;
141 /* Check for the IF, DO, SELECT, WHERE and FORALL statements, which
142 might begin with a block label. The match functions for these
143 statements are unusual in that their keyword is not seen before
144 the matcher is called. */
146 if (gfc_match_if (&st) == MATCH_YES)
147 return st;
148 gfc_undo_symbols ();
149 gfc_current_locus = old_locus;
151 if (gfc_match_where (&st) == MATCH_YES)
152 return st;
153 gfc_undo_symbols ();
154 gfc_current_locus = old_locus;
156 if (gfc_match_forall (&st) == MATCH_YES)
157 return st;
158 gfc_undo_symbols ();
159 gfc_current_locus = old_locus;
161 match (NULL, gfc_match_do, ST_DO);
162 match (NULL, gfc_match_select, ST_SELECT_CASE);
164 /* General statement matching: Instead of testing every possible
165 statement, we eliminate most possibilities by peeking at the
166 first character. */
168 c = gfc_peek_char ();
170 switch (c)
172 case 'a':
173 match ("allocate", gfc_match_allocate, ST_ALLOCATE);
174 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
175 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
176 break;
178 case 'b':
179 match ("backspace", gfc_match_backspace, ST_BACKSPACE);
180 match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
181 break;
183 case 'c':
184 match ("call", gfc_match_call, ST_CALL);
185 match ("close", gfc_match_close, ST_CLOSE);
186 match ("continue", gfc_match_continue, ST_CONTINUE);
187 match ("cycle", gfc_match_cycle, ST_CYCLE);
188 match ("case", gfc_match_case, ST_CASE);
189 match ("common", gfc_match_common, ST_COMMON);
190 match ("contains", gfc_match_eos, ST_CONTAINS);
191 break;
193 case 'd':
194 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE);
195 match ("data", gfc_match_data, ST_DATA);
196 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
197 break;
199 case 'e':
200 match ("end file", gfc_match_endfile, ST_END_FILE);
201 match ("exit", gfc_match_exit, ST_EXIT);
202 match ("else", gfc_match_else, ST_ELSE);
203 match ("else where", gfc_match_elsewhere, ST_ELSEWHERE);
204 match ("else if", gfc_match_elseif, ST_ELSEIF);
206 if (gfc_match_end (&st) == MATCH_YES)
207 return st;
209 match ("entry% ", gfc_match_entry, ST_ENTRY);
210 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
211 match ("external", gfc_match_external, ST_ATTR_DECL);
212 break;
214 case 'f':
215 match ("format", gfc_match_format, ST_FORMAT);
216 break;
218 case 'g':
219 match ("go to", gfc_match_goto, ST_GOTO);
220 break;
222 case 'i':
223 match ("inquire", gfc_match_inquire, ST_INQUIRE);
224 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
225 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
226 match ("interface", gfc_match_interface, ST_INTERFACE);
227 match ("intent", gfc_match_intent, ST_ATTR_DECL);
228 match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL);
229 break;
231 case 'm':
232 match ("module% procedure% ", gfc_match_modproc, ST_MODULE_PROC);
233 match ("module", gfc_match_module, ST_MODULE);
234 break;
236 case 'n':
237 match ("nullify", gfc_match_nullify, ST_NULLIFY);
238 match ("namelist", gfc_match_namelist, ST_NAMELIST);
239 break;
241 case 'o':
242 match ("open", gfc_match_open, ST_OPEN);
243 match ("optional", gfc_match_optional, ST_ATTR_DECL);
244 break;
246 case 'p':
247 match ("print", gfc_match_print, ST_WRITE);
248 match ("parameter", gfc_match_parameter, ST_PARAMETER);
249 match ("pause", gfc_match_pause, ST_PAUSE);
250 match ("pointer", gfc_match_pointer, ST_ATTR_DECL);
251 if (gfc_match_private (&st) == MATCH_YES)
252 return st;
253 match ("program", gfc_match_program, ST_PROGRAM);
254 if (gfc_match_public (&st) == MATCH_YES)
255 return st;
256 break;
258 case 'r':
259 match ("read", gfc_match_read, ST_READ);
260 match ("return", gfc_match_return, ST_RETURN);
261 match ("rewind", gfc_match_rewind, ST_REWIND);
262 break;
264 case 's':
265 match ("sequence", gfc_match_eos, ST_SEQUENCE);
266 match ("stop", gfc_match_stop, ST_STOP);
267 match ("save", gfc_match_save, ST_ATTR_DECL);
268 break;
270 case 't':
271 match ("target", gfc_match_target, ST_ATTR_DECL);
272 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
273 break;
275 case 'u':
276 match ("use% ", gfc_match_use, ST_USE);
277 break;
279 case 'w':
280 match ("write", gfc_match_write, ST_WRITE);
281 break;
284 /* All else has failed, so give up. See if any of the matchers has
285 stored an error message of some sort. */
287 if (gfc_error_check () == 0)
288 gfc_error_now ("Unclassifiable statement at %C");
290 reject_statement ();
292 gfc_error_recovery ();
294 return ST_NONE;
297 #undef match
300 /* Get the next statement in free form source. */
302 static gfc_statement
303 next_free (void)
305 match m;
306 int c, d;
308 gfc_gobble_whitespace ();
310 c = gfc_peek_char ();
312 if (ISDIGIT (c))
314 /* Found a statement label? */
315 m = gfc_match_st_label (&gfc_statement_label, 0);
317 d = gfc_peek_char ();
318 if (m != MATCH_YES || !gfc_is_whitespace (d))
322 /* Skip the bad statement label. */
323 gfc_warning_now ("Ignoring bad statement label at %C");
324 c = gfc_next_char ();
326 while (ISDIGIT (c));
328 else
330 label_locus = gfc_current_locus;
332 if (gfc_statement_label->value == 0)
334 gfc_warning_now ("Ignoring statement label of zero at %C");
335 gfc_free_st_label (gfc_statement_label);
336 gfc_statement_label = NULL;
339 gfc_gobble_whitespace ();
341 if (gfc_match_eos () == MATCH_YES)
343 gfc_warning_now
344 ("Ignoring statement label in empty statement at %C");
345 gfc_free_st_label (gfc_statement_label);
346 gfc_statement_label = NULL;
347 return ST_NONE;
352 return decode_statement ();
356 /* Get the next statement in fixed-form source. */
358 static gfc_statement
359 next_fixed (void)
361 int label, digit_flag, i;
362 locus loc;
363 char c;
365 if (!gfc_at_bol ())
366 return decode_statement ();
368 /* Skip past the current label field, parsing a statement label if
369 one is there. This is a weird number parser, since the number is
370 contained within five columns and can have any kind of embedded
371 spaces. We also check for characters that make the rest of the
372 line a comment. */
374 label = 0;
375 digit_flag = 0;
377 for (i = 0; i < 5; i++)
379 c = gfc_next_char_literal (0);
381 switch (c)
383 case ' ':
384 break;
386 case '0':
387 case '1':
388 case '2':
389 case '3':
390 case '4':
391 case '5':
392 case '6':
393 case '7':
394 case '8':
395 case '9':
396 label = label * 10 + c - '0';
397 label_locus = gfc_current_locus;
398 digit_flag = 1;
399 break;
401 /* Comments have already been skipped by the time we get
402 here so don't bother checking for them. */
404 default:
405 gfc_buffer_error (0);
406 gfc_error ("Non-numeric character in statement label at %C");
407 return ST_NONE;
411 if (digit_flag)
413 if (label == 0)
414 gfc_warning_now ("Zero is not a valid statement label at %C");
415 else
417 /* We've found a valid statement label. */
418 gfc_statement_label = gfc_get_st_label (label);
422 /* Since this line starts a statement, it cannot be a continuation
423 of a previous statement. If we see something here besides a
424 space or zero, it must be a bad continuation line. */
426 c = gfc_next_char_literal (0);
427 if (c == '\n')
428 goto blank_line;
430 if (c != ' ' && c!= '0')
432 gfc_buffer_error (0);
433 gfc_error ("Bad continuation line at %C");
434 return ST_NONE;
437 /* Now that we've taken care of the statement label columns, we have
438 to make sure that the first nonblank character is not a '!'. If
439 it is, the rest of the line is a comment. */
443 loc = gfc_current_locus;
444 c = gfc_next_char_literal (0);
446 while (gfc_is_whitespace (c));
448 if (c == '!')
449 goto blank_line;
450 gfc_current_locus = loc;
452 if (gfc_match_eos () == MATCH_YES)
453 goto blank_line;
455 /* At this point, we've got a nonblank statement to parse. */
456 return decode_statement ();
458 blank_line:
459 if (digit_flag)
460 gfc_warning ("Statement label in blank line will be " "ignored at %C");
461 gfc_advance_line ();
462 return ST_NONE;
466 /* Return the next non-ST_NONE statement to the caller. We also worry
467 about including files and the ends of include files at this stage. */
469 static gfc_statement
470 next_statement (void)
472 gfc_statement st;
474 gfc_new_block = NULL;
476 for (;;)
478 gfc_statement_label = NULL;
479 gfc_buffer_error (1);
481 if (gfc_at_eol ())
482 gfc_advance_line ();
484 gfc_skip_comments ();
486 if (gfc_at_end ())
488 st = ST_NONE;
489 break;
492 st =
493 (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
495 if (st != ST_NONE)
496 break;
499 gfc_buffer_error (0);
501 if (st != ST_NONE)
502 check_statement_label (st);
504 return st;
508 /****************************** Parser ***********************************/
510 /* The parser subroutines are of type 'try' that fail if the file ends
511 unexpectedly. */
513 /* Macros that expand to case-labels for various classes of
514 statements. Start with executable statements that directly do
515 things. */
517 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
518 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
519 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
520 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
521 case ST_PAUSE: case ST_STOP: case ST_WRITE: case ST_ASSIGNMENT: \
522 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
523 case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: case ST_LABEL_ASSIGNMENT
525 /* Statements that mark other executable statements. */
527 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \
528 case ST_WHERE_BLOCK: case ST_SELECT_CASE
530 /* Declaration statements */
532 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
533 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
534 case ST_TYPE: case ST_INTERFACE
536 /* Block end statements. Errors associated with interchanging these
537 are detected in gfc_match_end(). */
539 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
540 case ST_END_PROGRAM: case ST_END_SUBROUTINE
543 /* Push a new state onto the stack. */
545 static void
546 push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
549 p->state = new_state;
550 p->previous = gfc_state_stack;
551 p->sym = sym;
552 p->head = p->tail = NULL;
553 p->do_variable = NULL;
555 gfc_state_stack = p;
559 /* Pop the current state. */
561 static void
562 pop_state (void)
565 gfc_state_stack = gfc_state_stack->previous;
569 /* Try to find the given state in the state stack. */
572 gfc_find_state (gfc_compile_state state)
574 gfc_state_data *p;
576 for (p = gfc_state_stack; p; p = p->previous)
577 if (p->state == state)
578 break;
580 return (p == NULL) ? FAILURE : SUCCESS;
584 /* Starts a new level in the statement list. */
586 static gfc_code *
587 new_level (gfc_code * q)
589 gfc_code *p;
591 p = q->block = gfc_get_code ();
593 gfc_state_stack->head = gfc_state_stack->tail = p;
595 return p;
599 /* Add the current new_st code structure and adds it to the current
600 program unit. As a side-effect, it zeroes the new_st. */
602 static gfc_code *
603 add_statement (void)
605 gfc_code *p;
607 p = gfc_get_code ();
608 *p = new_st;
610 p->loc = gfc_current_locus;
612 if (gfc_state_stack->head == NULL)
613 gfc_state_stack->head = p;
614 else
615 gfc_state_stack->tail->next = p;
617 while (p->next != NULL)
618 p = p->next;
620 gfc_state_stack->tail = p;
622 gfc_clear_new_st ();
624 return p;
628 /* Frees everything associated with the current statement. */
630 static void
631 undo_new_statement (void)
633 gfc_free_statements (new_st.block);
634 gfc_free_statements (new_st.next);
635 gfc_free_statement (&new_st);
636 gfc_clear_new_st ();
640 /* If the current statement has a statement label, make sure that it
641 is allowed to, or should have one. */
643 static void
644 check_statement_label (gfc_statement st)
646 gfc_sl_type type;
648 if (gfc_statement_label == NULL)
650 if (st == ST_FORMAT)
651 gfc_error ("FORMAT statement at %L does not have a statement label",
652 &new_st.loc);
653 return;
656 switch (st)
658 case ST_END_PROGRAM:
659 case ST_END_FUNCTION:
660 case ST_END_SUBROUTINE:
661 case ST_ENDDO:
662 case ST_ENDIF:
663 case ST_END_SELECT:
664 case_executable:
665 case_exec_markers:
666 type = ST_LABEL_TARGET;
667 break;
669 case ST_FORMAT:
670 type = ST_LABEL_FORMAT;
671 break;
673 /* Statement labels are not restricted from appearing on a
674 particular line. However, there are plenty of situations
675 where the resulting label can't be referenced. */
677 default:
678 type = ST_LABEL_BAD_TARGET;
679 break;
682 gfc_define_st_label (gfc_statement_label, type, &label_locus);
684 new_st.here = gfc_statement_label;
688 /* Figures out what the enclosing program unit is. This will be a
689 function, subroutine, program, block data or module. */
691 gfc_state_data *
692 gfc_enclosing_unit (gfc_compile_state * result)
694 gfc_state_data *p;
696 for (p = gfc_state_stack; p; p = p->previous)
697 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
698 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
699 || p->state == COMP_PROGRAM)
702 if (result != NULL)
703 *result = p->state;
704 return p;
707 if (result != NULL)
708 *result = COMP_PROGRAM;
709 return NULL;
713 /* Translate a statement enum to a string. */
715 const char *
716 gfc_ascii_statement (gfc_statement st)
718 const char *p;
720 switch (st)
722 case ST_ARITHMETIC_IF:
723 p = "arithmetic IF";
724 break;
725 case ST_ALLOCATE:
726 p = "ALLOCATE";
727 break;
728 case ST_ATTR_DECL:
729 p = "attribute declaration";
730 break;
731 case ST_BACKSPACE:
732 p = "BACKSPACE";
733 break;
734 case ST_BLOCK_DATA:
735 p = "BLOCK DATA";
736 break;
737 case ST_CALL:
738 p = "CALL";
739 break;
740 case ST_CASE:
741 p = "CASE";
742 break;
743 case ST_CLOSE:
744 p = "CLOSE";
745 break;
746 case ST_COMMON:
747 p = "COMMON";
748 break;
749 case ST_CONTINUE:
750 p = "CONTINUE";
751 break;
752 case ST_CONTAINS:
753 p = "CONTAINS";
754 break;
755 case ST_CYCLE:
756 p = "CYCLE";
757 break;
758 case ST_DATA_DECL:
759 p = "data declaration";
760 break;
761 case ST_DATA:
762 p = "DATA";
763 break;
764 case ST_DEALLOCATE:
765 p = "DEALLOCATE";
766 break;
767 case ST_DERIVED_DECL:
768 p = "Derived type declaration";
769 break;
770 case ST_DO:
771 p = "DO";
772 break;
773 case ST_ELSE:
774 p = "ELSE";
775 break;
776 case ST_ELSEIF:
777 p = "ELSE IF";
778 break;
779 case ST_ELSEWHERE:
780 p = "ELSEWHERE";
781 break;
782 case ST_END_BLOCK_DATA:
783 p = "END BLOCK DATA";
784 break;
785 case ST_ENDDO:
786 p = "END DO";
787 break;
788 case ST_END_FILE:
789 p = "END FILE";
790 break;
791 case ST_END_FORALL:
792 p = "END FORALL";
793 break;
794 case ST_END_FUNCTION:
795 p = "END FUNCTION";
796 break;
797 case ST_ENDIF:
798 p = "END IF";
799 break;
800 case ST_END_INTERFACE:
801 p = "END INTERFACE";
802 break;
803 case ST_END_MODULE:
804 p = "END MODULE";
805 break;
806 case ST_END_PROGRAM:
807 p = "END PROGRAM";
808 break;
809 case ST_END_SELECT:
810 p = "END SELECT";
811 break;
812 case ST_END_SUBROUTINE:
813 p = "END SUBROUTINE";
814 break;
815 case ST_END_WHERE:
816 p = "END WHERE";
817 break;
818 case ST_END_TYPE:
819 p = "END TYPE";
820 break;
821 case ST_ENTRY:
822 p = "ENTRY";
823 break;
824 case ST_EQUIVALENCE:
825 p = "EQUIVALENCE";
826 break;
827 case ST_EXIT:
828 p = "EXIT";
829 break;
830 case ST_FORALL_BLOCK: /* Fall through */
831 case ST_FORALL:
832 p = "FORALL";
833 break;
834 case ST_FORMAT:
835 p = "FORMAT";
836 break;
837 case ST_FUNCTION:
838 p = "FUNCTION";
839 break;
840 case ST_GOTO:
841 p = "GOTO";
842 break;
843 case ST_IF_BLOCK:
844 p = "block IF";
845 break;
846 case ST_IMPLICIT:
847 p = "IMPLICIT";
848 break;
849 case ST_IMPLICIT_NONE:
850 p = "IMPLICIT NONE";
851 break;
852 case ST_IMPLIED_ENDDO:
853 p = "implied END DO";
854 break;
855 case ST_INQUIRE:
856 p = "INQUIRE";
857 break;
858 case ST_INTERFACE:
859 p = "INTERFACE";
860 break;
861 case ST_PARAMETER:
862 p = "PARAMETER";
863 break;
864 case ST_PRIVATE:
865 p = "PRIVATE";
866 break;
867 case ST_PUBLIC:
868 p = "PUBLIC";
869 break;
870 case ST_MODULE:
871 p = "MODULE";
872 break;
873 case ST_PAUSE:
874 p = "PAUSE";
875 break;
876 case ST_MODULE_PROC:
877 p = "MODULE PROCEDURE";
878 break;
879 case ST_NAMELIST:
880 p = "NAMELIST";
881 break;
882 case ST_NULLIFY:
883 p = "NULLIFY";
884 break;
885 case ST_OPEN:
886 p = "OPEN";
887 break;
888 case ST_PROGRAM:
889 p = "PROGRAM";
890 break;
891 case ST_READ:
892 p = "READ";
893 break;
894 case ST_RETURN:
895 p = "RETURN";
896 break;
897 case ST_REWIND:
898 p = "REWIND";
899 break;
900 case ST_STOP:
901 p = "STOP";
902 break;
903 case ST_SUBROUTINE:
904 p = "SUBROUTINE";
905 break;
906 case ST_TYPE:
907 p = "TYPE";
908 break;
909 case ST_USE:
910 p = "USE";
911 break;
912 case ST_WHERE_BLOCK: /* Fall through */
913 case ST_WHERE:
914 p = "WHERE";
915 break;
916 case ST_WRITE:
917 p = "WRITE";
918 break;
919 case ST_ASSIGNMENT:
920 p = "assignment";
921 break;
922 case ST_POINTER_ASSIGNMENT:
923 p = "pointer assignment";
924 break;
925 case ST_SELECT_CASE:
926 p = "SELECT CASE";
927 break;
928 case ST_SEQUENCE:
929 p = "SEQUENCE";
930 break;
931 case ST_SIMPLE_IF:
932 p = "Simple IF";
933 break;
934 case ST_STATEMENT_FUNCTION:
935 p = "STATEMENT FUNCTION";
936 break;
937 case ST_LABEL_ASSIGNMENT:
938 p = "LABEL ASSIGNMENT";
939 break;
940 default:
941 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
944 return p;
948 /* Return the name of a compile state. */
950 const char *
951 gfc_state_name (gfc_compile_state state)
953 const char *p;
955 switch (state)
957 case COMP_PROGRAM:
958 p = "a PROGRAM";
959 break;
960 case COMP_MODULE:
961 p = "a MODULE";
962 break;
963 case COMP_SUBROUTINE:
964 p = "a SUBROUTINE";
965 break;
966 case COMP_FUNCTION:
967 p = "a FUNCTION";
968 break;
969 case COMP_BLOCK_DATA:
970 p = "a BLOCK DATA";
971 break;
972 case COMP_INTERFACE:
973 p = "an INTERFACE";
974 break;
975 case COMP_DERIVED:
976 p = "a DERIVED TYPE block";
977 break;
978 case COMP_IF:
979 p = "an IF-THEN block";
980 break;
981 case COMP_DO:
982 p = "a DO block";
983 break;
984 case COMP_SELECT:
985 p = "a SELECT block";
986 break;
987 case COMP_FORALL:
988 p = "a FORALL block";
989 break;
990 case COMP_WHERE:
991 p = "a WHERE block";
992 break;
993 case COMP_CONTAINS:
994 p = "a contained subprogram";
995 break;
997 default:
998 gfc_internal_error ("gfc_state_name(): Bad state");
1001 return p;
1005 /* Do whatever is necessary to accept the last statement. */
1007 static void
1008 accept_statement (gfc_statement st)
1011 switch (st)
1013 case ST_USE:
1014 gfc_use_module ();
1015 break;
1017 case ST_IMPLICIT_NONE:
1018 gfc_set_implicit_none ();
1019 break;
1021 case ST_IMPLICIT:
1022 break;
1024 case ST_FUNCTION:
1025 case ST_SUBROUTINE:
1026 case ST_MODULE:
1027 gfc_current_ns->proc_name = gfc_new_block;
1028 break;
1030 /* If the statement is the end of a block, lay down a special code
1031 that allows a branch to the end of the block from within the
1032 construct. */
1034 case ST_ENDIF:
1035 case ST_END_SELECT:
1036 if (gfc_statement_label != NULL)
1038 new_st.op = EXEC_NOP;
1039 add_statement ();
1042 break;
1044 /* The end-of-program unit statements do not get the special
1045 marker and require a statement of some sort if they are a
1046 branch target. */
1048 case ST_END_PROGRAM:
1049 case ST_END_FUNCTION:
1050 case ST_END_SUBROUTINE:
1051 if (gfc_statement_label != NULL)
1053 new_st.op = EXEC_RETURN;
1054 add_statement ();
1057 break;
1059 case ST_ENTRY:
1060 case_executable:
1061 case_exec_markers:
1062 add_statement ();
1063 break;
1065 default:
1066 break;
1069 gfc_commit_symbols ();
1070 gfc_warning_check ();
1071 gfc_clear_new_st ();
1075 /* Undo anything tentative that has been built for the current
1076 statement. */
1078 static void
1079 reject_statement (void)
1082 gfc_undo_symbols ();
1083 gfc_clear_warning ();
1084 undo_new_statement ();
1088 /* Generic complaint about an out of order statement. We also do
1089 whatever is necessary to clean up. */
1091 static void
1092 unexpected_statement (gfc_statement st)
1095 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1097 reject_statement ();
1101 /* Given the next statement seen by the matcher, make sure that it is
1102 in proper order with the last. This subroutine is initialized by
1103 calling it with an argument of ST_NONE. If there is a problem, we
1104 issue an error and return FAILURE. Otherwise we return SUCCESS.
1106 Individual parsers need to verify that the statements seen are
1107 valid before calling here, ie ENTRY statements are not allowed in
1108 INTERFACE blocks. The following diagram is taken from the standard:
1110 +---------------------------------------+
1111 | program subroutine function module |
1112 +---------------------------------------+
1113 | use |
1114 |---------------------------------------+
1115 | | implicit none |
1116 | +-----------+------------------+
1117 | | parameter | implicit |
1118 | +-----------+------------------+
1119 | format | | derived type |
1120 | entry | parameter | interface |
1121 | | data | specification |
1122 | | | statement func |
1123 | +-----------+------------------+
1124 | | data | executable |
1125 +--------+-----------+------------------+
1126 | contains |
1127 +---------------------------------------+
1128 | internal module/subprogram |
1129 +---------------------------------------+
1130 | end |
1131 +---------------------------------------+
1135 typedef struct
1137 enum
1138 { ORDER_START, ORDER_USE, ORDER_IMPLICIT_NONE, ORDER_IMPLICIT,
1139 ORDER_SPEC, ORDER_EXEC
1141 state;
1142 gfc_statement last_statement;
1143 locus where;
1145 st_state;
1147 static try
1148 verify_st_order (st_state * p, gfc_statement st)
1151 switch (st)
1153 case ST_NONE:
1154 p->state = ORDER_START;
1155 break;
1157 case ST_USE:
1158 if (p->state > ORDER_USE)
1159 goto order;
1160 p->state = ORDER_USE;
1161 break;
1163 case ST_IMPLICIT_NONE:
1164 if (p->state > ORDER_IMPLICIT_NONE)
1165 goto order;
1167 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1168 statement disqualifies a USE but not an IMPLICIT NONE.
1169 Duplicate IMPLICIT NONEs are caught when the implicit types
1170 are set. */
1172 p->state = ORDER_IMPLICIT_NONE;
1173 break;
1175 case ST_IMPLICIT:
1176 if (p->state > ORDER_IMPLICIT)
1177 goto order;
1178 p->state = ORDER_IMPLICIT;
1179 break;
1181 case ST_FORMAT:
1182 case ST_ENTRY:
1183 if (p->state < ORDER_IMPLICIT_NONE)
1184 p->state = ORDER_IMPLICIT_NONE;
1185 break;
1187 case ST_PARAMETER:
1188 if (p->state >= ORDER_EXEC)
1189 goto order;
1190 if (p->state < ORDER_IMPLICIT)
1191 p->state = ORDER_IMPLICIT;
1192 break;
1194 case ST_DATA:
1195 if (p->state < ORDER_SPEC)
1196 p->state = ORDER_SPEC;
1197 break;
1199 case ST_PUBLIC:
1200 case ST_PRIVATE:
1201 case ST_DERIVED_DECL:
1202 case_decl:
1203 if (p->state >= ORDER_EXEC)
1204 goto order;
1205 if (p->state < ORDER_SPEC)
1206 p->state = ORDER_SPEC;
1207 break;
1209 case_executable:
1210 case_exec_markers:
1211 if (p->state < ORDER_EXEC)
1212 p->state = ORDER_EXEC;
1213 break;
1215 default:
1216 gfc_internal_error
1217 ("Unexpected %s statement in verify_st_order() at %C",
1218 gfc_ascii_statement (st));
1221 /* All is well, record the statement in case we need it next time. */
1222 p->where = gfc_current_locus;
1223 p->last_statement = st;
1224 return SUCCESS;
1226 order:
1227 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1228 gfc_ascii_statement (st),
1229 gfc_ascii_statement (p->last_statement), &p->where);
1231 return FAILURE;
1235 /* Handle an unexpected end of file. This is a show-stopper... */
1237 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1239 static void
1240 unexpected_eof (void)
1242 gfc_state_data *p;
1244 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1246 /* Memory cleanup. Move to "second to last". */
1247 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1248 p = p->previous);
1250 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1251 gfc_done_2 ();
1253 longjmp (eof_buf, 1);
1257 /* Parse a derived type. */
1259 static void
1260 parse_derived (void)
1262 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1263 gfc_statement st;
1264 gfc_component *c;
1265 gfc_state_data s;
1267 error_flag = 0;
1269 accept_statement (ST_DERIVED_DECL);
1270 push_state (&s, COMP_DERIVED, gfc_new_block);
1272 gfc_new_block->component_access = ACCESS_PUBLIC;
1273 seen_private = 0;
1274 seen_sequence = 0;
1275 seen_component = 0;
1277 compiling_type = 1;
1279 while (compiling_type)
1281 st = next_statement ();
1282 switch (st)
1284 case ST_NONE:
1285 unexpected_eof ();
1287 case ST_DATA_DECL:
1288 accept_statement (st);
1289 seen_component = 1;
1290 break;
1292 case ST_END_TYPE:
1293 compiling_type = 0;
1295 if (!seen_component)
1297 gfc_error ("Derived type definition at %C has no components");
1298 error_flag = 1;
1301 accept_statement (ST_END_TYPE);
1302 break;
1304 case ST_PRIVATE:
1305 if (gfc_find_state (COMP_MODULE) == FAILURE)
1307 gfc_error
1308 ("PRIVATE statement in TYPE at %C must be inside a MODULE");
1309 error_flag = 1;
1310 break;
1313 if (seen_component)
1315 gfc_error ("PRIVATE statement at %C must precede "
1316 "structure components");
1317 error_flag = 1;
1318 break;
1321 if (seen_private)
1323 gfc_error ("Duplicate PRIVATE statement at %C");
1324 error_flag = 1;
1327 s.sym->component_access = ACCESS_PRIVATE;
1328 accept_statement (ST_PRIVATE);
1329 seen_private = 1;
1330 break;
1332 case ST_SEQUENCE:
1333 if (seen_component)
1335 gfc_error ("SEQUENCE statement at %C must precede "
1336 "structure components");
1337 error_flag = 1;
1338 break;
1341 if (gfc_current_block ()->attr.sequence)
1342 gfc_warning ("SEQUENCE attribute at %C already specified in "
1343 "TYPE statement");
1345 if (seen_sequence)
1347 gfc_error ("Duplicate SEQUENCE statement at %C");
1348 error_flag = 1;
1351 seen_sequence = 1;
1352 gfc_add_sequence (&gfc_current_block ()->attr,
1353 gfc_current_block ()->name, NULL);
1354 break;
1356 default:
1357 unexpected_statement (st);
1358 break;
1362 /* Sanity checks on the structure. If the structure has the
1363 SEQUENCE attribute, then all component structures must also have
1364 SEQUENCE. */
1365 if (error_flag == 0 && gfc_current_block ()->attr.sequence)
1366 for (c = gfc_current_block ()->components; c; c = c->next)
1368 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
1370 gfc_error
1371 ("Component %s of SEQUENCE type declared at %C does not "
1372 "have the SEQUENCE attribute", c->ts.derived->name);
1376 pop_state ();
1381 /* Parse an interface. We must be able to deal with the possibility
1382 of recursive interfaces. The parse_spec() subroutine is mutually
1383 recursive with parse_interface(). */
1385 static gfc_statement parse_spec (gfc_statement);
1387 static void
1388 parse_interface (void)
1390 gfc_compile_state new_state, current_state;
1391 gfc_symbol *prog_unit, *sym;
1392 gfc_interface_info save;
1393 gfc_state_data s1, s2;
1394 gfc_statement st;
1396 accept_statement (ST_INTERFACE);
1398 current_interface.ns = gfc_current_ns;
1399 save = current_interface;
1401 sym = (current_interface.type == INTERFACE_GENERIC
1402 || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
1404 push_state (&s1, COMP_INTERFACE, sym);
1405 current_state = COMP_NONE;
1407 loop:
1408 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
1410 st = next_statement ();
1411 switch (st)
1413 case ST_NONE:
1414 unexpected_eof ();
1416 case ST_SUBROUTINE:
1417 new_state = COMP_SUBROUTINE;
1418 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1419 gfc_new_block->formal, NULL);
1420 break;
1422 case ST_FUNCTION:
1423 new_state = COMP_FUNCTION;
1424 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1425 gfc_new_block->formal, NULL);
1426 break;
1428 case ST_MODULE_PROC: /* The module procedure matcher makes
1429 sure the context is correct. */
1430 accept_statement (st);
1431 gfc_free_namespace (gfc_current_ns);
1432 goto loop;
1434 case ST_END_INTERFACE:
1435 gfc_free_namespace (gfc_current_ns);
1436 gfc_current_ns = current_interface.ns;
1437 goto done;
1439 default:
1440 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1441 gfc_ascii_statement (st));
1442 reject_statement ();
1443 gfc_free_namespace (gfc_current_ns);
1444 goto loop;
1448 /* Make sure that a generic interface has only subroutines or
1449 functions and that the generic name has the right attribute. */
1450 if (current_interface.type == INTERFACE_GENERIC)
1452 if (current_state == COMP_NONE)
1454 if (new_state == COMP_FUNCTION)
1455 gfc_add_function (&sym->attr, sym->name, NULL);
1456 else if (new_state == COMP_SUBROUTINE)
1457 gfc_add_subroutine (&sym->attr, sym->name, NULL);
1459 current_state = new_state;
1461 else
1463 if (new_state != current_state)
1465 if (new_state == COMP_SUBROUTINE)
1466 gfc_error
1467 ("SUBROUTINE at %C does not belong in a generic function "
1468 "interface");
1470 if (new_state == COMP_FUNCTION)
1471 gfc_error
1472 ("FUNCTION at %C does not belong in a generic subroutine "
1473 "interface");
1478 push_state (&s2, new_state, gfc_new_block);
1479 accept_statement (st);
1480 prog_unit = gfc_new_block;
1481 prog_unit->formal_ns = gfc_current_ns;
1483 decl:
1484 /* Read data declaration statements. */
1485 st = parse_spec (ST_NONE);
1487 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1489 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1490 gfc_ascii_statement (st));
1491 reject_statement ();
1492 goto decl;
1495 current_interface = save;
1496 gfc_add_interface (prog_unit);
1498 pop_state ();
1499 goto loop;
1501 done:
1502 pop_state ();
1506 /* Parse a set of specification statements. Returns the statement
1507 that doesn't fit. */
1509 static gfc_statement
1510 parse_spec (gfc_statement st)
1512 st_state ss;
1514 verify_st_order (&ss, ST_NONE);
1515 if (st == ST_NONE)
1516 st = next_statement ();
1518 loop:
1519 switch (st)
1521 case ST_NONE:
1522 unexpected_eof ();
1524 case ST_FORMAT:
1525 case ST_ENTRY:
1526 case ST_DATA: /* Not allowed in interfaces */
1527 if (gfc_current_state () == COMP_INTERFACE)
1528 break;
1530 /* Fall through */
1532 case ST_USE:
1533 case ST_IMPLICIT_NONE:
1534 case ST_IMPLICIT:
1535 case ST_PARAMETER:
1536 case ST_PUBLIC:
1537 case ST_PRIVATE:
1538 case ST_DERIVED_DECL:
1539 case_decl:
1540 if (verify_st_order (&ss, st) == FAILURE)
1542 reject_statement ();
1543 st = next_statement ();
1544 goto loop;
1547 switch (st)
1549 case ST_INTERFACE:
1550 parse_interface ();
1551 break;
1553 case ST_DERIVED_DECL:
1554 parse_derived ();
1555 break;
1557 case ST_PUBLIC:
1558 case ST_PRIVATE:
1559 if (gfc_current_state () != COMP_MODULE)
1561 gfc_error ("%s statement must appear in a MODULE",
1562 gfc_ascii_statement (st));
1563 break;
1566 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1568 gfc_error ("%s statement at %C follows another accessibility "
1569 "specification", gfc_ascii_statement (st));
1570 break;
1573 gfc_current_ns->default_access = (st == ST_PUBLIC)
1574 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1576 break;
1578 default:
1579 break;
1582 accept_statement (st);
1583 st = next_statement ();
1584 goto loop;
1586 default:
1587 break;
1590 return st;
1594 /* Parse a WHERE block, (not a simple WHERE statement). */
1596 static void
1597 parse_where_block (void)
1599 int seen_empty_else;
1600 gfc_code *top, *d;
1601 gfc_state_data s;
1602 gfc_statement st;
1604 accept_statement (ST_WHERE_BLOCK);
1605 top = gfc_state_stack->tail;
1607 push_state (&s, COMP_WHERE, gfc_new_block);
1609 d = add_statement ();
1610 d->expr = top->expr;
1611 d->op = EXEC_WHERE;
1613 top->expr = NULL;
1614 top->block = d;
1616 seen_empty_else = 0;
1620 st = next_statement ();
1621 switch (st)
1623 case ST_NONE:
1624 unexpected_eof ();
1626 case ST_WHERE_BLOCK:
1627 parse_where_block ();
1628 /* Fall through */
1630 case ST_ASSIGNMENT:
1631 case ST_WHERE:
1632 accept_statement (st);
1633 break;
1635 case ST_ELSEWHERE:
1636 if (seen_empty_else)
1638 gfc_error
1639 ("ELSEWHERE statement at %C follows previous unmasked "
1640 "ELSEWHERE");
1641 break;
1644 if (new_st.expr == NULL)
1645 seen_empty_else = 1;
1647 d = new_level (gfc_state_stack->head);
1648 d->op = EXEC_WHERE;
1649 d->expr = new_st.expr;
1651 accept_statement (st);
1653 break;
1655 case ST_END_WHERE:
1656 accept_statement (st);
1657 break;
1659 default:
1660 gfc_error ("Unexpected %s statement in WHERE block at %C",
1661 gfc_ascii_statement (st));
1662 reject_statement ();
1663 break;
1667 while (st != ST_END_WHERE);
1669 pop_state ();
1673 /* Parse a FORALL block (not a simple FORALL statement). */
1675 static void
1676 parse_forall_block (void)
1678 gfc_code *top, *d;
1679 gfc_state_data s;
1680 gfc_statement st;
1682 accept_statement (ST_FORALL_BLOCK);
1683 top = gfc_state_stack->tail;
1685 push_state (&s, COMP_FORALL, gfc_new_block);
1687 d = add_statement ();
1688 d->op = EXEC_FORALL;
1689 top->block = d;
1693 st = next_statement ();
1694 switch (st)
1697 case ST_ASSIGNMENT:
1698 case ST_POINTER_ASSIGNMENT:
1699 case ST_WHERE:
1700 case ST_FORALL:
1701 accept_statement (st);
1702 break;
1704 case ST_WHERE_BLOCK:
1705 parse_where_block ();
1706 break;
1708 case ST_FORALL_BLOCK:
1709 parse_forall_block ();
1710 break;
1712 case ST_END_FORALL:
1713 accept_statement (st);
1714 break;
1716 case ST_NONE:
1717 unexpected_eof ();
1719 default:
1720 gfc_error ("Unexpected %s statement in FORALL block at %C",
1721 gfc_ascii_statement (st));
1723 reject_statement ();
1724 break;
1727 while (st != ST_END_FORALL);
1729 pop_state ();
1733 static gfc_statement parse_executable (gfc_statement);
1735 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
1737 static void
1738 parse_if_block (void)
1740 gfc_code *top, *d;
1741 gfc_statement st;
1742 locus else_locus;
1743 gfc_state_data s;
1744 int seen_else;
1746 seen_else = 0;
1747 accept_statement (ST_IF_BLOCK);
1749 top = gfc_state_stack->tail;
1750 push_state (&s, COMP_IF, gfc_new_block);
1752 new_st.op = EXEC_IF;
1753 d = add_statement ();
1755 d->expr = top->expr;
1756 top->expr = NULL;
1757 top->block = d;
1761 st = parse_executable (ST_NONE);
1763 switch (st)
1765 case ST_NONE:
1766 unexpected_eof ();
1768 case ST_ELSEIF:
1769 if (seen_else)
1771 gfc_error
1772 ("ELSE IF statement at %C cannot follow ELSE statement at %L",
1773 &else_locus);
1775 reject_statement ();
1776 break;
1779 d = new_level (gfc_state_stack->head);
1780 d->op = EXEC_IF;
1781 d->expr = new_st.expr;
1783 accept_statement (st);
1785 break;
1787 case ST_ELSE:
1788 if (seen_else)
1790 gfc_error ("Duplicate ELSE statements at %L and %C",
1791 &else_locus);
1792 reject_statement ();
1793 break;
1796 seen_else = 1;
1797 else_locus = gfc_current_locus;
1799 d = new_level (gfc_state_stack->head);
1800 d->op = EXEC_IF;
1802 accept_statement (st);
1804 break;
1806 case ST_ENDIF:
1807 break;
1809 default:
1810 unexpected_statement (st);
1811 break;
1814 while (st != ST_ENDIF);
1816 pop_state ();
1817 accept_statement (st);
1821 /* Parse a SELECT block. */
1823 static void
1824 parse_select_block (void)
1826 gfc_statement st;
1827 gfc_code *cp;
1828 gfc_state_data s;
1830 accept_statement (ST_SELECT_CASE);
1832 cp = gfc_state_stack->tail;
1833 push_state (&s, COMP_SELECT, gfc_new_block);
1835 /* Make sure that the next statement is a CASE or END SELECT. */
1836 for (;;)
1838 st = next_statement ();
1839 if (st == ST_NONE)
1840 unexpected_eof ();
1841 if (st == ST_END_SELECT)
1843 /* Empty SELECT CASE is OK. */
1844 accept_statement (st);
1845 pop_state ();
1846 return;
1848 if (st == ST_CASE)
1849 break;
1851 gfc_error
1852 ("Expected a CASE or END SELECT statement following SELECT CASE "
1853 "at %C");
1855 reject_statement ();
1858 /* At this point, we're got a nonempty select block. */
1859 cp = new_level (cp);
1860 *cp = new_st;
1862 accept_statement (st);
1866 st = parse_executable (ST_NONE);
1867 switch (st)
1869 case ST_NONE:
1870 unexpected_eof ();
1872 case ST_CASE:
1873 cp = new_level (gfc_state_stack->head);
1874 *cp = new_st;
1875 gfc_clear_new_st ();
1877 accept_statement (st);
1878 /* Fall through */
1880 case ST_END_SELECT:
1881 break;
1883 /* Can't have an executable statement because of
1884 parse_executable(). */
1885 default:
1886 unexpected_statement (st);
1887 break;
1890 while (st != ST_END_SELECT);
1892 pop_state ();
1893 accept_statement (st);
1897 /* Given a symbol, make sure it is not an iteration variable for a DO
1898 statement. This subroutine is called when the symbol is seen in a
1899 context that causes it to become redefined. If the symbol is an
1900 iterator, we generate an error message and return nonzero. */
1902 int
1903 gfc_check_do_variable (gfc_symtree *st)
1905 gfc_state_data *s;
1907 for (s=gfc_state_stack; s; s = s->previous)
1908 if (s->do_variable == st)
1910 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
1911 "loop beginning at %L", st->name, &s->head->loc);
1912 return 1;
1915 return 0;
1919 /* Checks to see if the current statement label closes an enddo.
1920 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
1921 an error) if it incorrectly closes an ENDDO. */
1923 static int
1924 check_do_closure (void)
1926 gfc_state_data *p;
1928 if (gfc_statement_label == NULL)
1929 return 0;
1931 for (p = gfc_state_stack; p; p = p->previous)
1932 if (p->state == COMP_DO)
1933 break;
1935 if (p == NULL)
1936 return 0; /* No loops to close */
1938 if (p->ext.end_do_label == gfc_statement_label)
1941 if (p == gfc_state_stack)
1942 return 1;
1944 gfc_error
1945 ("End of nonblock DO statement at %C is within another block");
1946 return 2;
1949 /* At this point, the label doesn't terminate the innermost loop.
1950 Make sure it doesn't terminate another one. */
1951 for (; p; p = p->previous)
1952 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
1954 gfc_error ("End of nonblock DO statement at %C is interwoven "
1955 "with another DO loop");
1956 return 2;
1959 return 0;
1963 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
1964 handled inside of parse_executable(), because they aren't really
1965 loop statements. */
1967 static void
1968 parse_do_block (void)
1970 gfc_statement st;
1971 gfc_code *top;
1972 gfc_state_data s;
1973 gfc_symtree *stree;
1975 s.ext.end_do_label = new_st.label;
1977 if (new_st.ext.iterator != NULL)
1978 stree = new_st.ext.iterator->var->symtree;
1979 else
1980 stree = NULL;
1982 accept_statement (ST_DO);
1984 top = gfc_state_stack->tail;
1985 push_state (&s, COMP_DO, gfc_new_block);
1987 s.do_variable = stree;
1989 top->block = new_level (top);
1990 top->block->op = EXEC_DO;
1992 loop:
1993 st = parse_executable (ST_NONE);
1995 switch (st)
1997 case ST_NONE:
1998 unexpected_eof ();
2000 case ST_ENDDO:
2001 if (s.ext.end_do_label != NULL
2002 && s.ext.end_do_label != gfc_statement_label)
2003 gfc_error_now
2004 ("Statement label in ENDDO at %C doesn't match DO label");
2006 if (gfc_statement_label != NULL)
2008 new_st.op = EXEC_NOP;
2009 add_statement ();
2011 break;
2013 case ST_IMPLIED_ENDDO:
2014 break;
2016 default:
2017 unexpected_statement (st);
2018 goto loop;
2021 pop_state ();
2022 accept_statement (st);
2026 /* Accept a series of executable statements. We return the first
2027 statement that doesn't fit to the caller. Any block statements are
2028 passed on to the correct handler, which usually passes the buck
2029 right back here. */
2031 static gfc_statement
2032 parse_executable (gfc_statement st)
2034 int close_flag;
2036 if (st == ST_NONE)
2037 st = next_statement ();
2039 for (;; st = next_statement ())
2042 close_flag = check_do_closure ();
2043 if (close_flag)
2044 switch (st)
2046 case ST_GOTO:
2047 case ST_END_PROGRAM:
2048 case ST_RETURN:
2049 case ST_EXIT:
2050 case ST_END_FUNCTION:
2051 case ST_CYCLE:
2052 case ST_PAUSE:
2053 case ST_STOP:
2054 case ST_END_SUBROUTINE:
2056 case ST_DO:
2057 case ST_FORALL:
2058 case ST_WHERE:
2059 case ST_SELECT_CASE:
2060 gfc_error
2061 ("%s statement at %C cannot terminate a non-block DO loop",
2062 gfc_ascii_statement (st));
2063 break;
2065 default:
2066 break;
2069 switch (st)
2071 case ST_NONE:
2072 unexpected_eof ();
2074 case ST_FORMAT:
2075 case ST_DATA:
2076 case ST_ENTRY:
2077 case_executable:
2078 accept_statement (st);
2079 if (close_flag == 1)
2080 return ST_IMPLIED_ENDDO;
2081 continue;
2083 case ST_IF_BLOCK:
2084 parse_if_block ();
2085 continue;
2087 case ST_SELECT_CASE:
2088 parse_select_block ();
2089 continue;
2091 case ST_DO:
2092 parse_do_block ();
2093 if (check_do_closure () == 1)
2094 return ST_IMPLIED_ENDDO;
2095 continue;
2097 case ST_WHERE_BLOCK:
2098 parse_where_block ();
2099 continue;
2101 case ST_FORALL_BLOCK:
2102 parse_forall_block ();
2103 continue;
2105 default:
2106 break;
2109 break;
2112 return st;
2116 /* Parse a series of contained program units. */
2118 static void parse_progunit (gfc_statement);
2121 /* Fix the symbols for sibling functions. These are incorrectly added to
2122 the child namespace as the parser didn't know about this procedure. */
2124 static void
2125 gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
2127 gfc_namespace *ns;
2128 gfc_symtree *st;
2129 gfc_symbol *old_sym;
2131 sym->attr.referenced = 1;
2132 for (ns = siblings; ns; ns = ns->sibling)
2134 gfc_find_sym_tree (sym->name, ns, 0, &st);
2135 if (!st)
2136 continue;
2138 old_sym = st->n.sym;
2139 if ((old_sym->attr.flavor == FL_PROCEDURE
2140 || old_sym->ts.type == BT_UNKNOWN)
2141 && old_sym->ns == ns
2142 && ! old_sym->attr.contained)
2144 /* Replace it with the symbol from the parent namespace. */
2145 st->n.sym = sym;
2146 sym->refs++;
2148 /* Free the old (local) symbol. */
2149 old_sym->refs--;
2150 if (old_sym->refs == 0)
2151 gfc_free_symbol (old_sym);
2154 /* Do the same for any contined procedures. */
2155 gfc_fixup_sibling_symbols (sym, ns->contained);
2159 static void
2160 parse_contained (int module)
2162 gfc_namespace *ns, *parent_ns;
2163 gfc_state_data s1, s2;
2164 gfc_statement st;
2165 gfc_symbol *sym;
2166 gfc_entry_list *el;
2168 push_state (&s1, COMP_CONTAINS, NULL);
2169 parent_ns = gfc_current_ns;
2173 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
2175 gfc_current_ns->sibling = parent_ns->contained;
2176 parent_ns->contained = gfc_current_ns;
2178 st = next_statement ();
2180 switch (st)
2182 case ST_NONE:
2183 unexpected_eof ();
2185 case ST_FUNCTION:
2186 case ST_SUBROUTINE:
2187 accept_statement (st);
2189 push_state (&s2,
2190 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2191 gfc_new_block);
2193 /* For internal procedures, create/update the symbol in the
2194 parent namespace. */
2196 if (!module)
2198 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2199 gfc_error
2200 ("Contained procedure '%s' at %C is already ambiguous",
2201 gfc_new_block->name);
2202 else
2204 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
2205 &gfc_new_block->declared_at) ==
2206 SUCCESS)
2208 if (st == ST_FUNCTION)
2209 gfc_add_function (&sym->attr, sym->name,
2210 &gfc_new_block->declared_at);
2211 else
2212 gfc_add_subroutine (&sym->attr, sym->name,
2213 &gfc_new_block->declared_at);
2217 gfc_commit_symbols ();
2219 else
2220 sym = gfc_new_block;
2222 /* Mark this as a contained function, so it isn't replaced
2223 by other module functions. */
2224 sym->attr.contained = 1;
2225 sym->attr.referenced = 1;
2227 parse_progunit (ST_NONE);
2229 /* Fix up any sibling functions that refer to this one. */
2230 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2231 /* Or refer to any of its alternate entry points. */
2232 for (el = gfc_current_ns->entries; el; el = el->next)
2233 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
2235 gfc_current_ns->code = s2.head;
2236 gfc_current_ns = parent_ns;
2238 pop_state ();
2239 break;
2241 /* These statements are associated with the end of the host
2242 unit. */
2243 case ST_END_FUNCTION:
2244 case ST_END_MODULE:
2245 case ST_END_PROGRAM:
2246 case ST_END_SUBROUTINE:
2247 accept_statement (st);
2248 break;
2250 default:
2251 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2252 gfc_ascii_statement (st));
2253 reject_statement ();
2254 break;
2257 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2258 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2260 /* The first namespace in the list is guaranteed to not have
2261 anything (worthwhile) in it. */
2263 gfc_current_ns = parent_ns;
2265 ns = gfc_current_ns->contained;
2266 gfc_current_ns->contained = ns->sibling;
2267 gfc_free_namespace (ns);
2269 pop_state ();
2273 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2275 static void
2276 parse_progunit (gfc_statement st)
2278 gfc_state_data *p;
2279 int n;
2281 st = parse_spec (st);
2282 switch (st)
2284 case ST_NONE:
2285 unexpected_eof ();
2287 case ST_CONTAINS:
2288 goto contains;
2290 case_end:
2291 accept_statement (st);
2292 goto done;
2294 default:
2295 break;
2298 loop:
2299 for (;;)
2301 st = parse_executable (st);
2303 switch (st)
2305 case ST_NONE:
2306 unexpected_eof ();
2308 case ST_CONTAINS:
2309 goto contains;
2311 case_end:
2312 accept_statement (st);
2313 goto done;
2315 default:
2316 break;
2319 unexpected_statement (st);
2320 reject_statement ();
2321 st = next_statement ();
2324 contains:
2325 n = 0;
2327 for (p = gfc_state_stack; p; p = p->previous)
2328 if (p->state == COMP_CONTAINS)
2329 n++;
2331 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2332 n--;
2334 if (n > 0)
2336 gfc_error ("CONTAINS statement at %C is already in a contained "
2337 "program unit");
2338 st = next_statement ();
2339 goto loop;
2342 parse_contained (0);
2344 done:
2345 gfc_current_ns->code = gfc_state_stack->head;
2349 /* Come here to complain about a global symbol already in use as
2350 something else. */
2352 static void
2353 global_used (gfc_gsymbol *sym, locus *where)
2355 const char *name;
2357 if (where == NULL)
2358 where = &gfc_current_locus;
2360 switch(sym->type)
2362 case GSYM_PROGRAM:
2363 name = "PROGRAM";
2364 break;
2365 case GSYM_FUNCTION:
2366 name = "FUNCTION";
2367 break;
2368 case GSYM_SUBROUTINE:
2369 name = "SUBROUTINE";
2370 break;
2371 case GSYM_COMMON:
2372 name = "COMMON";
2373 break;
2374 case GSYM_BLOCK_DATA:
2375 name = "BLOCK DATA";
2376 break;
2377 case GSYM_MODULE:
2378 name = "MODULE";
2379 break;
2380 default:
2381 gfc_internal_error ("gfc_gsymbol_type(): Bad type");
2382 name = NULL;
2385 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
2386 gfc_new_block->name, where, name, &sym->where);
2390 /* Parse a block data program unit. */
2392 static void
2393 parse_block_data (void)
2395 gfc_statement st;
2396 static locus blank_locus;
2397 static int blank_block=0;
2398 gfc_gsymbol *s;
2400 gfc_current_ns->proc_name = gfc_new_block;
2401 gfc_current_ns->is_block_data = 1;
2403 if (gfc_new_block == NULL)
2405 if (blank_block)
2406 gfc_error ("Blank BLOCK DATA at %C conflicts with "
2407 "prior BLOCK DATA at %L", &blank_locus);
2408 else
2410 blank_block = 1;
2411 blank_locus = gfc_current_locus;
2414 else
2416 s = gfc_get_gsymbol (gfc_new_block->name);
2417 if (s->type != GSYM_UNKNOWN)
2418 global_used(s, NULL);
2419 else
2421 s->type = GSYM_BLOCK_DATA;
2422 s->where = gfc_current_locus;
2426 st = parse_spec (ST_NONE);
2428 while (st != ST_END_BLOCK_DATA)
2430 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
2431 gfc_ascii_statement (st));
2432 reject_statement ();
2433 st = next_statement ();
2438 /* Parse a module subprogram. */
2440 static void
2441 parse_module (void)
2443 gfc_statement st;
2444 gfc_gsymbol *s;
2446 s = gfc_get_gsymbol (gfc_new_block->name);
2447 if (s->type != GSYM_UNKNOWN)
2448 global_used(s, NULL);
2449 else
2451 s->type = GSYM_MODULE;
2452 s->where = gfc_current_locus;
2455 st = parse_spec (ST_NONE);
2457 loop:
2458 switch (st)
2460 case ST_NONE:
2461 unexpected_eof ();
2463 case ST_CONTAINS:
2464 parse_contained (1);
2465 break;
2467 case ST_END_MODULE:
2468 accept_statement (st);
2469 break;
2471 default:
2472 gfc_error ("Unexpected %s statement in MODULE at %C",
2473 gfc_ascii_statement (st));
2475 reject_statement ();
2476 st = next_statement ();
2477 goto loop;
2482 /* Add a procedure name to the global symbol table. */
2484 static void
2485 add_global_procedure (int sub)
2487 gfc_gsymbol *s;
2489 s = gfc_get_gsymbol(gfc_new_block->name);
2491 if (s->type != GSYM_UNKNOWN)
2492 global_used(s, NULL);
2493 else
2495 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2496 s->where = gfc_current_locus;
2501 /* Add a program to the global symbol table. */
2503 static void
2504 add_global_program (void)
2506 gfc_gsymbol *s;
2508 if (gfc_new_block == NULL)
2509 return;
2510 s = gfc_get_gsymbol (gfc_new_block->name);
2512 if (s->type != GSYM_UNKNOWN)
2513 global_used(s, NULL);
2514 else
2516 s->type = GSYM_PROGRAM;
2517 s->where = gfc_current_locus;
2522 /* Top level parser. */
2525 gfc_parse_file (void)
2527 int seen_program, errors_before, errors;
2528 gfc_state_data top, s;
2529 gfc_statement st;
2530 locus prog_locus;
2532 top.state = COMP_NONE;
2533 top.sym = NULL;
2534 top.previous = NULL;
2535 top.head = top.tail = NULL;
2536 top.do_variable = NULL;
2538 gfc_state_stack = &top;
2540 gfc_clear_new_st ();
2542 gfc_statement_label = NULL;
2544 if (setjmp (eof_buf))
2545 return FAILURE; /* Come here on unexpected EOF */
2547 seen_program = 0;
2549 loop:
2550 gfc_init_2 ();
2551 st = next_statement ();
2552 switch (st)
2554 case ST_NONE:
2555 gfc_done_2 ();
2556 goto done;
2558 case ST_PROGRAM:
2559 if (seen_program)
2560 goto duplicate_main;
2561 seen_program = 1;
2562 prog_locus = gfc_current_locus;
2564 push_state (&s, COMP_PROGRAM, gfc_new_block);
2565 accept_statement (st);
2566 add_global_program ();
2567 parse_progunit (ST_NONE);
2568 break;
2570 case ST_SUBROUTINE:
2571 add_global_procedure (1);
2572 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
2573 accept_statement (st);
2574 parse_progunit (ST_NONE);
2575 break;
2577 case ST_FUNCTION:
2578 add_global_procedure (0);
2579 push_state (&s, COMP_FUNCTION, gfc_new_block);
2580 accept_statement (st);
2581 parse_progunit (ST_NONE);
2582 break;
2584 case ST_BLOCK_DATA:
2585 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
2586 accept_statement (st);
2587 parse_block_data ();
2588 break;
2590 case ST_MODULE:
2591 push_state (&s, COMP_MODULE, gfc_new_block);
2592 accept_statement (st);
2594 gfc_get_errors (NULL, &errors_before);
2595 parse_module ();
2596 break;
2598 /* Anything else starts a nameless main program block. */
2599 default:
2600 if (seen_program)
2601 goto duplicate_main;
2602 seen_program = 1;
2603 prog_locus = gfc_current_locus;
2605 push_state (&s, COMP_PROGRAM, gfc_new_block);
2606 parse_progunit (st);
2607 break;
2610 gfc_current_ns->code = s.head;
2612 gfc_resolve (gfc_current_ns);
2614 /* Dump the parse tree if requested. */
2615 if (gfc_option.verbose)
2616 gfc_show_namespace (gfc_current_ns);
2618 gfc_get_errors (NULL, &errors);
2619 if (s.state == COMP_MODULE)
2621 gfc_dump_module (s.sym->name, errors_before == errors);
2622 if (errors == 0 && ! gfc_option.flag_no_backend)
2623 gfc_generate_module_code (gfc_current_ns);
2625 else
2627 if (errors == 0 && ! gfc_option.flag_no_backend)
2628 gfc_generate_code (gfc_current_ns);
2631 pop_state ();
2632 gfc_done_2 ();
2633 goto loop;
2635 done:
2636 return SUCCESS;
2638 duplicate_main:
2639 /* If we see a duplicate main program, shut down. If the second
2640 instance is an implied main program, ie data decls or executable
2641 statements, we're in for lots of errors. */
2642 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
2643 reject_statement ();
2644 gfc_done_2 ();
2645 return SUCCESS;