2005-01-13 Michael Koch <konqueror@gmx.de>
[official-gcc.git] / gcc / fortran / parse.c
blob8b8aa5af4a0223fce8cb858fd85a89df8435e682
1 /* Main parser.
2 Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
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
10 version.
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
15 for more details.
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
20 02111-1307, USA. */
23 #include "config.h"
24 #include <string.h>
25 #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;
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;
554 gfc_state_stack = p;
558 /* Pop the current state. */
560 static void
561 pop_state (void)
564 gfc_state_stack = gfc_state_stack->previous;
568 /* Try to find the given state in the state stack. */
571 gfc_find_state (gfc_compile_state state)
573 gfc_state_data *p;
575 for (p = gfc_state_stack; p; p = p->previous)
576 if (p->state == state)
577 break;
579 return (p == NULL) ? FAILURE : SUCCESS;
583 /* Starts a new level in the statement list. */
585 static gfc_code *
586 new_level (gfc_code * q)
588 gfc_code *p;
590 p = q->block = gfc_get_code ();
592 gfc_state_stack->head = gfc_state_stack->tail = p;
594 return p;
598 /* Add the current new_st code structure and adds it to the current
599 program unit. As a side-effect, it zeroes the new_st. */
601 static gfc_code *
602 add_statement (void)
604 gfc_code *p;
606 p = gfc_get_code ();
607 *p = new_st;
609 p->loc = gfc_current_locus;
611 if (gfc_state_stack->head == NULL)
612 gfc_state_stack->head = p;
613 else
614 gfc_state_stack->tail->next = p;
616 while (p->next != NULL)
617 p = p->next;
619 gfc_state_stack->tail = p;
621 gfc_clear_new_st ();
623 return p;
627 /* Frees everything associated with the current statement. */
629 static void
630 undo_new_statement (void)
632 gfc_free_statements (new_st.block);
633 gfc_free_statements (new_st.next);
634 gfc_free_statement (&new_st);
635 gfc_clear_new_st ();
639 /* If the current statement has a statement label, make sure that it
640 is allowed to, or should have one. */
642 static void
643 check_statement_label (gfc_statement st)
645 gfc_sl_type type;
647 if (gfc_statement_label == NULL)
649 if (st == ST_FORMAT)
650 gfc_error ("FORMAT statement at %L does not have a statement label",
651 &new_st.loc);
652 return;
655 switch (st)
657 case ST_END_PROGRAM:
658 case ST_END_FUNCTION:
659 case ST_END_SUBROUTINE:
660 case ST_ENDDO:
661 case ST_ENDIF:
662 case ST_END_SELECT:
663 case_executable:
664 case_exec_markers:
665 type = ST_LABEL_TARGET;
666 break;
668 case ST_FORMAT:
669 type = ST_LABEL_FORMAT;
670 break;
672 /* Statement labels are not restricted from appearing on a
673 particular line. However, there are plenty of situations
674 where the resulting label can't be referenced. */
676 default:
677 type = ST_LABEL_BAD_TARGET;
678 break;
681 gfc_define_st_label (gfc_statement_label, type, &label_locus);
683 new_st.here = gfc_statement_label;
687 /* Figures out what the enclosing program unit is. This will be a
688 function, subroutine, program, block data or module. */
690 gfc_state_data *
691 gfc_enclosing_unit (gfc_compile_state * result)
693 gfc_state_data *p;
695 for (p = gfc_state_stack; p; p = p->previous)
696 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
697 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
698 || p->state == COMP_PROGRAM)
701 if (result != NULL)
702 *result = p->state;
703 return p;
706 if (result != NULL)
707 *result = COMP_PROGRAM;
708 return NULL;
712 /* Translate a statement enum to a string. */
714 const char *
715 gfc_ascii_statement (gfc_statement st)
717 const char *p;
719 switch (st)
721 case ST_ARITHMETIC_IF:
722 p = "arithmetic IF";
723 break;
724 case ST_ALLOCATE:
725 p = "ALLOCATE";
726 break;
727 case ST_ATTR_DECL:
728 p = "attribute declaration";
729 break;
730 case ST_BACKSPACE:
731 p = "BACKSPACE";
732 break;
733 case ST_BLOCK_DATA:
734 p = "BLOCK DATA";
735 break;
736 case ST_CALL:
737 p = "CALL";
738 break;
739 case ST_CASE:
740 p = "CASE";
741 break;
742 case ST_CLOSE:
743 p = "CLOSE";
744 break;
745 case ST_COMMON:
746 p = "COMMON";
747 break;
748 case ST_CONTINUE:
749 p = "CONTINUE";
750 break;
751 case ST_CONTAINS:
752 p = "CONTAINS";
753 break;
754 case ST_CYCLE:
755 p = "CYCLE";
756 break;
757 case ST_DATA_DECL:
758 p = "data declaration";
759 break;
760 case ST_DATA:
761 p = "DATA";
762 break;
763 case ST_DEALLOCATE:
764 p = "DEALLOCATE";
765 break;
766 case ST_DERIVED_DECL:
767 p = "Derived type declaration";
768 break;
769 case ST_DO:
770 p = "DO";
771 break;
772 case ST_ELSE:
773 p = "ELSE";
774 break;
775 case ST_ELSEIF:
776 p = "ELSE IF";
777 break;
778 case ST_ELSEWHERE:
779 p = "ELSEWHERE";
780 break;
781 case ST_END_BLOCK_DATA:
782 p = "END BLOCK DATA";
783 break;
784 case ST_ENDDO:
785 p = "END DO";
786 break;
787 case ST_END_FILE:
788 p = "END FILE";
789 break;
790 case ST_END_FORALL:
791 p = "END FORALL";
792 break;
793 case ST_END_FUNCTION:
794 p = "END FUNCTION";
795 break;
796 case ST_ENDIF:
797 p = "END IF";
798 break;
799 case ST_END_INTERFACE:
800 p = "END INTERFACE";
801 break;
802 case ST_END_MODULE:
803 p = "END MODULE";
804 break;
805 case ST_END_PROGRAM:
806 p = "END PROGRAM";
807 break;
808 case ST_END_SELECT:
809 p = "END SELECT";
810 break;
811 case ST_END_SUBROUTINE:
812 p = "END SUBROUTINE";
813 break;
814 case ST_END_WHERE:
815 p = "END WHERE";
816 break;
817 case ST_END_TYPE:
818 p = "END TYPE";
819 break;
820 case ST_ENTRY:
821 p = "ENTRY";
822 break;
823 case ST_EQUIVALENCE:
824 p = "EQUIVALENCE";
825 break;
826 case ST_EXIT:
827 p = "EXIT";
828 break;
829 case ST_FORALL_BLOCK: /* Fall through */
830 case ST_FORALL:
831 p = "FORALL";
832 break;
833 case ST_FORMAT:
834 p = "FORMAT";
835 break;
836 case ST_FUNCTION:
837 p = "FUNCTION";
838 break;
839 case ST_GOTO:
840 p = "GOTO";
841 break;
842 case ST_IF_BLOCK:
843 p = "block IF";
844 break;
845 case ST_IMPLICIT:
846 p = "IMPLICIT";
847 break;
848 case ST_IMPLICIT_NONE:
849 p = "IMPLICIT NONE";
850 break;
851 case ST_IMPLIED_ENDDO:
852 p = "implied END DO";
853 break;
854 case ST_INQUIRE:
855 p = "INQUIRE";
856 break;
857 case ST_INTERFACE:
858 p = "INTERFACE";
859 break;
860 case ST_PARAMETER:
861 p = "PARAMETER";
862 break;
863 case ST_PRIVATE:
864 p = "PRIVATE";
865 break;
866 case ST_PUBLIC:
867 p = "PUBLIC";
868 break;
869 case ST_MODULE:
870 p = "MODULE";
871 break;
872 case ST_PAUSE:
873 p = "PAUSE";
874 break;
875 case ST_MODULE_PROC:
876 p = "MODULE PROCEDURE";
877 break;
878 case ST_NAMELIST:
879 p = "NAMELIST";
880 break;
881 case ST_NULLIFY:
882 p = "NULLIFY";
883 break;
884 case ST_OPEN:
885 p = "OPEN";
886 break;
887 case ST_PROGRAM:
888 p = "PROGRAM";
889 break;
890 case ST_READ:
891 p = "READ";
892 break;
893 case ST_RETURN:
894 p = "RETURN";
895 break;
896 case ST_REWIND:
897 p = "REWIND";
898 break;
899 case ST_STOP:
900 p = "STOP";
901 break;
902 case ST_SUBROUTINE:
903 p = "SUBROUTINE";
904 break;
905 case ST_TYPE:
906 p = "TYPE";
907 break;
908 case ST_USE:
909 p = "USE";
910 break;
911 case ST_WHERE_BLOCK: /* Fall through */
912 case ST_WHERE:
913 p = "WHERE";
914 break;
915 case ST_WRITE:
916 p = "WRITE";
917 break;
918 case ST_ASSIGNMENT:
919 p = "assignment";
920 break;
921 case ST_POINTER_ASSIGNMENT:
922 p = "pointer assignment";
923 break;
924 case ST_SELECT_CASE:
925 p = "SELECT CASE";
926 break;
927 case ST_SEQUENCE:
928 p = "SEQUENCE";
929 break;
930 case ST_SIMPLE_IF:
931 p = "Simple IF";
932 break;
933 case ST_STATEMENT_FUNCTION:
934 p = "STATEMENT FUNCTION";
935 break;
936 case ST_LABEL_ASSIGNMENT:
937 p = "LABEL ASSIGNMENT";
938 break;
939 default:
940 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
943 return p;
947 /* Return the name of a compile state. */
949 const char *
950 gfc_state_name (gfc_compile_state state)
952 const char *p;
954 switch (state)
956 case COMP_PROGRAM:
957 p = "a PROGRAM";
958 break;
959 case COMP_MODULE:
960 p = "a MODULE";
961 break;
962 case COMP_SUBROUTINE:
963 p = "a SUBROUTINE";
964 break;
965 case COMP_FUNCTION:
966 p = "a FUNCTION";
967 break;
968 case COMP_BLOCK_DATA:
969 p = "a BLOCK DATA";
970 break;
971 case COMP_INTERFACE:
972 p = "an INTERFACE";
973 break;
974 case COMP_DERIVED:
975 p = "a DERIVED TYPE block";
976 break;
977 case COMP_IF:
978 p = "an IF-THEN block";
979 break;
980 case COMP_DO:
981 p = "a DO block";
982 break;
983 case COMP_SELECT:
984 p = "a SELECT block";
985 break;
986 case COMP_FORALL:
987 p = "a FORALL block";
988 break;
989 case COMP_WHERE:
990 p = "a WHERE block";
991 break;
992 case COMP_CONTAINS:
993 p = "a contained subprogram";
994 break;
996 default:
997 gfc_internal_error ("gfc_state_name(): Bad state");
1000 return p;
1004 /* Do whatever is necessary to accept the last statement. */
1006 static void
1007 accept_statement (gfc_statement st)
1010 switch (st)
1012 case ST_USE:
1013 gfc_use_module ();
1014 break;
1016 case ST_IMPLICIT_NONE:
1017 gfc_set_implicit_none ();
1018 break;
1020 case ST_IMPLICIT:
1021 gfc_set_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_ENDDO:
1036 case ST_END_SELECT:
1037 if (gfc_statement_label != NULL)
1039 new_st.op = EXEC_NOP;
1040 add_statement ();
1043 break;
1045 /* The end-of-program unit statements do not get the special
1046 marker and require a statement of some sort if they are a
1047 branch target. */
1049 case ST_END_PROGRAM:
1050 case ST_END_FUNCTION:
1051 case ST_END_SUBROUTINE:
1052 if (gfc_statement_label != NULL)
1054 new_st.op = EXEC_RETURN;
1055 add_statement ();
1058 break;
1060 case ST_BLOCK_DATA:
1062 gfc_symbol *block_data = NULL;
1063 symbol_attribute attr;
1065 gfc_get_symbol ("_BLOCK_DATA__", gfc_current_ns, &block_data);
1066 gfc_clear_attr (&attr);
1067 attr.flavor = FL_PROCEDURE;
1068 attr.proc = PROC_UNKNOWN;
1069 attr.subroutine = 1;
1070 attr.access = ACCESS_PUBLIC;
1071 block_data->attr = attr;
1072 gfc_current_ns->proc_name = block_data;
1073 gfc_commit_symbols ();
1076 break;
1078 case_executable:
1079 case_exec_markers:
1080 add_statement ();
1081 break;
1083 default:
1084 break;
1087 gfc_commit_symbols ();
1088 gfc_warning_check ();
1089 gfc_clear_new_st ();
1093 /* Undo anything tentative that has been built for the current
1094 statement. */
1096 static void
1097 reject_statement (void)
1100 gfc_undo_symbols ();
1101 gfc_clear_warning ();
1102 undo_new_statement ();
1106 /* Generic complaint about an out of order statement. We also do
1107 whatever is necessary to clean up. */
1109 static void
1110 unexpected_statement (gfc_statement st)
1113 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1115 reject_statement ();
1119 /* Given the next statement seen by the matcher, make sure that it is
1120 in proper order with the last. This subroutine is initialized by
1121 calling it with an argument of ST_NONE. If there is a problem, we
1122 issue an error and return FAILURE. Otherwise we return SUCCESS.
1124 Individual parsers need to verify that the statements seen are
1125 valid before calling here, ie ENTRY statements are not allowed in
1126 INTERFACE blocks. The following diagram is taken from the standard:
1128 +---------------------------------------+
1129 | program subroutine function module |
1130 +---------------------------------------+
1131 | use |
1132 |---------------------------------------+
1133 | | implicit none |
1134 | +-----------+------------------+
1135 | | parameter | implicit |
1136 | +-----------+------------------+
1137 | format | | derived type |
1138 | entry | parameter | interface |
1139 | | data | specification |
1140 | | | statement func |
1141 | +-----------+------------------+
1142 | | data | executable |
1143 +--------+-----------+------------------+
1144 | contains |
1145 +---------------------------------------+
1146 | internal module/subprogram |
1147 +---------------------------------------+
1148 | end |
1149 +---------------------------------------+
1153 typedef struct
1155 enum
1156 { ORDER_START, ORDER_USE, ORDER_IMPLICIT_NONE, ORDER_IMPLICIT,
1157 ORDER_SPEC, ORDER_EXEC
1159 state;
1160 gfc_statement last_statement;
1161 locus where;
1163 st_state;
1165 static try
1166 verify_st_order (st_state * p, gfc_statement st)
1169 switch (st)
1171 case ST_NONE:
1172 p->state = ORDER_START;
1173 break;
1175 case ST_USE:
1176 if (p->state > ORDER_USE)
1177 goto order;
1178 p->state = ORDER_USE;
1179 break;
1181 case ST_IMPLICIT_NONE:
1182 if (p->state > ORDER_IMPLICIT_NONE)
1183 goto order;
1185 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1186 statement disqualifies a USE but not an IMPLICIT NONE.
1187 Duplicate IMPLICIT NONEs are caught when the implicit types
1188 are set. */
1190 p->state = ORDER_IMPLICIT_NONE;
1191 break;
1193 case ST_IMPLICIT:
1194 if (p->state > ORDER_IMPLICIT)
1195 goto order;
1196 p->state = ORDER_IMPLICIT;
1197 break;
1199 case ST_FORMAT:
1200 case ST_ENTRY:
1201 if (p->state < ORDER_IMPLICIT_NONE)
1202 p->state = ORDER_IMPLICIT_NONE;
1203 break;
1205 case ST_PARAMETER:
1206 if (p->state >= ORDER_EXEC)
1207 goto order;
1208 if (p->state < ORDER_IMPLICIT)
1209 p->state = ORDER_IMPLICIT;
1210 break;
1212 case ST_DATA:
1213 if (p->state < ORDER_SPEC)
1214 p->state = ORDER_SPEC;
1215 break;
1217 case ST_PUBLIC:
1218 case ST_PRIVATE:
1219 case ST_DERIVED_DECL:
1220 case_decl:
1221 if (p->state >= ORDER_EXEC)
1222 goto order;
1223 if (p->state < ORDER_SPEC)
1224 p->state = ORDER_SPEC;
1225 break;
1227 case_executable:
1228 case_exec_markers:
1229 if (p->state < ORDER_EXEC)
1230 p->state = ORDER_EXEC;
1231 break;
1233 default:
1234 gfc_internal_error
1235 ("Unexpected %s statement in verify_st_order() at %C",
1236 gfc_ascii_statement (st));
1239 /* All is well, record the statement in case we need it next time. */
1240 p->where = gfc_current_locus;
1241 p->last_statement = st;
1242 return SUCCESS;
1244 order:
1245 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1246 gfc_ascii_statement (st),
1247 gfc_ascii_statement (p->last_statement), &p->where);
1249 return FAILURE;
1253 /* Handle an unexpected end of file. This is a show-stopper... */
1255 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1257 static void
1258 unexpected_eof (void)
1260 gfc_state_data *p;
1262 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1264 /* Memory cleanup. Move to "second to last". */
1265 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1266 p = p->previous);
1268 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1269 gfc_done_2 ();
1271 longjmp (eof, 1);
1275 /* Parse a derived type. */
1277 static void
1278 parse_derived (void)
1280 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1281 gfc_statement st;
1282 gfc_component *c;
1283 gfc_state_data s;
1285 error_flag = 0;
1287 accept_statement (ST_DERIVED_DECL);
1288 push_state (&s, COMP_DERIVED, gfc_new_block);
1290 gfc_new_block->component_access = ACCESS_PUBLIC;
1291 seen_private = 0;
1292 seen_sequence = 0;
1293 seen_component = 0;
1295 compiling_type = 1;
1297 while (compiling_type)
1299 st = next_statement ();
1300 switch (st)
1302 case ST_NONE:
1303 unexpected_eof ();
1305 case ST_DATA_DECL:
1306 accept_statement (st);
1307 seen_component = 1;
1308 break;
1310 case ST_END_TYPE:
1311 compiling_type = 0;
1313 if (!seen_component)
1315 gfc_error ("Derived type definition at %C has no components");
1316 error_flag = 1;
1319 accept_statement (ST_END_TYPE);
1320 break;
1322 case ST_PRIVATE:
1323 if (gfc_find_state (COMP_MODULE) == FAILURE)
1325 gfc_error
1326 ("PRIVATE statement in TYPE at %C must be inside a MODULE");
1327 error_flag = 1;
1328 break;
1331 if (seen_component)
1333 gfc_error ("PRIVATE statement at %C must precede "
1334 "structure components");
1335 error_flag = 1;
1336 break;
1339 if (seen_private)
1341 gfc_error ("Duplicate PRIVATE statement at %C");
1342 error_flag = 1;
1345 s.sym->component_access = ACCESS_PRIVATE;
1346 accept_statement (ST_PRIVATE);
1347 seen_private = 1;
1348 break;
1350 case ST_SEQUENCE:
1351 if (seen_component)
1353 gfc_error ("SEQUENCE statement at %C must precede "
1354 "structure components");
1355 error_flag = 1;
1356 break;
1359 if (gfc_current_block ()->attr.sequence)
1360 gfc_warning ("SEQUENCE attribute at %C already specified in "
1361 "TYPE statement");
1363 if (seen_sequence)
1365 gfc_error ("Duplicate SEQUENCE statement at %C");
1366 error_flag = 1;
1369 seen_sequence = 1;
1370 gfc_add_sequence (&gfc_current_block ()->attr, NULL);
1371 break;
1373 default:
1374 unexpected_statement (st);
1375 break;
1379 /* Sanity checks on the structure. If the structure has the
1380 SEQUENCE attribute, then all component structures must also have
1381 SEQUENCE. */
1382 if (error_flag == 0 && gfc_current_block ()->attr.sequence)
1383 for (c = gfc_current_block ()->components; c; c = c->next)
1385 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
1387 gfc_error
1388 ("Component %s of SEQUENCE type declared at %C does not "
1389 "have the SEQUENCE attribute", c->ts.derived->name);
1393 pop_state ();
1398 /* Parse an interface. We must be able to deal with the possibility
1399 of recursive interfaces. The parse_spec() subroutine is mutually
1400 recursive with parse_interface(). */
1402 static gfc_statement parse_spec (gfc_statement);
1404 static void
1405 parse_interface (void)
1407 gfc_compile_state new_state, current_state;
1408 gfc_symbol *prog_unit, *sym;
1409 gfc_interface_info save;
1410 gfc_state_data s1, s2;
1411 gfc_statement st;
1413 accept_statement (ST_INTERFACE);
1415 current_interface.ns = gfc_current_ns;
1416 save = current_interface;
1418 sym = (current_interface.type == INTERFACE_GENERIC
1419 || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
1421 push_state (&s1, COMP_INTERFACE, sym);
1422 current_state = COMP_NONE;
1424 loop:
1425 gfc_current_ns = gfc_get_namespace (current_interface.ns);
1427 st = next_statement ();
1428 switch (st)
1430 case ST_NONE:
1431 unexpected_eof ();
1433 case ST_SUBROUTINE:
1434 new_state = COMP_SUBROUTINE;
1435 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1436 gfc_new_block->formal, NULL);
1437 break;
1439 case ST_FUNCTION:
1440 new_state = COMP_FUNCTION;
1441 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1442 gfc_new_block->formal, NULL);
1443 break;
1445 case ST_MODULE_PROC: /* The module procedure matcher makes
1446 sure the context is correct. */
1447 accept_statement (st);
1448 gfc_free_namespace (gfc_current_ns);
1449 goto loop;
1451 case ST_END_INTERFACE:
1452 gfc_free_namespace (gfc_current_ns);
1453 gfc_current_ns = current_interface.ns;
1454 goto done;
1456 default:
1457 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1458 gfc_ascii_statement (st));
1459 reject_statement ();
1460 gfc_free_namespace (gfc_current_ns);
1461 goto loop;
1465 /* Make sure that a generic interface has only subroutines or
1466 functions and that the generic name has the right attribute. */
1467 if (current_interface.type == INTERFACE_GENERIC)
1469 if (current_state == COMP_NONE)
1471 if (new_state == COMP_FUNCTION)
1472 gfc_add_function (&sym->attr, NULL);
1473 if (new_state == COMP_SUBROUTINE)
1474 gfc_add_subroutine (&sym->attr, NULL);
1476 current_state = new_state;
1478 else
1480 if (new_state != current_state)
1482 if (new_state == COMP_SUBROUTINE)
1483 gfc_error
1484 ("SUBROUTINE at %C does not belong in a generic function "
1485 "interface");
1487 if (new_state == COMP_FUNCTION)
1488 gfc_error
1489 ("FUNCTION at %C does not belong in a generic subroutine "
1490 "interface");
1495 push_state (&s2, new_state, gfc_new_block);
1496 accept_statement (st);
1497 prog_unit = gfc_new_block;
1498 prog_unit->formal_ns = gfc_current_ns;
1500 decl:
1501 /* Read data declaration statements. */
1502 st = parse_spec (ST_NONE);
1504 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1506 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1507 gfc_ascii_statement (st));
1508 reject_statement ();
1509 goto decl;
1512 current_interface = save;
1513 gfc_add_interface (prog_unit);
1515 pop_state ();
1516 goto loop;
1518 done:
1519 pop_state ();
1523 /* Parse a set of specification statements. Returns the statement
1524 that doesn't fit. */
1526 static gfc_statement
1527 parse_spec (gfc_statement st)
1529 st_state ss;
1531 verify_st_order (&ss, ST_NONE);
1532 if (st == ST_NONE)
1533 st = next_statement ();
1535 loop:
1536 switch (st)
1538 case ST_NONE:
1539 unexpected_eof ();
1541 case ST_FORMAT:
1542 case ST_ENTRY:
1543 case ST_DATA: /* Not allowed in interfaces */
1544 if (gfc_current_state () == COMP_INTERFACE)
1545 break;
1547 /* Fall through */
1549 case ST_USE:
1550 case ST_IMPLICIT_NONE:
1551 case ST_IMPLICIT:
1552 case ST_PARAMETER:
1553 case ST_PUBLIC:
1554 case ST_PRIVATE:
1555 case ST_DERIVED_DECL:
1556 case_decl:
1557 if (verify_st_order (&ss, st) == FAILURE)
1559 reject_statement ();
1560 st = next_statement ();
1561 goto loop;
1564 switch (st)
1566 case ST_INTERFACE:
1567 parse_interface ();
1568 break;
1570 case ST_DERIVED_DECL:
1571 parse_derived ();
1572 break;
1574 case ST_PUBLIC:
1575 case ST_PRIVATE:
1576 if (gfc_current_state () != COMP_MODULE)
1578 gfc_error ("%s statement must appear in a MODULE",
1579 gfc_ascii_statement (st));
1580 break;
1583 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1585 gfc_error ("%s statement at %C follows another accessibility "
1586 "specification", gfc_ascii_statement (st));
1587 break;
1590 gfc_current_ns->default_access = (st == ST_PUBLIC)
1591 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1593 break;
1595 default:
1596 break;
1599 accept_statement (st);
1600 st = next_statement ();
1601 goto loop;
1603 default:
1604 break;
1607 return st;
1611 /* Parse a WHERE block, (not a simple WHERE statement). */
1613 static void
1614 parse_where_block (void)
1616 int seen_empty_else;
1617 gfc_code *top, *d;
1618 gfc_state_data s;
1619 gfc_statement st;
1621 accept_statement (ST_WHERE_BLOCK);
1622 top = gfc_state_stack->tail;
1624 push_state (&s, COMP_WHERE, gfc_new_block);
1626 d = add_statement ();
1627 d->expr = top->expr;
1628 d->op = EXEC_WHERE;
1630 top->expr = NULL;
1631 top->block = d;
1633 seen_empty_else = 0;
1637 st = next_statement ();
1638 switch (st)
1640 case ST_NONE:
1641 unexpected_eof ();
1643 case ST_WHERE_BLOCK:
1644 parse_where_block ();
1645 /* Fall through */
1647 case ST_ASSIGNMENT:
1648 case ST_WHERE:
1649 accept_statement (st);
1650 break;
1652 case ST_ELSEWHERE:
1653 if (seen_empty_else)
1655 gfc_error
1656 ("ELSEWHERE statement at %C follows previous unmasked "
1657 "ELSEWHERE");
1658 break;
1661 if (new_st.expr == NULL)
1662 seen_empty_else = 1;
1664 d = new_level (gfc_state_stack->head);
1665 d->op = EXEC_WHERE;
1666 d->expr = new_st.expr;
1668 accept_statement (st);
1670 break;
1672 case ST_END_WHERE:
1673 accept_statement (st);
1674 break;
1676 default:
1677 gfc_error ("Unexpected %s statement in WHERE block at %C",
1678 gfc_ascii_statement (st));
1679 reject_statement ();
1680 break;
1684 while (st != ST_END_WHERE);
1686 pop_state ();
1690 /* Parse a FORALL block (not a simple FORALL statement). */
1692 static void
1693 parse_forall_block (void)
1695 gfc_code *top, *d;
1696 gfc_state_data s;
1697 gfc_statement st;
1699 accept_statement (ST_FORALL_BLOCK);
1700 top = gfc_state_stack->tail;
1702 push_state (&s, COMP_FORALL, gfc_new_block);
1704 d = add_statement ();
1705 d->op = EXEC_FORALL;
1706 top->block = d;
1710 st = next_statement ();
1711 switch (st)
1714 case ST_ASSIGNMENT:
1715 case ST_POINTER_ASSIGNMENT:
1716 case ST_WHERE:
1717 case ST_FORALL:
1718 accept_statement (st);
1719 break;
1721 case ST_WHERE_BLOCK:
1722 parse_where_block ();
1723 break;
1725 case ST_FORALL_BLOCK:
1726 parse_forall_block ();
1727 break;
1729 case ST_END_FORALL:
1730 accept_statement (st);
1731 break;
1733 case ST_NONE:
1734 unexpected_eof ();
1736 default:
1737 gfc_error ("Unexpected %s statement in FORALL block at %C",
1738 gfc_ascii_statement (st));
1740 reject_statement ();
1741 break;
1744 while (st != ST_END_FORALL);
1746 pop_state ();
1750 static gfc_statement parse_executable (gfc_statement);
1752 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
1754 static void
1755 parse_if_block (void)
1757 gfc_code *top, *d;
1758 gfc_statement st;
1759 locus else_locus;
1760 gfc_state_data s;
1761 int seen_else;
1763 seen_else = 0;
1764 accept_statement (ST_IF_BLOCK);
1766 top = gfc_state_stack->tail;
1767 push_state (&s, COMP_IF, gfc_new_block);
1769 new_st.op = EXEC_IF;
1770 d = add_statement ();
1772 d->expr = top->expr;
1773 top->expr = NULL;
1774 top->block = d;
1778 st = parse_executable (ST_NONE);
1780 switch (st)
1782 case ST_NONE:
1783 unexpected_eof ();
1785 case ST_ELSEIF:
1786 if (seen_else)
1788 gfc_error
1789 ("ELSE IF statement at %C cannot follow ELSE statement at %L",
1790 &else_locus);
1792 reject_statement ();
1793 break;
1796 d = new_level (gfc_state_stack->head);
1797 d->op = EXEC_IF;
1798 d->expr = new_st.expr;
1800 accept_statement (st);
1802 break;
1804 case ST_ELSE:
1805 if (seen_else)
1807 gfc_error ("Duplicate ELSE statements at %L and %C",
1808 &else_locus);
1809 reject_statement ();
1810 break;
1813 seen_else = 1;
1814 else_locus = gfc_current_locus;
1816 d = new_level (gfc_state_stack->head);
1817 d->op = EXEC_IF;
1819 accept_statement (st);
1821 break;
1823 case ST_ENDIF:
1824 break;
1826 default:
1827 unexpected_statement (st);
1828 break;
1831 while (st != ST_ENDIF);
1833 pop_state ();
1834 accept_statement (st);
1838 /* Parse a SELECT block. */
1840 static void
1841 parse_select_block (void)
1843 gfc_statement st;
1844 gfc_code *cp;
1845 gfc_state_data s;
1847 accept_statement (ST_SELECT_CASE);
1849 cp = gfc_state_stack->tail;
1850 push_state (&s, COMP_SELECT, gfc_new_block);
1852 /* Make sure that the next statement is a CASE or END SELECT. */
1853 for (;;)
1855 st = next_statement ();
1856 if (st == ST_NONE)
1857 unexpected_eof ();
1858 if (st == ST_END_SELECT)
1860 /* Empty SELECT CASE is OK. */
1861 accept_statement (st);
1862 pop_state ();
1863 return;
1865 if (st == ST_CASE)
1866 break;
1868 gfc_error
1869 ("Expected a CASE or END SELECT statement following SELECT CASE "
1870 "at %C");
1872 reject_statement ();
1875 /* At this point, we're got a nonempty select block. */
1876 cp = new_level (cp);
1877 *cp = new_st;
1879 accept_statement (st);
1883 st = parse_executable (ST_NONE);
1884 switch (st)
1886 case ST_NONE:
1887 unexpected_eof ();
1889 case ST_CASE:
1890 cp = new_level (gfc_state_stack->head);
1891 *cp = new_st;
1892 gfc_clear_new_st ();
1894 accept_statement (st);
1895 /* Fall through */
1897 case ST_END_SELECT:
1898 break;
1900 /* Can't have an executable statement because of
1901 parse_executable(). */
1902 default:
1903 unexpected_statement (st);
1904 break;
1907 while (st != ST_END_SELECT);
1909 pop_state ();
1910 accept_statement (st);
1914 /* Checks to see if the current statement label closes an enddo.
1915 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
1916 an error) if it incorrectly closes an ENDDO. */
1918 static int
1919 check_do_closure (void)
1921 gfc_state_data *p;
1923 if (gfc_statement_label == NULL)
1924 return 0;
1926 for (p = gfc_state_stack; p; p = p->previous)
1927 if (p->state == COMP_DO)
1928 break;
1930 if (p == NULL)
1931 return 0; /* No loops to close */
1933 if (p->ext.end_do_label == gfc_statement_label)
1936 if (p == gfc_state_stack)
1937 return 1;
1939 gfc_error
1940 ("End of nonblock DO statement at %C is within another block");
1941 return 2;
1944 /* At this point, the label doesn't terminate the innermost loop.
1945 Make sure it doesn't terminate another one. */
1946 for (; p; p = p->previous)
1947 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
1949 gfc_error ("End of nonblock DO statement at %C is interwoven "
1950 "with another DO loop");
1951 return 2;
1954 return 0;
1958 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
1959 handled inside of parse_executable(), because they aren't really
1960 loop statements. */
1962 static void
1963 parse_do_block (void)
1965 gfc_statement st;
1966 gfc_code *top;
1967 gfc_state_data s;
1969 s.ext.end_do_label = new_st.label;
1971 accept_statement (ST_DO);
1973 top = gfc_state_stack->tail;
1974 push_state (&s, COMP_DO, gfc_new_block);
1976 top->block = new_level (top);
1977 top->block->op = EXEC_DO;
1979 loop:
1980 st = parse_executable (ST_NONE);
1982 switch (st)
1984 case ST_NONE:
1985 unexpected_eof ();
1987 case ST_ENDDO:
1988 if (s.ext.end_do_label != NULL
1989 && s.ext.end_do_label != gfc_statement_label)
1990 gfc_error_now
1991 ("Statement label in ENDDO at %C doesn't match DO label");
1992 /* Fall through */
1994 case ST_IMPLIED_ENDDO:
1995 break;
1997 default:
1998 unexpected_statement (st);
1999 goto loop;
2002 pop_state ();
2003 accept_statement (st);
2007 /* Accept a series of executable statements. We return the first
2008 statement that doesn't fit to the caller. Any block statements are
2009 passed on to the correct handler, which usually passes the buck
2010 right back here. */
2012 static gfc_statement
2013 parse_executable (gfc_statement st)
2015 int close_flag;
2017 if (st == ST_NONE)
2018 st = next_statement ();
2020 for (;; st = next_statement ())
2023 close_flag = check_do_closure ();
2024 if (close_flag)
2025 switch (st)
2027 case ST_GOTO:
2028 case ST_END_PROGRAM:
2029 case ST_RETURN:
2030 case ST_EXIT:
2031 case ST_END_FUNCTION:
2032 case ST_CYCLE:
2033 case ST_PAUSE:
2034 case ST_STOP:
2035 case ST_END_SUBROUTINE:
2037 case ST_DO:
2038 case ST_FORALL:
2039 case ST_WHERE:
2040 case ST_SELECT_CASE:
2041 gfc_error
2042 ("%s statement at %C cannot terminate a non-block DO loop",
2043 gfc_ascii_statement (st));
2044 break;
2046 default:
2047 break;
2050 switch (st)
2052 case ST_NONE:
2053 unexpected_eof ();
2055 case ST_FORMAT:
2056 case ST_DATA:
2057 case ST_ENTRY:
2058 case_executable:
2059 accept_statement (st);
2060 if (close_flag == 1)
2061 return ST_IMPLIED_ENDDO;
2062 continue;
2064 case ST_IF_BLOCK:
2065 parse_if_block ();
2066 continue;
2068 case ST_SELECT_CASE:
2069 parse_select_block ();
2070 continue;
2072 case ST_DO:
2073 parse_do_block ();
2074 if (check_do_closure () == 1)
2075 return ST_IMPLIED_ENDDO;
2076 continue;
2078 case ST_WHERE_BLOCK:
2079 parse_where_block ();
2080 continue;
2082 case ST_FORALL_BLOCK:
2083 parse_forall_block ();
2084 continue;
2086 default:
2087 break;
2090 break;
2093 return st;
2097 /* Parse a series of contained program units. */
2099 static void parse_progunit (gfc_statement);
2102 /* Fix the symbols for sibling functions. These are incorrectly added to
2103 the child namespace as the parser didn't know about this procedure. */
2105 static void
2106 gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
2108 gfc_namespace *ns;
2109 gfc_symtree *st;
2110 gfc_symbol *old_sym;
2112 for (ns = siblings; ns; ns = ns->sibling)
2114 gfc_find_sym_tree (sym->name, ns, 0, &st);
2115 if (!st)
2116 continue;
2118 old_sym = st->n.sym;
2119 if (old_sym->attr.flavor == FL_PROCEDURE && old_sym->ns == ns
2120 && ! old_sym->attr.contained)
2122 /* Replace it with the symbol from the parent namespace. */
2123 st->n.sym = sym;
2124 sym->refs++;
2126 /* Free the old (local) symbol. */
2127 old_sym->refs--;
2128 if (old_sym->refs == 0)
2129 gfc_free_symbol (old_sym);
2132 /* Do the same for any contined procedures. */
2133 gfc_fixup_sibling_symbols (sym, ns->contained);
2137 static void
2138 parse_contained (int module)
2140 gfc_namespace *ns, *parent_ns;
2141 gfc_state_data s1, s2;
2142 gfc_statement st;
2143 gfc_symbol *sym;
2145 push_state (&s1, COMP_CONTAINS, NULL);
2146 parent_ns = gfc_current_ns;
2150 gfc_current_ns = gfc_get_namespace (parent_ns);
2152 gfc_current_ns->sibling = parent_ns->contained;
2153 parent_ns->contained = gfc_current_ns;
2155 st = next_statement ();
2157 switch (st)
2159 case ST_NONE:
2160 unexpected_eof ();
2162 case ST_FUNCTION:
2163 case ST_SUBROUTINE:
2164 accept_statement (st);
2166 push_state (&s2,
2167 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2168 gfc_new_block);
2170 /* For internal procedures, create/update the symbol in the
2171 * parent namespace */
2173 if (!module)
2175 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2176 gfc_error
2177 ("Contained procedure '%s' at %C is already ambiguous",
2178 gfc_new_block->name);
2179 else
2181 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL,
2182 &gfc_new_block->declared_at) ==
2183 SUCCESS)
2185 if (st == ST_FUNCTION)
2186 gfc_add_function (&sym->attr,
2187 &gfc_new_block->declared_at);
2188 else
2189 gfc_add_subroutine (&sym->attr,
2190 &gfc_new_block->declared_at);
2194 gfc_commit_symbols ();
2196 else
2197 sym = gfc_new_block;
2199 /* Mark this as a contained function, so it isn't replaced
2200 by other module functions. */
2201 sym->attr.contained = 1;
2203 /* Fix up any sibling functions that refer to this one. */
2204 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2206 parse_progunit (ST_NONE);
2208 gfc_current_ns->code = s2.head;
2209 gfc_current_ns = parent_ns;
2211 pop_state ();
2212 break;
2214 /* These statements are associated with the end of the host
2215 unit. */
2216 case ST_END_FUNCTION:
2217 case ST_END_MODULE:
2218 case ST_END_PROGRAM:
2219 case ST_END_SUBROUTINE:
2220 accept_statement (st);
2221 break;
2223 default:
2224 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2225 gfc_ascii_statement (st));
2226 reject_statement ();
2227 break;
2230 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2231 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2233 /* The first namespace in the list is guaranteed to not have
2234 anything (worthwhile) in it. */
2236 gfc_current_ns = parent_ns;
2238 ns = gfc_current_ns->contained;
2239 gfc_current_ns->contained = ns->sibling;
2240 gfc_free_namespace (ns);
2242 pop_state ();
2246 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2248 static void
2249 parse_progunit (gfc_statement st)
2251 gfc_state_data *p;
2252 int n;
2254 st = parse_spec (st);
2255 switch (st)
2257 case ST_NONE:
2258 unexpected_eof ();
2260 case ST_CONTAINS:
2261 goto contains;
2263 case_end:
2264 accept_statement (st);
2265 goto done;
2267 default:
2268 break;
2271 loop:
2272 for (;;)
2274 st = parse_executable (st);
2276 switch (st)
2278 case ST_NONE:
2279 unexpected_eof ();
2281 case ST_CONTAINS:
2282 goto contains;
2284 case_end:
2285 accept_statement (st);
2286 goto done;
2288 default:
2289 break;
2292 unexpected_statement (st);
2293 reject_statement ();
2294 st = next_statement ();
2297 contains:
2298 n = 0;
2300 for (p = gfc_state_stack; p; p = p->previous)
2301 if (p->state == COMP_CONTAINS)
2302 n++;
2304 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2305 n--;
2307 if (n > 0)
2309 gfc_error ("CONTAINS statement at %C is already in a contained "
2310 "program unit");
2311 st = next_statement ();
2312 goto loop;
2315 parse_contained (0);
2317 done:
2318 gfc_current_ns->code = gfc_state_stack->head;
2322 /* Parse a block data program unit. */
2324 static void
2325 parse_block_data (void)
2327 gfc_statement st;
2329 st = parse_spec (ST_NONE);
2331 while (st != ST_END_BLOCK_DATA)
2333 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
2334 gfc_ascii_statement (st));
2335 reject_statement ();
2336 st = next_statement ();
2341 /* Parse a module subprogram. */
2343 static void
2344 parse_module (void)
2346 gfc_statement st;
2348 st = parse_spec (ST_NONE);
2350 loop:
2351 switch (st)
2353 case ST_NONE:
2354 unexpected_eof ();
2356 case ST_CONTAINS:
2357 parse_contained (1);
2358 break;
2360 case ST_END_MODULE:
2361 accept_statement (st);
2362 break;
2364 default:
2365 gfc_error ("Unexpected %s statement in MODULE at %C",
2366 gfc_ascii_statement (st));
2368 reject_statement ();
2369 st = next_statement ();
2370 goto loop;
2375 /* Top level parser. */
2378 gfc_parse_file (void)
2380 int seen_program, errors_before, errors;
2381 gfc_state_data top, s;
2382 gfc_statement st;
2383 locus prog_locus;
2385 top.state = COMP_NONE;
2386 top.sym = NULL;
2387 top.previous = NULL;
2388 top.head = top.tail = NULL;
2390 gfc_state_stack = &top;
2392 gfc_clear_new_st ();
2394 gfc_statement_label = NULL;
2396 if (setjmp (eof))
2397 return FAILURE; /* Come here on unexpected EOF */
2399 seen_program = 0;
2401 loop:
2402 gfc_init_2 ();
2403 st = next_statement ();
2404 switch (st)
2406 case ST_NONE:
2407 gfc_done_2 ();
2408 goto done;
2410 case ST_PROGRAM:
2411 if (seen_program)
2412 goto duplicate_main;
2413 seen_program = 1;
2414 prog_locus = gfc_current_locus;
2416 push_state (&s, COMP_PROGRAM, gfc_new_block);
2417 accept_statement (st);
2418 parse_progunit (ST_NONE);
2419 break;
2421 case ST_SUBROUTINE:
2422 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
2423 accept_statement (st);
2424 parse_progunit (ST_NONE);
2425 break;
2427 case ST_FUNCTION:
2428 push_state (&s, COMP_FUNCTION, gfc_new_block);
2429 accept_statement (st);
2430 parse_progunit (ST_NONE);
2431 break;
2433 case ST_BLOCK_DATA:
2434 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
2435 accept_statement (st);
2436 parse_block_data ();
2437 break;
2439 case ST_MODULE:
2440 push_state (&s, COMP_MODULE, gfc_new_block);
2441 accept_statement (st);
2443 gfc_get_errors (NULL, &errors_before);
2444 parse_module ();
2445 break;
2447 /* Anything else starts a nameless main program block. */
2448 default:
2449 if (seen_program)
2450 goto duplicate_main;
2451 seen_program = 1;
2452 prog_locus = gfc_current_locus;
2454 push_state (&s, COMP_PROGRAM, gfc_new_block);
2455 parse_progunit (st);
2456 break;
2459 gfc_current_ns->code = s.head;
2461 gfc_resolve (gfc_current_ns);
2463 /* Dump the parse tree if requested. */
2464 if (gfc_option.verbose)
2465 gfc_show_namespace (gfc_current_ns);
2467 gfc_get_errors (NULL, &errors);
2468 if (s.state == COMP_MODULE)
2470 gfc_dump_module (s.sym->name, errors_before == errors);
2471 if (errors == 0 && ! gfc_option.flag_no_backend)
2472 gfc_generate_module_code (gfc_current_ns);
2474 else
2476 if (errors == 0 && ! gfc_option.flag_no_backend)
2477 gfc_generate_code (gfc_current_ns);
2480 pop_state ();
2481 gfc_done_2 ();
2482 goto loop;
2484 done:
2485 return SUCCESS;
2487 duplicate_main:
2488 /* If we see a duplicate main program, shut down. If the second
2489 instance is an implied main program, ie data decls or executable
2490 statements, we're in for lots of errors. */
2491 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
2492 reject_statement ();
2493 gfc_done_2 ();
2494 return SUCCESS;