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 ();
340 label_locus = gfc_current_locus;
342 gfc_gobble_whitespace ();
344 if (gfc_match_eos () == MATCH_YES)
347 ("Ignoring statement label in empty statement at %C");
348 gfc_free_st_label (gfc_statement_label);
349 gfc_statement_label = NULL;
355 return decode_statement ();
359 /* Get the next statement in fixed-form source. */
364 int label, digit_flag, i;
369 return decode_statement ();
371 /* Skip past the current label field, parsing a statement label if
372 one is there. This is a weird number parser, since the number is
373 contained within five columns and can have any kind of embedded
374 spaces. We also check for characters that make the rest of the
380 for (i = 0; i < 5; i++)
382 c = gfc_next_char_literal (0);
399 label = label * 10 + c - '0';
400 label_locus = gfc_current_locus;
404 /* Comments have already been skipped by the time we get
405 here so don't bother checking for them. */
408 gfc_buffer_error (0);
409 gfc_error ("Non-numeric character in statement label at %C");
417 gfc_warning_now ("Zero is not a valid statement label at %C");
420 /* We've found a valid statement label. */
421 gfc_statement_label = gfc_get_st_label (label);
425 /* Since this line starts a statement, it cannot be a continuation
426 of a previous statement. If we see something here besides a
427 space or zero, it must be a bad continuation line. */
429 c = gfc_next_char_literal (0);
433 if (c != ' ' && c!= '0')
435 gfc_buffer_error (0);
436 gfc_error ("Bad continuation line at %C");
440 /* Now that we've taken care of the statement label columns, we have
441 to make sure that the first nonblank character is not a '!'. If
442 it is, the rest of the line is a comment. */
446 loc = gfc_current_locus;
447 c = gfc_next_char_literal (0);
449 while (gfc_is_whitespace (c));
453 gfc_current_locus = loc;
455 if (gfc_match_eos () == MATCH_YES)
458 /* At this point, we've got a nonblank statement to parse. */
459 return decode_statement ();
463 gfc_warning ("Statement label in blank line will be " "ignored at %C");
469 /* Return the next non-ST_NONE statement to the caller. We also worry
470 about including files and the ends of include files at this stage. */
473 next_statement (void)
477 gfc_new_block = NULL;
481 gfc_statement_label = NULL;
482 gfc_buffer_error (1);
486 if (gfc_option.warn_line_truncation
487 && gfc_current_locus.lb->truncated)
488 gfc_warning_now ("Line truncated at %C");
493 gfc_skip_comments ();
502 (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
508 gfc_buffer_error (0);
511 check_statement_label (st);
517 /****************************** Parser ***********************************/
519 /* The parser subroutines are of type 'try' that fail if the file ends
522 /* Macros that expand to case-labels for various classes of
523 statements. Start with executable statements that directly do
526 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
527 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
528 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
529 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
530 case ST_PAUSE: case ST_STOP: case ST_WRITE: case ST_ASSIGNMENT: \
531 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
532 case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
533 case ST_LABEL_ASSIGNMENT: case ST_FLUSH
535 /* Statements that mark other executable statements. */
537 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \
538 case ST_WHERE_BLOCK: case ST_SELECT_CASE
540 /* Declaration statements */
542 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
543 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
544 case ST_TYPE: case ST_INTERFACE
546 /* Block end statements. Errors associated with interchanging these
547 are detected in gfc_match_end(). */
549 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
550 case ST_END_PROGRAM: case ST_END_SUBROUTINE
553 /* Push a new state onto the stack. */
556 push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
559 p->state = new_state;
560 p->previous = gfc_state_stack;
562 p->head = p->tail = NULL;
563 p->do_variable = NULL;
569 /* Pop the current state. */
575 gfc_state_stack = gfc_state_stack->previous;
579 /* Try to find the given state in the state stack. */
582 gfc_find_state (gfc_compile_state state)
586 for (p = gfc_state_stack; p; p = p->previous)
587 if (p->state == state)
590 return (p == NULL) ? FAILURE : SUCCESS;
594 /* Starts a new level in the statement list. */
597 new_level (gfc_code * q)
601 p = q->block = gfc_get_code ();
603 gfc_state_stack->head = gfc_state_stack->tail = p;
609 /* Add the current new_st code structure and adds it to the current
610 program unit. As a side-effect, it zeroes the new_st. */
620 p->loc = gfc_current_locus;
622 if (gfc_state_stack->head == NULL)
623 gfc_state_stack->head = p;
625 gfc_state_stack->tail->next = p;
627 while (p->next != NULL)
630 gfc_state_stack->tail = p;
638 /* Frees everything associated with the current statement. */
641 undo_new_statement (void)
643 gfc_free_statements (new_st.block);
644 gfc_free_statements (new_st.next);
645 gfc_free_statement (&new_st);
650 /* If the current statement has a statement label, make sure that it
651 is allowed to, or should have one. */
654 check_statement_label (gfc_statement st)
658 if (gfc_statement_label == NULL)
661 gfc_error ("FORMAT statement at %L does not have a statement label",
669 case ST_END_FUNCTION:
670 case ST_END_SUBROUTINE:
676 type = ST_LABEL_TARGET;
680 type = ST_LABEL_FORMAT;
683 /* Statement labels are not restricted from appearing on a
684 particular line. However, there are plenty of situations
685 where the resulting label can't be referenced. */
688 type = ST_LABEL_BAD_TARGET;
692 gfc_define_st_label (gfc_statement_label, type, &label_locus);
694 new_st.here = gfc_statement_label;
698 /* Figures out what the enclosing program unit is. This will be a
699 function, subroutine, program, block data or module. */
702 gfc_enclosing_unit (gfc_compile_state * result)
706 for (p = gfc_state_stack; p; p = p->previous)
707 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
708 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
709 || p->state == COMP_PROGRAM)
718 *result = COMP_PROGRAM;
723 /* Translate a statement enum to a string. */
726 gfc_ascii_statement (gfc_statement st)
732 case ST_ARITHMETIC_IF:
733 p = _("arithmetic IF");
739 p = _("attribute declaration");
769 p = _("data declaration");
777 case ST_DERIVED_DECL:
778 p = _("derived type declaration");
792 case ST_END_BLOCK_DATA:
793 p = "END BLOCK DATA";
804 case ST_END_FUNCTION:
810 case ST_END_INTERFACE:
822 case ST_END_SUBROUTINE:
823 p = "END SUBROUTINE";
843 case ST_FORALL_BLOCK: /* Fall through */
862 case ST_IMPLICIT_NONE:
865 case ST_IMPLIED_ENDDO:
866 p = _("implied END DO");
890 p = "MODULE PROCEDURE";
925 case ST_WHERE_BLOCK: /* Fall through */
935 case ST_POINTER_ASSIGNMENT:
936 p = _("pointer assignment");
947 case ST_STATEMENT_FUNCTION:
948 p = "STATEMENT FUNCTION";
950 case ST_LABEL_ASSIGNMENT:
951 p = "LABEL ASSIGNMENT";
954 p = "ENUM DEFINITION";
957 p = "ENUMERATOR DEFINITION";
963 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
970 /* Create a symbol for the main program and assign it to ns->proc_name. */
973 main_program_symbol (gfc_namespace * ns)
975 gfc_symbol *main_program;
976 symbol_attribute attr;
978 gfc_get_symbol ("MAIN__", ns, &main_program);
979 gfc_clear_attr (&attr);
980 attr.flavor = FL_PROCEDURE;
981 attr.proc = PROC_UNKNOWN;
983 attr.access = ACCESS_PUBLIC;
984 attr.is_main_program = 1;
985 main_program->attr = attr;
986 main_program->declared_at = gfc_current_locus;
987 ns->proc_name = main_program;
988 gfc_commit_symbols ();
992 /* Do whatever is necessary to accept the last statement. */
995 accept_statement (gfc_statement st)
1004 case ST_IMPLICIT_NONE:
1005 gfc_set_implicit_none ();
1014 gfc_current_ns->proc_name = gfc_new_block;
1017 /* If the statement is the end of a block, lay down a special code
1018 that allows a branch to the end of the block from within the
1023 if (gfc_statement_label != NULL)
1025 new_st.op = EXEC_NOP;
1031 /* The end-of-program unit statements do not get the special
1032 marker and require a statement of some sort if they are a
1035 case ST_END_PROGRAM:
1036 case ST_END_FUNCTION:
1037 case ST_END_SUBROUTINE:
1038 if (gfc_statement_label != NULL)
1040 new_st.op = EXEC_RETURN;
1056 gfc_commit_symbols ();
1057 gfc_warning_check ();
1058 gfc_clear_new_st ();
1062 /* Undo anything tentative that has been built for the current
1066 reject_statement (void)
1069 gfc_undo_symbols ();
1070 gfc_clear_warning ();
1071 undo_new_statement ();
1075 /* Generic complaint about an out of order statement. We also do
1076 whatever is necessary to clean up. */
1079 unexpected_statement (gfc_statement st)
1082 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1084 reject_statement ();
1088 /* Given the next statement seen by the matcher, make sure that it is
1089 in proper order with the last. This subroutine is initialized by
1090 calling it with an argument of ST_NONE. If there is a problem, we
1091 issue an error and return FAILURE. Otherwise we return SUCCESS.
1093 Individual parsers need to verify that the statements seen are
1094 valid before calling here, ie ENTRY statements are not allowed in
1095 INTERFACE blocks. The following diagram is taken from the standard:
1097 +---------------------------------------+
1098 | program subroutine function module |
1099 +---------------------------------------+
1101 |---------------------------------------+
1103 | +-----------+------------------+
1104 | | parameter | implicit |
1105 | +-----------+------------------+
1106 | format | | derived type |
1107 | entry | parameter | interface |
1108 | | data | specification |
1109 | | | statement func |
1110 | +-----------+------------------+
1111 | | data | executable |
1112 +--------+-----------+------------------+
1114 +---------------------------------------+
1115 | internal module/subprogram |
1116 +---------------------------------------+
1118 +---------------------------------------+
1125 { ORDER_START, ORDER_USE, ORDER_IMPLICIT_NONE, ORDER_IMPLICIT,
1126 ORDER_SPEC, ORDER_EXEC
1129 gfc_statement last_statement;
1135 verify_st_order (st_state * p, gfc_statement st)
1141 p->state = ORDER_START;
1145 if (p->state > ORDER_USE)
1147 p->state = ORDER_USE;
1150 case ST_IMPLICIT_NONE:
1151 if (p->state > ORDER_IMPLICIT_NONE)
1154 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1155 statement disqualifies a USE but not an IMPLICIT NONE.
1156 Duplicate IMPLICIT NONEs are caught when the implicit types
1159 p->state = ORDER_IMPLICIT_NONE;
1163 if (p->state > ORDER_IMPLICIT)
1165 p->state = ORDER_IMPLICIT;
1170 if (p->state < ORDER_IMPLICIT_NONE)
1171 p->state = ORDER_IMPLICIT_NONE;
1175 if (p->state >= ORDER_EXEC)
1177 if (p->state < ORDER_IMPLICIT)
1178 p->state = ORDER_IMPLICIT;
1182 if (p->state < ORDER_SPEC)
1183 p->state = ORDER_SPEC;
1188 case ST_DERIVED_DECL:
1190 if (p->state >= ORDER_EXEC)
1192 if (p->state < ORDER_SPEC)
1193 p->state = ORDER_SPEC;
1198 if (p->state < ORDER_EXEC)
1199 p->state = ORDER_EXEC;
1204 ("Unexpected %s statement in verify_st_order() at %C",
1205 gfc_ascii_statement (st));
1208 /* All is well, record the statement in case we need it next time. */
1209 p->where = gfc_current_locus;
1210 p->last_statement = st;
1214 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1215 gfc_ascii_statement (st),
1216 gfc_ascii_statement (p->last_statement), &p->where);
1222 /* Handle an unexpected end of file. This is a show-stopper... */
1224 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1227 unexpected_eof (void)
1231 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1233 /* Memory cleanup. Move to "second to last". */
1234 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1237 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1240 longjmp (eof_buf, 1);
1244 /* Parse a derived type. */
1247 parse_derived (void)
1249 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1256 accept_statement (ST_DERIVED_DECL);
1257 push_state (&s, COMP_DERIVED, gfc_new_block);
1259 gfc_new_block->component_access = ACCESS_PUBLIC;
1266 while (compiling_type)
1268 st = next_statement ();
1275 accept_statement (st);
1282 if (!seen_component)
1284 gfc_error ("Derived type definition at %C has no components");
1288 accept_statement (ST_END_TYPE);
1292 if (gfc_find_state (COMP_MODULE) == FAILURE)
1295 ("PRIVATE statement in TYPE at %C must be inside a MODULE");
1302 gfc_error ("PRIVATE statement at %C must precede "
1303 "structure components");
1310 gfc_error ("Duplicate PRIVATE statement at %C");
1314 s.sym->component_access = ACCESS_PRIVATE;
1315 accept_statement (ST_PRIVATE);
1322 gfc_error ("SEQUENCE statement at %C must precede "
1323 "structure components");
1328 if (gfc_current_block ()->attr.sequence)
1329 gfc_warning ("SEQUENCE attribute at %C already specified in "
1334 gfc_error ("Duplicate SEQUENCE statement at %C");
1339 gfc_add_sequence (&gfc_current_block ()->attr,
1340 gfc_current_block ()->name, NULL);
1344 unexpected_statement (st);
1349 /* Sanity checks on the structure. If the structure has the
1350 SEQUENCE attribute, then all component structures must also have
1352 if (error_flag == 0 && gfc_current_block ()->attr.sequence)
1353 for (c = gfc_current_block ()->components; c; c = c->next)
1355 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
1358 ("Component %s of SEQUENCE type declared at %C does not "
1359 "have the SEQUENCE attribute", c->ts.derived->name);
1368 /* Parse an ENUM. */
1377 int seen_enumerator = 0;
1381 push_state (&s, COMP_ENUM, gfc_new_block);
1385 while (compiling_enum)
1387 st = next_statement ();
1395 seen_enumerator = 1;
1396 accept_statement (st);
1401 if (!seen_enumerator)
1403 gfc_error ("ENUM declaration at %C has no ENUMERATORS");
1406 accept_statement (st);
1410 gfc_free_enum_history ();
1411 unexpected_statement (st);
1418 /* Parse an interface. We must be able to deal with the possibility
1419 of recursive interfaces. The parse_spec() subroutine is mutually
1420 recursive with parse_interface(). */
1422 static gfc_statement parse_spec (gfc_statement);
1425 parse_interface (void)
1427 gfc_compile_state new_state, current_state;
1428 gfc_symbol *prog_unit, *sym;
1429 gfc_interface_info save;
1430 gfc_state_data s1, s2;
1433 accept_statement (ST_INTERFACE);
1435 current_interface.ns = gfc_current_ns;
1436 save = current_interface;
1438 sym = (current_interface.type == INTERFACE_GENERIC
1439 || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
1441 push_state (&s1, COMP_INTERFACE, sym);
1442 current_state = COMP_NONE;
1445 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
1447 st = next_statement ();
1454 new_state = COMP_SUBROUTINE;
1455 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1456 gfc_new_block->formal, NULL);
1460 new_state = COMP_FUNCTION;
1461 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1462 gfc_new_block->formal, NULL);
1465 case ST_MODULE_PROC: /* The module procedure matcher makes
1466 sure the context is correct. */
1467 accept_statement (st);
1468 gfc_free_namespace (gfc_current_ns);
1471 case ST_END_INTERFACE:
1472 gfc_free_namespace (gfc_current_ns);
1473 gfc_current_ns = current_interface.ns;
1477 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1478 gfc_ascii_statement (st));
1479 reject_statement ();
1480 gfc_free_namespace (gfc_current_ns);
1485 /* Make sure that a generic interface has only subroutines or
1486 functions and that the generic name has the right attribute. */
1487 if (current_interface.type == INTERFACE_GENERIC)
1489 if (current_state == COMP_NONE)
1491 if (new_state == COMP_FUNCTION)
1492 gfc_add_function (&sym->attr, sym->name, NULL);
1493 else if (new_state == COMP_SUBROUTINE)
1494 gfc_add_subroutine (&sym->attr, sym->name, NULL);
1496 current_state = new_state;
1500 if (new_state != current_state)
1502 if (new_state == COMP_SUBROUTINE)
1504 ("SUBROUTINE at %C does not belong in a generic function "
1507 if (new_state == COMP_FUNCTION)
1509 ("FUNCTION at %C does not belong in a generic subroutine "
1515 push_state (&s2, new_state, gfc_new_block);
1516 accept_statement (st);
1517 prog_unit = gfc_new_block;
1518 prog_unit->formal_ns = gfc_current_ns;
1521 /* Read data declaration statements. */
1522 st = parse_spec (ST_NONE);
1524 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1526 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1527 gfc_ascii_statement (st));
1528 reject_statement ();
1532 current_interface = save;
1533 gfc_add_interface (prog_unit);
1543 /* Parse a set of specification statements. Returns the statement
1544 that doesn't fit. */
1546 static gfc_statement
1547 parse_spec (gfc_statement st)
1551 verify_st_order (&ss, ST_NONE);
1553 st = next_statement ();
1563 case ST_DATA: /* Not allowed in interfaces */
1564 if (gfc_current_state () == COMP_INTERFACE)
1570 case ST_IMPLICIT_NONE:
1575 case ST_DERIVED_DECL:
1577 if (verify_st_order (&ss, st) == FAILURE)
1579 reject_statement ();
1580 st = next_statement ();
1590 case ST_DERIVED_DECL:
1596 if (gfc_current_state () != COMP_MODULE)
1598 gfc_error ("%s statement must appear in a MODULE",
1599 gfc_ascii_statement (st));
1603 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1605 gfc_error ("%s statement at %C follows another accessibility "
1606 "specification", gfc_ascii_statement (st));
1610 gfc_current_ns->default_access = (st == ST_PUBLIC)
1611 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1619 accept_statement (st);
1620 st = next_statement ();
1624 accept_statement (st);
1626 st = next_statement ();
1637 /* Parse a WHERE block, (not a simple WHERE statement). */
1640 parse_where_block (void)
1642 int seen_empty_else;
1647 accept_statement (ST_WHERE_BLOCK);
1648 top = gfc_state_stack->tail;
1650 push_state (&s, COMP_WHERE, gfc_new_block);
1652 d = add_statement ();
1653 d->expr = top->expr;
1659 seen_empty_else = 0;
1663 st = next_statement ();
1669 case ST_WHERE_BLOCK:
1670 parse_where_block ();
1675 accept_statement (st);
1679 if (seen_empty_else)
1682 ("ELSEWHERE statement at %C follows previous unmasked "
1687 if (new_st.expr == NULL)
1688 seen_empty_else = 1;
1690 d = new_level (gfc_state_stack->head);
1692 d->expr = new_st.expr;
1694 accept_statement (st);
1699 accept_statement (st);
1703 gfc_error ("Unexpected %s statement in WHERE block at %C",
1704 gfc_ascii_statement (st));
1705 reject_statement ();
1710 while (st != ST_END_WHERE);
1716 /* Parse a FORALL block (not a simple FORALL statement). */
1719 parse_forall_block (void)
1725 accept_statement (ST_FORALL_BLOCK);
1726 top = gfc_state_stack->tail;
1728 push_state (&s, COMP_FORALL, gfc_new_block);
1730 d = add_statement ();
1731 d->op = EXEC_FORALL;
1736 st = next_statement ();
1741 case ST_POINTER_ASSIGNMENT:
1744 accept_statement (st);
1747 case ST_WHERE_BLOCK:
1748 parse_where_block ();
1751 case ST_FORALL_BLOCK:
1752 parse_forall_block ();
1756 accept_statement (st);
1763 gfc_error ("Unexpected %s statement in FORALL block at %C",
1764 gfc_ascii_statement (st));
1766 reject_statement ();
1770 while (st != ST_END_FORALL);
1776 static gfc_statement parse_executable (gfc_statement);
1778 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
1781 parse_if_block (void)
1790 accept_statement (ST_IF_BLOCK);
1792 top = gfc_state_stack->tail;
1793 push_state (&s, COMP_IF, gfc_new_block);
1795 new_st.op = EXEC_IF;
1796 d = add_statement ();
1798 d->expr = top->expr;
1804 st = parse_executable (ST_NONE);
1815 ("ELSE IF statement at %C cannot follow ELSE statement at %L",
1818 reject_statement ();
1822 d = new_level (gfc_state_stack->head);
1824 d->expr = new_st.expr;
1826 accept_statement (st);
1833 gfc_error ("Duplicate ELSE statements at %L and %C",
1835 reject_statement ();
1840 else_locus = gfc_current_locus;
1842 d = new_level (gfc_state_stack->head);
1845 accept_statement (st);
1853 unexpected_statement (st);
1857 while (st != ST_ENDIF);
1860 accept_statement (st);
1864 /* Parse a SELECT block. */
1867 parse_select_block (void)
1873 accept_statement (ST_SELECT_CASE);
1875 cp = gfc_state_stack->tail;
1876 push_state (&s, COMP_SELECT, gfc_new_block);
1878 /* Make sure that the next statement is a CASE or END SELECT. */
1881 st = next_statement ();
1884 if (st == ST_END_SELECT)
1886 /* Empty SELECT CASE is OK. */
1887 accept_statement (st);
1895 ("Expected a CASE or END SELECT statement following SELECT CASE "
1898 reject_statement ();
1901 /* At this point, we're got a nonempty select block. */
1902 cp = new_level (cp);
1905 accept_statement (st);
1909 st = parse_executable (ST_NONE);
1916 cp = new_level (gfc_state_stack->head);
1918 gfc_clear_new_st ();
1920 accept_statement (st);
1926 /* Can't have an executable statement because of
1927 parse_executable(). */
1929 unexpected_statement (st);
1933 while (st != ST_END_SELECT);
1936 accept_statement (st);
1940 /* Given a symbol, make sure it is not an iteration variable for a DO
1941 statement. This subroutine is called when the symbol is seen in a
1942 context that causes it to become redefined. If the symbol is an
1943 iterator, we generate an error message and return nonzero. */
1946 gfc_check_do_variable (gfc_symtree *st)
1950 for (s=gfc_state_stack; s; s = s->previous)
1951 if (s->do_variable == st)
1953 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
1954 "loop beginning at %L", st->name, &s->head->loc);
1962 /* Checks to see if the current statement label closes an enddo.
1963 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
1964 an error) if it incorrectly closes an ENDDO. */
1967 check_do_closure (void)
1971 if (gfc_statement_label == NULL)
1974 for (p = gfc_state_stack; p; p = p->previous)
1975 if (p->state == COMP_DO)
1979 return 0; /* No loops to close */
1981 if (p->ext.end_do_label == gfc_statement_label)
1984 if (p == gfc_state_stack)
1988 ("End of nonblock DO statement at %C is within another block");
1992 /* At this point, the label doesn't terminate the innermost loop.
1993 Make sure it doesn't terminate another one. */
1994 for (; p; p = p->previous)
1995 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
1997 gfc_error ("End of nonblock DO statement at %C is interwoven "
1998 "with another DO loop");
2006 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
2007 handled inside of parse_executable(), because they aren't really
2011 parse_do_block (void)
2018 s.ext.end_do_label = new_st.label;
2020 if (new_st.ext.iterator != NULL)
2021 stree = new_st.ext.iterator->var->symtree;
2025 accept_statement (ST_DO);
2027 top = gfc_state_stack->tail;
2028 push_state (&s, COMP_DO, gfc_new_block);
2030 s.do_variable = stree;
2032 top->block = new_level (top);
2033 top->block->op = EXEC_DO;
2036 st = parse_executable (ST_NONE);
2044 if (s.ext.end_do_label != NULL
2045 && s.ext.end_do_label != gfc_statement_label)
2047 ("Statement label in ENDDO at %C doesn't match DO label");
2049 if (gfc_statement_label != NULL)
2051 new_st.op = EXEC_NOP;
2056 case ST_IMPLIED_ENDDO:
2060 unexpected_statement (st);
2065 accept_statement (st);
2069 /* Accept a series of executable statements. We return the first
2070 statement that doesn't fit to the caller. Any block statements are
2071 passed on to the correct handler, which usually passes the buck
2074 static gfc_statement
2075 parse_executable (gfc_statement st)
2080 st = next_statement ();
2082 for (;; st = next_statement ())
2085 close_flag = check_do_closure ();
2090 case ST_END_PROGRAM:
2093 case ST_END_FUNCTION:
2097 case ST_END_SUBROUTINE:
2102 case ST_SELECT_CASE:
2104 ("%s statement at %C cannot terminate a non-block DO loop",
2105 gfc_ascii_statement (st));
2121 accept_statement (st);
2122 if (close_flag == 1)
2123 return ST_IMPLIED_ENDDO;
2130 case ST_SELECT_CASE:
2131 parse_select_block ();
2136 if (check_do_closure () == 1)
2137 return ST_IMPLIED_ENDDO;
2140 case ST_WHERE_BLOCK:
2141 parse_where_block ();
2144 case ST_FORALL_BLOCK:
2145 parse_forall_block ();
2159 /* Parse a series of contained program units. */
2161 static void parse_progunit (gfc_statement);
2164 /* Fix the symbols for sibling functions. These are incorrectly added to
2165 the child namespace as the parser didn't know about this procedure. */
2168 gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
2172 gfc_symbol *old_sym;
2174 sym->attr.referenced = 1;
2175 for (ns = siblings; ns; ns = ns->sibling)
2177 gfc_find_sym_tree (sym->name, ns, 0, &st);
2181 old_sym = st->n.sym;
2182 if ((old_sym->attr.flavor == FL_PROCEDURE
2183 || old_sym->ts.type == BT_UNKNOWN)
2184 && old_sym->ns == ns
2185 && ! old_sym->attr.contained)
2187 /* Replace it with the symbol from the parent namespace. */
2191 /* Free the old (local) symbol. */
2193 if (old_sym->refs == 0)
2194 gfc_free_symbol (old_sym);
2197 /* Do the same for any contained procedures. */
2198 gfc_fixup_sibling_symbols (sym, ns->contained);
2203 parse_contained (int module)
2205 gfc_namespace *ns, *parent_ns;
2206 gfc_state_data s1, s2;
2211 push_state (&s1, COMP_CONTAINS, NULL);
2212 parent_ns = gfc_current_ns;
2216 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
2218 gfc_current_ns->sibling = parent_ns->contained;
2219 parent_ns->contained = gfc_current_ns;
2221 st = next_statement ();
2230 accept_statement (st);
2233 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2236 /* For internal procedures, create/update the symbol in the
2237 parent namespace. */
2241 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2243 ("Contained procedure '%s' at %C is already ambiguous",
2244 gfc_new_block->name);
2247 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
2248 &gfc_new_block->declared_at) ==
2251 if (st == ST_FUNCTION)
2252 gfc_add_function (&sym->attr, sym->name,
2253 &gfc_new_block->declared_at);
2255 gfc_add_subroutine (&sym->attr, sym->name,
2256 &gfc_new_block->declared_at);
2260 gfc_commit_symbols ();
2263 sym = gfc_new_block;
2265 /* Mark this as a contained function, so it isn't replaced
2266 by other module functions. */
2267 sym->attr.contained = 1;
2268 sym->attr.referenced = 1;
2270 parse_progunit (ST_NONE);
2272 /* Fix up any sibling functions that refer to this one. */
2273 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2274 /* Or refer to any of its alternate entry points. */
2275 for (el = gfc_current_ns->entries; el; el = el->next)
2276 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
2278 gfc_current_ns->code = s2.head;
2279 gfc_current_ns = parent_ns;
2284 /* These statements are associated with the end of the host
2286 case ST_END_FUNCTION:
2288 case ST_END_PROGRAM:
2289 case ST_END_SUBROUTINE:
2290 accept_statement (st);
2294 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2295 gfc_ascii_statement (st));
2296 reject_statement ();
2300 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2301 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2303 /* The first namespace in the list is guaranteed to not have
2304 anything (worthwhile) in it. */
2306 gfc_current_ns = parent_ns;
2308 ns = gfc_current_ns->contained;
2309 gfc_current_ns->contained = ns->sibling;
2310 gfc_free_namespace (ns);
2316 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2319 parse_progunit (gfc_statement st)
2324 st = parse_spec (st);
2334 accept_statement (st);
2344 st = parse_executable (st);
2355 accept_statement (st);
2362 unexpected_statement (st);
2363 reject_statement ();
2364 st = next_statement ();
2370 for (p = gfc_state_stack; p; p = p->previous)
2371 if (p->state == COMP_CONTAINS)
2374 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2379 gfc_error ("CONTAINS statement at %C is already in a contained "
2381 st = next_statement ();
2385 parse_contained (0);
2388 gfc_current_ns->code = gfc_state_stack->head;
2392 /* Come here to complain about a global symbol already in use as
2396 global_used (gfc_gsymbol *sym, locus *where)
2401 where = &gfc_current_locus;
2411 case GSYM_SUBROUTINE:
2412 name = "SUBROUTINE";
2417 case GSYM_BLOCK_DATA:
2418 name = "BLOCK DATA";
2424 gfc_internal_error ("gfc_gsymbol_type(): Bad type");
2428 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
2429 gfc_new_block->name, where, name, &sym->where);
2433 /* Parse a block data program unit. */
2436 parse_block_data (void)
2439 static locus blank_locus;
2440 static int blank_block=0;
2443 gfc_current_ns->proc_name = gfc_new_block;
2444 gfc_current_ns->is_block_data = 1;
2446 if (gfc_new_block == NULL)
2449 gfc_error ("Blank BLOCK DATA at %C conflicts with "
2450 "prior BLOCK DATA at %L", &blank_locus);
2454 blank_locus = gfc_current_locus;
2459 s = gfc_get_gsymbol (gfc_new_block->name);
2460 if (s->type != GSYM_UNKNOWN)
2461 global_used(s, NULL);
2464 s->type = GSYM_BLOCK_DATA;
2465 s->where = gfc_current_locus;
2469 st = parse_spec (ST_NONE);
2471 while (st != ST_END_BLOCK_DATA)
2473 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
2474 gfc_ascii_statement (st));
2475 reject_statement ();
2476 st = next_statement ();
2481 /* Parse a module subprogram. */
2489 s = gfc_get_gsymbol (gfc_new_block->name);
2490 if (s->type != GSYM_UNKNOWN)
2491 global_used(s, NULL);
2494 s->type = GSYM_MODULE;
2495 s->where = gfc_current_locus;
2498 st = parse_spec (ST_NONE);
2507 parse_contained (1);
2511 accept_statement (st);
2515 gfc_error ("Unexpected %s statement in MODULE at %C",
2516 gfc_ascii_statement (st));
2518 reject_statement ();
2519 st = next_statement ();
2525 /* Add a procedure name to the global symbol table. */
2528 add_global_procedure (int sub)
2532 s = gfc_get_gsymbol(gfc_new_block->name);
2534 if (s->type != GSYM_UNKNOWN)
2535 global_used(s, NULL);
2538 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2539 s->where = gfc_current_locus;
2544 /* Add a program to the global symbol table. */
2547 add_global_program (void)
2551 if (gfc_new_block == NULL)
2553 s = gfc_get_gsymbol (gfc_new_block->name);
2555 if (s->type != GSYM_UNKNOWN)
2556 global_used(s, NULL);
2559 s->type = GSYM_PROGRAM;
2560 s->where = gfc_current_locus;
2565 /* Top level parser. */
2568 gfc_parse_file (void)
2570 int seen_program, errors_before, errors;
2571 gfc_state_data top, s;
2575 top.state = COMP_NONE;
2577 top.previous = NULL;
2578 top.head = top.tail = NULL;
2579 top.do_variable = NULL;
2581 gfc_state_stack = ⊤
2583 gfc_clear_new_st ();
2585 gfc_statement_label = NULL;
2587 if (setjmp (eof_buf))
2588 return FAILURE; /* Come here on unexpected EOF */
2592 /* Exit early for empty files. */
2598 st = next_statement ();
2607 goto duplicate_main;
2609 prog_locus = gfc_current_locus;
2611 push_state (&s, COMP_PROGRAM, gfc_new_block);
2612 main_program_symbol(gfc_current_ns);
2613 accept_statement (st);
2614 add_global_program ();
2615 parse_progunit (ST_NONE);
2619 add_global_procedure (1);
2620 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
2621 accept_statement (st);
2622 parse_progunit (ST_NONE);
2626 add_global_procedure (0);
2627 push_state (&s, COMP_FUNCTION, gfc_new_block);
2628 accept_statement (st);
2629 parse_progunit (ST_NONE);
2633 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
2634 accept_statement (st);
2635 parse_block_data ();
2639 push_state (&s, COMP_MODULE, gfc_new_block);
2640 accept_statement (st);
2642 gfc_get_errors (NULL, &errors_before);
2646 /* Anything else starts a nameless main program block. */
2649 goto duplicate_main;
2651 prog_locus = gfc_current_locus;
2653 push_state (&s, COMP_PROGRAM, gfc_new_block);
2654 main_program_symbol(gfc_current_ns);
2655 parse_progunit (st);
2659 gfc_current_ns->code = s.head;
2661 gfc_resolve (gfc_current_ns);
2663 /* Dump the parse tree if requested. */
2664 if (gfc_option.verbose)
2665 gfc_show_namespace (gfc_current_ns);
2667 gfc_get_errors (NULL, &errors);
2668 if (s.state == COMP_MODULE)
2670 gfc_dump_module (s.sym->name, errors_before == errors);
2671 if (errors == 0 && ! gfc_option.flag_no_backend)
2672 gfc_generate_module_code (gfc_current_ns);
2676 if (errors == 0 && ! gfc_option.flag_no_backend)
2677 gfc_generate_code (gfc_current_ns);
2688 /* If we see a duplicate main program, shut down. If the second
2689 instance is an implied main program, ie data decls or executable
2690 statements, we're in for lots of errors. */
2691 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
2692 reject_statement ();