2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
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
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
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, 51 Franklin Street, Fifth Floor, Boston, MA
31 /* Current statement label. Zero means no statement label. Because
32 new_st can get wiped during statement matching, we have to keep it
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
54 match_word (const char *str, match (*subr) (void), locus * old_locus)
69 gfc_current_locus = *old_locus;
77 /* Figure out what the next statement is, (mostly) regardless of
78 proper ordering. The do...while(0) is there to prevent if/else
81 #define match(keyword, subr, st) \
83 if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
86 undo_new_statement (); \
90 decode_statement (void)
101 gfc_clear_error (); /* Clear any pending errors. */
102 gfc_clear_warning (); /* Clear any pending warnings. */
104 if (gfc_match_eos () == MATCH_YES)
107 old_locus = gfc_current_locus;
109 /* Try matching a data declaration or function declaration. The
110 input "REALFUNCTIONA(N)" can mean several things in different
111 contexts, so it (and its relatives) get special treatment. */
113 if (gfc_current_state () == COMP_NONE
114 || gfc_current_state () == COMP_INTERFACE
115 || gfc_current_state () == COMP_CONTAINS)
117 m = gfc_match_function_decl ();
120 else if (m == MATCH_ERROR)
124 gfc_current_locus = old_locus;
127 /* Match statements whose error messages are meant to be overwritten
128 by something better. */
130 match (NULL, gfc_match_assignment, ST_ASSIGNMENT);
131 match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT);
132 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
134 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
135 match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR);
137 /* Try to match a subroutine statement, which has the same optional
138 prefixes that functions can have. */
140 if (gfc_match_subroutine () == MATCH_YES)
141 return ST_SUBROUTINE;
143 gfc_current_locus = old_locus;
145 /* Check for the IF, DO, SELECT, WHERE and FORALL statements, which
146 might begin with a block label. The match functions for these
147 statements are unusual in that their keyword is not seen before
148 the matcher is called. */
150 if (gfc_match_if (&st) == MATCH_YES)
153 gfc_current_locus = old_locus;
155 if (gfc_match_where (&st) == MATCH_YES)
158 gfc_current_locus = old_locus;
160 if (gfc_match_forall (&st) == MATCH_YES)
163 gfc_current_locus = old_locus;
165 match (NULL, gfc_match_do, ST_DO);
166 match (NULL, gfc_match_select, ST_SELECT_CASE);
168 /* General statement matching: Instead of testing every possible
169 statement, we eliminate most possibilities by peeking at the
172 c = gfc_peek_char ();
177 match ("allocate", gfc_match_allocate, ST_ALLOCATE);
178 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
179 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
183 match ("backspace", gfc_match_backspace, ST_BACKSPACE);
184 match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
188 match ("call", gfc_match_call, ST_CALL);
189 match ("close", gfc_match_close, ST_CLOSE);
190 match ("continue", gfc_match_continue, ST_CONTINUE);
191 match ("cycle", gfc_match_cycle, ST_CYCLE);
192 match ("case", gfc_match_case, ST_CASE);
193 match ("common", gfc_match_common, ST_COMMON);
194 match ("contains", gfc_match_eos, ST_CONTAINS);
198 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE);
199 match ("data", gfc_match_data, ST_DATA);
200 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
204 match ("end file", gfc_match_endfile, ST_END_FILE);
205 match ("exit", gfc_match_exit, ST_EXIT);
206 match ("else", gfc_match_else, ST_ELSE);
207 match ("else where", gfc_match_elsewhere, ST_ELSEWHERE);
208 match ("else if", gfc_match_elseif, ST_ELSEIF);
209 match ("enum , bind ( c )", gfc_match_enum, ST_ENUM);
211 if (gfc_match_end (&st) == MATCH_YES)
214 match ("entry% ", gfc_match_entry, ST_ENTRY);
215 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
216 match ("external", gfc_match_external, ST_ATTR_DECL);
220 match ("flush", gfc_match_flush, ST_FLUSH);
221 match ("format", gfc_match_format, ST_FORMAT);
225 match ("go to", gfc_match_goto, ST_GOTO);
229 match ("inquire", gfc_match_inquire, ST_INQUIRE);
230 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
231 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
232 match ("interface", gfc_match_interface, ST_INTERFACE);
233 match ("intent", gfc_match_intent, ST_ATTR_DECL);
234 match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL);
238 match ("module% procedure% ", gfc_match_modproc, ST_MODULE_PROC);
239 match ("module", gfc_match_module, ST_MODULE);
243 match ("nullify", gfc_match_nullify, ST_NULLIFY);
244 match ("namelist", gfc_match_namelist, ST_NAMELIST);
248 match ("open", gfc_match_open, ST_OPEN);
249 match ("optional", gfc_match_optional, ST_ATTR_DECL);
253 match ("print", gfc_match_print, ST_WRITE);
254 match ("parameter", gfc_match_parameter, ST_PARAMETER);
255 match ("pause", gfc_match_pause, ST_PAUSE);
256 match ("pointer", gfc_match_pointer, ST_ATTR_DECL);
257 if (gfc_match_private (&st) == MATCH_YES)
259 match ("program", gfc_match_program, ST_PROGRAM);
260 if (gfc_match_public (&st) == MATCH_YES)
265 match ("read", gfc_match_read, ST_READ);
266 match ("return", gfc_match_return, ST_RETURN);
267 match ("rewind", gfc_match_rewind, ST_REWIND);
271 match ("sequence", gfc_match_eos, ST_SEQUENCE);
272 match ("stop", gfc_match_stop, ST_STOP);
273 match ("save", gfc_match_save, ST_ATTR_DECL);
277 match ("target", gfc_match_target, ST_ATTR_DECL);
278 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
282 match ("use% ", gfc_match_use, ST_USE);
286 match ("write", gfc_match_write, ST_WRITE);
290 /* All else has failed, so give up. See if any of the matchers has
291 stored an error message of some sort. */
293 if (gfc_error_check () == 0)
294 gfc_error_now ("Unclassifiable statement at %C");
298 gfc_error_recovery ();
306 /* Get the next statement in free form source. */
314 gfc_gobble_whitespace ();
316 c = gfc_peek_char ();
320 /* Found a statement label? */
321 m = gfc_match_st_label (&gfc_statement_label);
323 d = gfc_peek_char ();
324 if (m != MATCH_YES || !gfc_is_whitespace (d))
326 gfc_match_small_literal_int (&c, &cnt);
329 gfc_error_now ("Too many digits in statement label at %C");
332 gfc_error_now ("Statement label at %C is zero");
335 c = gfc_next_char ();
338 if (!gfc_is_whitespace (c))
339 gfc_error_now ("Non-numeric character in statement label at %C");
344 label_locus = gfc_current_locus;
346 gfc_gobble_whitespace ();
348 if (gfc_match_eos () == MATCH_YES)
351 ("Ignoring statement label in empty statement at %C");
352 gfc_free_st_label (gfc_statement_label);
353 gfc_statement_label = NULL;
359 return decode_statement ();
363 /* Get the next statement in fixed-form source. */
368 int label, digit_flag, i;
373 return decode_statement ();
375 /* Skip past the current label field, parsing a statement label if
376 one is there. This is a weird number parser, since the number is
377 contained within five columns and can have any kind of embedded
378 spaces. We also check for characters that make the rest of the
384 for (i = 0; i < 5; i++)
386 c = gfc_next_char_literal (0);
403 label = label * 10 + c - '0';
404 label_locus = gfc_current_locus;
408 /* Comments have already been skipped by the time we get
409 here so don't bother checking for them. */
412 gfc_buffer_error (0);
413 gfc_error ("Non-numeric character in statement label at %C");
421 gfc_warning_now ("Zero is not a valid statement label at %C");
424 /* We've found a valid statement label. */
425 gfc_statement_label = gfc_get_st_label (label);
429 /* Since this line starts a statement, it cannot be a continuation
430 of a previous statement. If we see something here besides a
431 space or zero, it must be a bad continuation line. */
433 c = gfc_next_char_literal (0);
437 if (c != ' ' && c!= '0')
439 gfc_buffer_error (0);
440 gfc_error ("Bad continuation line at %C");
444 /* Now that we've taken care of the statement label columns, we have
445 to make sure that the first nonblank character is not a '!'. If
446 it is, the rest of the line is a comment. */
450 loc = gfc_current_locus;
451 c = gfc_next_char_literal (0);
453 while (gfc_is_whitespace (c));
457 gfc_current_locus = loc;
459 if (gfc_match_eos () == MATCH_YES)
462 /* At this point, we've got a nonblank statement to parse. */
463 return decode_statement ();
467 gfc_warning ("Statement label in blank line will be ignored at %C");
473 /* Return the next non-ST_NONE statement to the caller. We also worry
474 about including files and the ends of include files at this stage. */
477 next_statement (void)
481 gfc_new_block = NULL;
485 gfc_statement_label = NULL;
486 gfc_buffer_error (1);
490 if (gfc_option.warn_line_truncation
491 && gfc_current_locus.lb->truncated)
492 gfc_warning_now ("Line truncated at %C");
497 gfc_skip_comments ();
506 (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
512 gfc_buffer_error (0);
515 check_statement_label (st);
521 /****************************** Parser ***********************************/
523 /* The parser subroutines are of type 'try' that fail if the file ends
526 /* Macros that expand to case-labels for various classes of
527 statements. Start with executable statements that directly do
530 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
531 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
532 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
533 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
534 case ST_PAUSE: case ST_STOP: case ST_WRITE: case ST_ASSIGNMENT: \
535 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
536 case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
537 case ST_LABEL_ASSIGNMENT: case ST_FLUSH
539 /* Statements that mark other executable statements. */
541 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \
542 case ST_WHERE_BLOCK: case ST_SELECT_CASE
544 /* Declaration statements */
546 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
547 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
548 case ST_TYPE: case ST_INTERFACE
550 /* Block end statements. Errors associated with interchanging these
551 are detected in gfc_match_end(). */
553 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
554 case ST_END_PROGRAM: case ST_END_SUBROUTINE
557 /* Push a new state onto the stack. */
560 push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
563 p->state = new_state;
564 p->previous = gfc_state_stack;
566 p->head = p->tail = NULL;
567 p->do_variable = NULL;
573 /* Pop the current state. */
579 gfc_state_stack = gfc_state_stack->previous;
583 /* Try to find the given state in the state stack. */
586 gfc_find_state (gfc_compile_state state)
590 for (p = gfc_state_stack; p; p = p->previous)
591 if (p->state == state)
594 return (p == NULL) ? FAILURE : SUCCESS;
598 /* Starts a new level in the statement list. */
601 new_level (gfc_code * q)
605 p = q->block = gfc_get_code ();
607 gfc_state_stack->head = gfc_state_stack->tail = p;
613 /* Add the current new_st code structure and adds it to the current
614 program unit. As a side-effect, it zeroes the new_st. */
624 p->loc = gfc_current_locus;
626 if (gfc_state_stack->head == NULL)
627 gfc_state_stack->head = p;
629 gfc_state_stack->tail->next = p;
631 while (p->next != NULL)
634 gfc_state_stack->tail = p;
642 /* Frees everything associated with the current statement. */
645 undo_new_statement (void)
647 gfc_free_statements (new_st.block);
648 gfc_free_statements (new_st.next);
649 gfc_free_statement (&new_st);
654 /* If the current statement has a statement label, make sure that it
655 is allowed to, or should have one. */
658 check_statement_label (gfc_statement st)
662 if (gfc_statement_label == NULL)
665 gfc_error ("FORMAT statement at %L does not have a statement label",
673 case ST_END_FUNCTION:
674 case ST_END_SUBROUTINE:
680 type = ST_LABEL_TARGET;
684 type = ST_LABEL_FORMAT;
687 /* Statement labels are not restricted from appearing on a
688 particular line. However, there are plenty of situations
689 where the resulting label can't be referenced. */
692 type = ST_LABEL_BAD_TARGET;
696 gfc_define_st_label (gfc_statement_label, type, &label_locus);
698 new_st.here = gfc_statement_label;
702 /* Figures out what the enclosing program unit is. This will be a
703 function, subroutine, program, block data or module. */
706 gfc_enclosing_unit (gfc_compile_state * result)
710 for (p = gfc_state_stack; p; p = p->previous)
711 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
712 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
713 || p->state == COMP_PROGRAM)
722 *result = COMP_PROGRAM;
727 /* Translate a statement enum to a string. */
730 gfc_ascii_statement (gfc_statement st)
736 case ST_ARITHMETIC_IF:
737 p = _("arithmetic IF");
743 p = _("attribute declaration");
773 p = _("data declaration");
781 case ST_DERIVED_DECL:
782 p = _("derived type declaration");
796 case ST_END_BLOCK_DATA:
797 p = "END BLOCK DATA";
808 case ST_END_FUNCTION:
814 case ST_END_INTERFACE:
826 case ST_END_SUBROUTINE:
827 p = "END SUBROUTINE";
847 case ST_FORALL_BLOCK: /* Fall through */
866 case ST_IMPLICIT_NONE:
869 case ST_IMPLIED_ENDDO:
870 p = _("implied END DO");
894 p = "MODULE PROCEDURE";
929 case ST_WHERE_BLOCK: /* Fall through */
939 case ST_POINTER_ASSIGNMENT:
940 p = _("pointer assignment");
951 case ST_STATEMENT_FUNCTION:
952 p = "STATEMENT FUNCTION";
954 case ST_LABEL_ASSIGNMENT:
955 p = "LABEL ASSIGNMENT";
958 p = "ENUM DEFINITION";
961 p = "ENUMERATOR DEFINITION";
967 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
974 /* Create a symbol for the main program and assign it to ns->proc_name. */
977 main_program_symbol (gfc_namespace * ns)
979 gfc_symbol *main_program;
980 symbol_attribute attr;
982 gfc_get_symbol ("MAIN__", ns, &main_program);
983 gfc_clear_attr (&attr);
984 attr.flavor = FL_PROCEDURE;
985 attr.proc = PROC_UNKNOWN;
987 attr.access = ACCESS_PUBLIC;
988 attr.is_main_program = 1;
989 main_program->attr = attr;
990 main_program->declared_at = gfc_current_locus;
991 ns->proc_name = main_program;
992 gfc_commit_symbols ();
996 /* Do whatever is necessary to accept the last statement. */
999 accept_statement (gfc_statement st)
1008 case ST_IMPLICIT_NONE:
1009 gfc_set_implicit_none ();
1018 gfc_current_ns->proc_name = gfc_new_block;
1021 /* If the statement is the end of a block, lay down a special code
1022 that allows a branch to the end of the block from within the
1027 if (gfc_statement_label != NULL)
1029 new_st.op = EXEC_NOP;
1035 /* The end-of-program unit statements do not get the special
1036 marker and require a statement of some sort if they are a
1039 case ST_END_PROGRAM:
1040 case ST_END_FUNCTION:
1041 case ST_END_SUBROUTINE:
1042 if (gfc_statement_label != NULL)
1044 new_st.op = EXEC_RETURN;
1060 gfc_commit_symbols ();
1061 gfc_warning_check ();
1062 gfc_clear_new_st ();
1066 /* Undo anything tentative that has been built for the current
1070 reject_statement (void)
1073 gfc_undo_symbols ();
1074 gfc_clear_warning ();
1075 undo_new_statement ();
1079 /* Generic complaint about an out of order statement. We also do
1080 whatever is necessary to clean up. */
1083 unexpected_statement (gfc_statement st)
1086 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1088 reject_statement ();
1092 /* Given the next statement seen by the matcher, make sure that it is
1093 in proper order with the last. This subroutine is initialized by
1094 calling it with an argument of ST_NONE. If there is a problem, we
1095 issue an error and return FAILURE. Otherwise we return SUCCESS.
1097 Individual parsers need to verify that the statements seen are
1098 valid before calling here, ie ENTRY statements are not allowed in
1099 INTERFACE blocks. The following diagram is taken from the standard:
1101 +---------------------------------------+
1102 | program subroutine function module |
1103 +---------------------------------------+
1105 |---------------------------------------+
1107 | +-----------+------------------+
1108 | | parameter | implicit |
1109 | +-----------+------------------+
1110 | format | | derived type |
1111 | entry | parameter | interface |
1112 | | data | specification |
1113 | | | statement func |
1114 | +-----------+------------------+
1115 | | data | executable |
1116 +--------+-----------+------------------+
1118 +---------------------------------------+
1119 | internal module/subprogram |
1120 +---------------------------------------+
1122 +---------------------------------------+
1129 { ORDER_START, ORDER_USE, ORDER_IMPLICIT_NONE, ORDER_IMPLICIT,
1130 ORDER_SPEC, ORDER_EXEC
1133 gfc_statement last_statement;
1139 verify_st_order (st_state * p, gfc_statement st)
1145 p->state = ORDER_START;
1149 if (p->state > ORDER_USE)
1151 p->state = ORDER_USE;
1154 case ST_IMPLICIT_NONE:
1155 if (p->state > ORDER_IMPLICIT_NONE)
1158 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1159 statement disqualifies a USE but not an IMPLICIT NONE.
1160 Duplicate IMPLICIT NONEs are caught when the implicit types
1163 p->state = ORDER_IMPLICIT_NONE;
1167 if (p->state > ORDER_IMPLICIT)
1169 p->state = ORDER_IMPLICIT;
1174 if (p->state < ORDER_IMPLICIT_NONE)
1175 p->state = ORDER_IMPLICIT_NONE;
1179 if (p->state >= ORDER_EXEC)
1181 if (p->state < ORDER_IMPLICIT)
1182 p->state = ORDER_IMPLICIT;
1186 if (p->state < ORDER_SPEC)
1187 p->state = ORDER_SPEC;
1192 case ST_DERIVED_DECL:
1194 if (p->state >= ORDER_EXEC)
1196 if (p->state < ORDER_SPEC)
1197 p->state = ORDER_SPEC;
1202 if (p->state < ORDER_EXEC)
1203 p->state = ORDER_EXEC;
1208 ("Unexpected %s statement in verify_st_order() at %C",
1209 gfc_ascii_statement (st));
1212 /* All is well, record the statement in case we need it next time. */
1213 p->where = gfc_current_locus;
1214 p->last_statement = st;
1218 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1219 gfc_ascii_statement (st),
1220 gfc_ascii_statement (p->last_statement), &p->where);
1226 /* Handle an unexpected end of file. This is a show-stopper... */
1228 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1231 unexpected_eof (void)
1235 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1237 /* Memory cleanup. Move to "second to last". */
1238 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1241 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1244 longjmp (eof_buf, 1);
1248 /* Parse a derived type. */
1251 parse_derived (void)
1253 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1260 accept_statement (ST_DERIVED_DECL);
1261 push_state (&s, COMP_DERIVED, gfc_new_block);
1263 gfc_new_block->component_access = ACCESS_PUBLIC;
1270 while (compiling_type)
1272 st = next_statement ();
1279 accept_statement (st);
1286 if (!seen_component)
1288 gfc_error ("Derived type definition at %C has no components");
1292 accept_statement (ST_END_TYPE);
1296 if (gfc_find_state (COMP_MODULE) == FAILURE)
1299 ("PRIVATE statement in TYPE at %C must be inside a MODULE");
1306 gfc_error ("PRIVATE statement at %C must precede "
1307 "structure components");
1314 gfc_error ("Duplicate PRIVATE statement at %C");
1318 s.sym->component_access = ACCESS_PRIVATE;
1319 accept_statement (ST_PRIVATE);
1326 gfc_error ("SEQUENCE statement at %C must precede "
1327 "structure components");
1332 if (gfc_current_block ()->attr.sequence)
1333 gfc_warning ("SEQUENCE attribute at %C already specified in "
1338 gfc_error ("Duplicate SEQUENCE statement at %C");
1343 gfc_add_sequence (&gfc_current_block ()->attr,
1344 gfc_current_block ()->name, NULL);
1348 unexpected_statement (st);
1353 /* Sanity checks on the structure. If the structure has the
1354 SEQUENCE attribute, then all component structures must also have
1356 if (error_flag == 0 && gfc_current_block ()->attr.sequence)
1357 for (c = gfc_current_block ()->components; c; c = c->next)
1359 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
1362 ("Component %s of SEQUENCE type declared at %C does not "
1363 "have the SEQUENCE attribute", c->ts.derived->name);
1372 /* Parse an ENUM. */
1381 int seen_enumerator = 0;
1385 push_state (&s, COMP_ENUM, gfc_new_block);
1389 while (compiling_enum)
1391 st = next_statement ();
1399 seen_enumerator = 1;
1400 accept_statement (st);
1405 if (!seen_enumerator)
1407 gfc_error ("ENUM declaration at %C has no ENUMERATORS");
1410 accept_statement (st);
1414 gfc_free_enum_history ();
1415 unexpected_statement (st);
1422 /* Parse an interface. We must be able to deal with the possibility
1423 of recursive interfaces. The parse_spec() subroutine is mutually
1424 recursive with parse_interface(). */
1426 static gfc_statement parse_spec (gfc_statement);
1429 parse_interface (void)
1431 gfc_compile_state new_state, current_state;
1432 gfc_symbol *prog_unit, *sym;
1433 gfc_interface_info save;
1434 gfc_state_data s1, s2;
1437 accept_statement (ST_INTERFACE);
1439 current_interface.ns = gfc_current_ns;
1440 save = current_interface;
1442 sym = (current_interface.type == INTERFACE_GENERIC
1443 || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
1445 push_state (&s1, COMP_INTERFACE, sym);
1446 current_state = COMP_NONE;
1449 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
1451 st = next_statement ();
1458 new_state = COMP_SUBROUTINE;
1459 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1460 gfc_new_block->formal, NULL);
1464 new_state = COMP_FUNCTION;
1465 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1466 gfc_new_block->formal, NULL);
1469 case ST_MODULE_PROC: /* The module procedure matcher makes
1470 sure the context is correct. */
1471 accept_statement (st);
1472 gfc_free_namespace (gfc_current_ns);
1475 case ST_END_INTERFACE:
1476 gfc_free_namespace (gfc_current_ns);
1477 gfc_current_ns = current_interface.ns;
1481 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1482 gfc_ascii_statement (st));
1483 reject_statement ();
1484 gfc_free_namespace (gfc_current_ns);
1489 /* Make sure that a generic interface has only subroutines or
1490 functions and that the generic name has the right attribute. */
1491 if (current_interface.type == INTERFACE_GENERIC)
1493 if (current_state == COMP_NONE)
1495 if (new_state == COMP_FUNCTION)
1496 gfc_add_function (&sym->attr, sym->name, NULL);
1497 else if (new_state == COMP_SUBROUTINE)
1498 gfc_add_subroutine (&sym->attr, sym->name, NULL);
1500 current_state = new_state;
1504 if (new_state != current_state)
1506 if (new_state == COMP_SUBROUTINE)
1508 ("SUBROUTINE at %C does not belong in a generic function "
1511 if (new_state == COMP_FUNCTION)
1513 ("FUNCTION at %C does not belong in a generic subroutine "
1519 push_state (&s2, new_state, gfc_new_block);
1520 accept_statement (st);
1521 prog_unit = gfc_new_block;
1522 prog_unit->formal_ns = gfc_current_ns;
1525 /* Read data declaration statements. */
1526 st = parse_spec (ST_NONE);
1528 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1530 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1531 gfc_ascii_statement (st));
1532 reject_statement ();
1536 current_interface = save;
1537 gfc_add_interface (prog_unit);
1547 /* Parse a set of specification statements. Returns the statement
1548 that doesn't fit. */
1550 static gfc_statement
1551 parse_spec (gfc_statement st)
1555 verify_st_order (&ss, ST_NONE);
1557 st = next_statement ();
1567 case ST_DATA: /* Not allowed in interfaces */
1568 if (gfc_current_state () == COMP_INTERFACE)
1574 case ST_IMPLICIT_NONE:
1579 case ST_DERIVED_DECL:
1581 if (verify_st_order (&ss, st) == FAILURE)
1583 reject_statement ();
1584 st = next_statement ();
1594 case ST_DERIVED_DECL:
1600 if (gfc_current_state () != COMP_MODULE)
1602 gfc_error ("%s statement must appear in a MODULE",
1603 gfc_ascii_statement (st));
1607 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1609 gfc_error ("%s statement at %C follows another accessibility "
1610 "specification", gfc_ascii_statement (st));
1614 gfc_current_ns->default_access = (st == ST_PUBLIC)
1615 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1623 accept_statement (st);
1624 st = next_statement ();
1628 accept_statement (st);
1630 st = next_statement ();
1641 /* Parse a WHERE block, (not a simple WHERE statement). */
1644 parse_where_block (void)
1646 int seen_empty_else;
1651 accept_statement (ST_WHERE_BLOCK);
1652 top = gfc_state_stack->tail;
1654 push_state (&s, COMP_WHERE, gfc_new_block);
1656 d = add_statement ();
1657 d->expr = top->expr;
1663 seen_empty_else = 0;
1667 st = next_statement ();
1673 case ST_WHERE_BLOCK:
1674 parse_where_block ();
1679 accept_statement (st);
1683 if (seen_empty_else)
1686 ("ELSEWHERE statement at %C follows previous unmasked "
1691 if (new_st.expr == NULL)
1692 seen_empty_else = 1;
1694 d = new_level (gfc_state_stack->head);
1696 d->expr = new_st.expr;
1698 accept_statement (st);
1703 accept_statement (st);
1707 gfc_error ("Unexpected %s statement in WHERE block at %C",
1708 gfc_ascii_statement (st));
1709 reject_statement ();
1714 while (st != ST_END_WHERE);
1720 /* Parse a FORALL block (not a simple FORALL statement). */
1723 parse_forall_block (void)
1729 accept_statement (ST_FORALL_BLOCK);
1730 top = gfc_state_stack->tail;
1732 push_state (&s, COMP_FORALL, gfc_new_block);
1734 d = add_statement ();
1735 d->op = EXEC_FORALL;
1740 st = next_statement ();
1745 case ST_POINTER_ASSIGNMENT:
1748 accept_statement (st);
1751 case ST_WHERE_BLOCK:
1752 parse_where_block ();
1755 case ST_FORALL_BLOCK:
1756 parse_forall_block ();
1760 accept_statement (st);
1767 gfc_error ("Unexpected %s statement in FORALL block at %C",
1768 gfc_ascii_statement (st));
1770 reject_statement ();
1774 while (st != ST_END_FORALL);
1780 static gfc_statement parse_executable (gfc_statement);
1782 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
1785 parse_if_block (void)
1794 accept_statement (ST_IF_BLOCK);
1796 top = gfc_state_stack->tail;
1797 push_state (&s, COMP_IF, gfc_new_block);
1799 new_st.op = EXEC_IF;
1800 d = add_statement ();
1802 d->expr = top->expr;
1808 st = parse_executable (ST_NONE);
1819 ("ELSE IF statement at %C cannot follow ELSE statement at %L",
1822 reject_statement ();
1826 d = new_level (gfc_state_stack->head);
1828 d->expr = new_st.expr;
1830 accept_statement (st);
1837 gfc_error ("Duplicate ELSE statements at %L and %C",
1839 reject_statement ();
1844 else_locus = gfc_current_locus;
1846 d = new_level (gfc_state_stack->head);
1849 accept_statement (st);
1857 unexpected_statement (st);
1861 while (st != ST_ENDIF);
1864 accept_statement (st);
1868 /* Parse a SELECT block. */
1871 parse_select_block (void)
1877 accept_statement (ST_SELECT_CASE);
1879 cp = gfc_state_stack->tail;
1880 push_state (&s, COMP_SELECT, gfc_new_block);
1882 /* Make sure that the next statement is a CASE or END SELECT. */
1885 st = next_statement ();
1888 if (st == ST_END_SELECT)
1890 /* Empty SELECT CASE is OK. */
1891 accept_statement (st);
1899 ("Expected a CASE or END SELECT statement following SELECT CASE "
1902 reject_statement ();
1905 /* At this point, we're got a nonempty select block. */
1906 cp = new_level (cp);
1909 accept_statement (st);
1913 st = parse_executable (ST_NONE);
1920 cp = new_level (gfc_state_stack->head);
1922 gfc_clear_new_st ();
1924 accept_statement (st);
1930 /* Can't have an executable statement because of
1931 parse_executable(). */
1933 unexpected_statement (st);
1937 while (st != ST_END_SELECT);
1940 accept_statement (st);
1944 /* Given a symbol, make sure it is not an iteration variable for a DO
1945 statement. This subroutine is called when the symbol is seen in a
1946 context that causes it to become redefined. If the symbol is an
1947 iterator, we generate an error message and return nonzero. */
1950 gfc_check_do_variable (gfc_symtree *st)
1954 for (s=gfc_state_stack; s; s = s->previous)
1955 if (s->do_variable == st)
1957 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
1958 "loop beginning at %L", st->name, &s->head->loc);
1966 /* Checks to see if the current statement label closes an enddo.
1967 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
1968 an error) if it incorrectly closes an ENDDO. */
1971 check_do_closure (void)
1975 if (gfc_statement_label == NULL)
1978 for (p = gfc_state_stack; p; p = p->previous)
1979 if (p->state == COMP_DO)
1983 return 0; /* No loops to close */
1985 if (p->ext.end_do_label == gfc_statement_label)
1988 if (p == gfc_state_stack)
1992 ("End of nonblock DO statement at %C is within another block");
1996 /* At this point, the label doesn't terminate the innermost loop.
1997 Make sure it doesn't terminate another one. */
1998 for (; p; p = p->previous)
1999 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
2001 gfc_error ("End of nonblock DO statement at %C is interwoven "
2002 "with another DO loop");
2010 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
2011 handled inside of parse_executable(), because they aren't really
2015 parse_do_block (void)
2022 s.ext.end_do_label = new_st.label;
2024 if (new_st.ext.iterator != NULL)
2025 stree = new_st.ext.iterator->var->symtree;
2029 accept_statement (ST_DO);
2031 top = gfc_state_stack->tail;
2032 push_state (&s, COMP_DO, gfc_new_block);
2034 s.do_variable = stree;
2036 top->block = new_level (top);
2037 top->block->op = EXEC_DO;
2040 st = parse_executable (ST_NONE);
2048 if (s.ext.end_do_label != NULL
2049 && s.ext.end_do_label != gfc_statement_label)
2051 ("Statement label in ENDDO at %C doesn't match DO label");
2053 if (gfc_statement_label != NULL)
2055 new_st.op = EXEC_NOP;
2060 case ST_IMPLIED_ENDDO:
2064 unexpected_statement (st);
2069 accept_statement (st);
2073 /* Accept a series of executable statements. We return the first
2074 statement that doesn't fit to the caller. Any block statements are
2075 passed on to the correct handler, which usually passes the buck
2078 static gfc_statement
2079 parse_executable (gfc_statement st)
2084 st = next_statement ();
2086 for (;; st = next_statement ())
2089 close_flag = check_do_closure ();
2094 case ST_END_PROGRAM:
2097 case ST_END_FUNCTION:
2101 case ST_END_SUBROUTINE:
2106 case ST_SELECT_CASE:
2108 ("%s statement at %C cannot terminate a non-block DO loop",
2109 gfc_ascii_statement (st));
2125 accept_statement (st);
2126 if (close_flag == 1)
2127 return ST_IMPLIED_ENDDO;
2134 case ST_SELECT_CASE:
2135 parse_select_block ();
2140 if (check_do_closure () == 1)
2141 return ST_IMPLIED_ENDDO;
2144 case ST_WHERE_BLOCK:
2145 parse_where_block ();
2148 case ST_FORALL_BLOCK:
2149 parse_forall_block ();
2163 /* Parse a series of contained program units. */
2165 static void parse_progunit (gfc_statement);
2168 /* Fix the symbols for sibling functions. These are incorrectly added to
2169 the child namespace as the parser didn't know about this procedure. */
2172 gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
2176 gfc_symbol *old_sym;
2178 sym->attr.referenced = 1;
2179 for (ns = siblings; ns; ns = ns->sibling)
2181 gfc_find_sym_tree (sym->name, ns, 0, &st);
2185 old_sym = st->n.sym;
2186 if ((old_sym->attr.flavor == FL_PROCEDURE
2187 || old_sym->ts.type == BT_UNKNOWN)
2188 && old_sym->ns == ns
2189 && ! old_sym->attr.contained)
2191 /* Replace it with the symbol from the parent namespace. */
2195 /* Free the old (local) symbol. */
2197 if (old_sym->refs == 0)
2198 gfc_free_symbol (old_sym);
2201 /* Do the same for any contained procedures. */
2202 gfc_fixup_sibling_symbols (sym, ns->contained);
2207 parse_contained (int module)
2209 gfc_namespace *ns, *parent_ns;
2210 gfc_state_data s1, s2;
2215 push_state (&s1, COMP_CONTAINS, NULL);
2216 parent_ns = gfc_current_ns;
2220 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
2222 gfc_current_ns->sibling = parent_ns->contained;
2223 parent_ns->contained = gfc_current_ns;
2225 st = next_statement ();
2234 accept_statement (st);
2237 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2240 /* For internal procedures, create/update the symbol in the
2241 parent namespace. */
2245 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2247 ("Contained procedure '%s' at %C is already ambiguous",
2248 gfc_new_block->name);
2251 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
2252 &gfc_new_block->declared_at) ==
2255 if (st == ST_FUNCTION)
2256 gfc_add_function (&sym->attr, sym->name,
2257 &gfc_new_block->declared_at);
2259 gfc_add_subroutine (&sym->attr, sym->name,
2260 &gfc_new_block->declared_at);
2264 gfc_commit_symbols ();
2267 sym = gfc_new_block;
2269 /* Mark this as a contained function, so it isn't replaced
2270 by other module functions. */
2271 sym->attr.contained = 1;
2272 sym->attr.referenced = 1;
2274 parse_progunit (ST_NONE);
2276 /* Fix up any sibling functions that refer to this one. */
2277 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2278 /* Or refer to any of its alternate entry points. */
2279 for (el = gfc_current_ns->entries; el; el = el->next)
2280 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
2282 gfc_current_ns->code = s2.head;
2283 gfc_current_ns = parent_ns;
2288 /* These statements are associated with the end of the host
2290 case ST_END_FUNCTION:
2292 case ST_END_PROGRAM:
2293 case ST_END_SUBROUTINE:
2294 accept_statement (st);
2298 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2299 gfc_ascii_statement (st));
2300 reject_statement ();
2304 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2305 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2307 /* The first namespace in the list is guaranteed to not have
2308 anything (worthwhile) in it. */
2310 gfc_current_ns = parent_ns;
2312 ns = gfc_current_ns->contained;
2313 gfc_current_ns->contained = ns->sibling;
2314 gfc_free_namespace (ns);
2320 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2323 parse_progunit (gfc_statement st)
2328 st = parse_spec (st);
2338 accept_statement (st);
2348 st = parse_executable (st);
2359 accept_statement (st);
2366 unexpected_statement (st);
2367 reject_statement ();
2368 st = next_statement ();
2374 for (p = gfc_state_stack; p; p = p->previous)
2375 if (p->state == COMP_CONTAINS)
2378 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2383 gfc_error ("CONTAINS statement at %C is already in a contained "
2385 st = next_statement ();
2389 parse_contained (0);
2392 gfc_current_ns->code = gfc_state_stack->head;
2396 /* Come here to complain about a global symbol already in use as
2400 global_used (gfc_gsymbol *sym, locus *where)
2405 where = &gfc_current_locus;
2415 case GSYM_SUBROUTINE:
2416 name = "SUBROUTINE";
2421 case GSYM_BLOCK_DATA:
2422 name = "BLOCK DATA";
2428 gfc_internal_error ("gfc_gsymbol_type(): Bad type");
2432 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
2433 gfc_new_block->name, where, name, &sym->where);
2437 /* Parse a block data program unit. */
2440 parse_block_data (void)
2443 static locus blank_locus;
2444 static int blank_block=0;
2447 gfc_current_ns->proc_name = gfc_new_block;
2448 gfc_current_ns->is_block_data = 1;
2450 if (gfc_new_block == NULL)
2453 gfc_error ("Blank BLOCK DATA at %C conflicts with "
2454 "prior BLOCK DATA at %L", &blank_locus);
2458 blank_locus = gfc_current_locus;
2463 s = gfc_get_gsymbol (gfc_new_block->name);
2464 if (s->type != GSYM_UNKNOWN)
2465 global_used(s, NULL);
2468 s->type = GSYM_BLOCK_DATA;
2469 s->where = gfc_current_locus;
2473 st = parse_spec (ST_NONE);
2475 while (st != ST_END_BLOCK_DATA)
2477 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
2478 gfc_ascii_statement (st));
2479 reject_statement ();
2480 st = next_statement ();
2485 /* Parse a module subprogram. */
2493 s = gfc_get_gsymbol (gfc_new_block->name);
2494 if (s->type != GSYM_UNKNOWN)
2495 global_used(s, NULL);
2498 s->type = GSYM_MODULE;
2499 s->where = gfc_current_locus;
2502 st = parse_spec (ST_NONE);
2511 parse_contained (1);
2515 accept_statement (st);
2519 gfc_error ("Unexpected %s statement in MODULE at %C",
2520 gfc_ascii_statement (st));
2522 reject_statement ();
2523 st = next_statement ();
2529 /* Add a procedure name to the global symbol table. */
2532 add_global_procedure (int sub)
2536 s = gfc_get_gsymbol(gfc_new_block->name);
2538 if (s->type != GSYM_UNKNOWN)
2539 global_used(s, NULL);
2542 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2543 s->where = gfc_current_locus;
2548 /* Add a program to the global symbol table. */
2551 add_global_program (void)
2555 if (gfc_new_block == NULL)
2557 s = gfc_get_gsymbol (gfc_new_block->name);
2559 if (s->type != GSYM_UNKNOWN)
2560 global_used(s, NULL);
2563 s->type = GSYM_PROGRAM;
2564 s->where = gfc_current_locus;
2569 /* Top level parser. */
2572 gfc_parse_file (void)
2574 int seen_program, errors_before, errors;
2575 gfc_state_data top, s;
2579 top.state = COMP_NONE;
2581 top.previous = NULL;
2582 top.head = top.tail = NULL;
2583 top.do_variable = NULL;
2585 gfc_state_stack = ⊤
2587 gfc_clear_new_st ();
2589 gfc_statement_label = NULL;
2591 if (setjmp (eof_buf))
2592 return FAILURE; /* Come here on unexpected EOF */
2596 /* Exit early for empty files. */
2602 st = next_statement ();
2611 goto duplicate_main;
2613 prog_locus = gfc_current_locus;
2615 push_state (&s, COMP_PROGRAM, gfc_new_block);
2616 main_program_symbol(gfc_current_ns);
2617 accept_statement (st);
2618 add_global_program ();
2619 parse_progunit (ST_NONE);
2623 add_global_procedure (1);
2624 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
2625 accept_statement (st);
2626 parse_progunit (ST_NONE);
2630 add_global_procedure (0);
2631 push_state (&s, COMP_FUNCTION, gfc_new_block);
2632 accept_statement (st);
2633 parse_progunit (ST_NONE);
2637 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
2638 accept_statement (st);
2639 parse_block_data ();
2643 push_state (&s, COMP_MODULE, gfc_new_block);
2644 accept_statement (st);
2646 gfc_get_errors (NULL, &errors_before);
2650 /* Anything else starts a nameless main program block. */
2653 goto duplicate_main;
2655 prog_locus = gfc_current_locus;
2657 push_state (&s, COMP_PROGRAM, gfc_new_block);
2658 main_program_symbol(gfc_current_ns);
2659 parse_progunit (st);
2663 gfc_current_ns->code = s.head;
2665 gfc_resolve (gfc_current_ns);
2667 /* Dump the parse tree if requested. */
2668 if (gfc_option.verbose)
2669 gfc_show_namespace (gfc_current_ns);
2671 gfc_get_errors (NULL, &errors);
2672 if (s.state == COMP_MODULE)
2674 gfc_dump_module (s.sym->name, errors_before == errors);
2675 if (errors == 0 && ! gfc_option.flag_no_backend)
2676 gfc_generate_module_code (gfc_current_ns);
2680 if (errors == 0 && ! gfc_option.flag_no_backend)
2681 gfc_generate_code (gfc_current_ns);
2692 /* If we see a duplicate main program, shut down. If the second
2693 instance is an implied main program, ie data decls or executable
2694 statements, we're in for lots of errors. */
2695 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
2696 reject_statement ();