* Merge with edge-vector-mergepoint-20040918.
[official-gcc.git] / gcc / fortran / scanner.c
blob3c6ca19abd9df36e09c01d342757db76d62d3977
1 /* Character scanner.
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. */
22 /* Set of subroutines to (ultimately) return the next character to the
23 various matching subroutines. This file's job is to read files and
24 build up lines that are parsed by the parser. This means that we
25 handle continuation lines and "include" lines.
27 The first thing the scanner does is to load an entire file into
28 memory. We load the entire file into memory for a couple reasons.
29 The first is that we want to be able to deal with nonseekable input
30 (pipes, stdin) and there is a lot of backing up involved during
31 parsing.
33 The second is that we want to be able to print the locus of errors,
34 and an error on line 999999 could conflict with something on line
35 one. Given nonseekable input, we've got to store the whole thing.
37 One thing that helps are the column truncation limits that give us
38 an upper bound on the size of individual lines. We don't store the
39 truncated stuff.
41 From the scanner's viewpoint, the higher level subroutines ask for
42 new characters and do a lot of jumping backwards. */
44 #include "config.h"
45 #include <stdio.h>
46 #include <stdlib.h>
47 #include <string.h>
48 #include <strings.h>
50 #include "gfortran.h"
52 /* Structure for holding module and include file search path. */
53 typedef struct gfc_directorylist
55 char *path;
56 struct gfc_directorylist *next;
58 gfc_directorylist;
60 /* List of include file search directories. */
61 static gfc_directorylist *include_dirs;
63 static gfc_file *file_head, *current_file;
65 static int continue_flag, end_flag;
67 gfc_source_form gfc_current_form;
68 static gfc_linebuf *line_head, *line_tail;
70 locus gfc_current_locus;
71 char *gfc_source_file;
74 /* Main scanner initialization. */
76 void
77 gfc_scanner_init_1 (void)
79 file_head = NULL;
80 line_head = NULL;
81 line_tail = NULL;
83 end_flag = 0;
87 /* Main scanner destructor. */
89 void
90 gfc_scanner_done_1 (void)
92 gfc_linebuf *lb;
93 gfc_file *f;
95 while(line_head != NULL)
97 lb = line_head->next;
98 gfc_free(line_head);
99 line_head = lb;
102 while(file_head != NULL)
104 f = file_head->next;
105 gfc_free(file_head->filename);
106 gfc_free(file_head);
107 file_head = f;
113 /* Adds path to the list pointed to by list. */
115 void
116 gfc_add_include_path (const char *path)
118 gfc_directorylist *dir;
119 const char *p;
121 p = path;
122 while (*p == ' ' || *p == '\t') /* someone might do 'gfortran "-I include"' */
123 if (*p++ == '\0')
124 return;
126 dir = include_dirs;
127 if (!dir)
129 dir = include_dirs = gfc_getmem (sizeof (gfc_directorylist));
131 else
133 while (dir->next)
134 dir = dir->next;
136 dir->next = gfc_getmem (sizeof (gfc_directorylist));
137 dir = dir->next;
140 dir->next = NULL;
141 dir->path = gfc_getmem (strlen (p) + 2);
142 strcpy (dir->path, p);
143 strcat (dir->path, "/"); /* make '/' last character */
147 /* Release resources allocated for options. */
149 void
150 gfc_release_include_path (void)
152 gfc_directorylist *p;
154 gfc_free (gfc_option.module_dir);
155 while (include_dirs != NULL)
157 p = include_dirs;
158 include_dirs = include_dirs->next;
159 gfc_free (p->path);
160 gfc_free (p);
164 /* Opens file for reading, searching through the include directories
165 given if necessary. */
167 FILE *
168 gfc_open_included_file (const char *name)
170 char fullname[PATH_MAX];
171 gfc_directorylist *p;
172 FILE *f;
174 f = gfc_open_file (name);
175 if (f != NULL)
176 return f;
178 for (p = include_dirs; p; p = p->next)
180 if (strlen (p->path) + strlen (name) + 1 > PATH_MAX)
181 continue;
183 strcpy (fullname, p->path);
184 strcat (fullname, name);
186 f = gfc_open_file (fullname);
187 if (f != NULL)
188 return f;
191 return NULL;
194 /* Test to see if we're at the end of the main source file. */
197 gfc_at_end (void)
200 return end_flag;
204 /* Test to see if we're at the end of the current file. */
207 gfc_at_eof (void)
210 if (gfc_at_end ())
211 return 1;
213 if (line_head == NULL)
214 return 1; /* Null file */
216 if (gfc_current_locus.lb == NULL)
217 return 1;
219 return 0;
223 /* Test to see if we're at the beginning of a new line. */
226 gfc_at_bol (void)
228 if (gfc_at_eof ())
229 return 1;
231 return (gfc_current_locus.nextc == gfc_current_locus.lb->line);
235 /* Test to see if we're at the end of a line. */
238 gfc_at_eol (void)
241 if (gfc_at_eof ())
242 return 1;
244 return (*gfc_current_locus.nextc == '\0');
248 /* Advance the current line pointer to the next line. */
250 void
251 gfc_advance_line (void)
253 if (gfc_at_end ())
254 return;
256 if (gfc_current_locus.lb == NULL)
258 end_flag = 1;
259 return;
262 gfc_current_locus.lb = gfc_current_locus.lb->next;
264 if (gfc_current_locus.lb != NULL)
265 gfc_current_locus.nextc = gfc_current_locus.lb->line;
266 else
268 gfc_current_locus.nextc = NULL;
269 end_flag = 1;
274 /* Get the next character from the input, advancing gfc_current_file's
275 locus. When we hit the end of the line or the end of the file, we
276 start returning a '\n' in order to complete the current statement.
277 No Fortran line conventions are implemented here.
279 Requiring explicit advances to the next line prevents the parse
280 pointer from being on the wrong line if the current statement ends
281 prematurely. */
283 static int
284 next_char (void)
286 int c;
288 if (gfc_current_locus.nextc == NULL)
289 return '\n';
291 c = *gfc_current_locus.nextc++;
292 if (c == '\0')
294 gfc_current_locus.nextc--; /* Remain on this line. */
295 c = '\n';
298 return c;
301 /* Skip a comment. When we come here the parse pointer is positioned
302 immediately after the comment character. If we ever implement
303 compiler directives withing comments, here is where we parse the
304 directive. */
306 static void
307 skip_comment_line (void)
309 char c;
313 c = next_char ();
315 while (c != '\n');
317 gfc_advance_line ();
321 /* Comment lines are null lines, lines containing only blanks or lines
322 on which the first nonblank line is a '!'. */
324 static void
325 skip_free_comments (void)
327 locus start;
328 char c;
330 for (;;)
332 start = gfc_current_locus;
333 if (gfc_at_eof ())
334 break;
338 c = next_char ();
340 while (gfc_is_whitespace (c));
342 if (c == '\n')
344 gfc_advance_line ();
345 continue;
348 if (c == '!')
350 skip_comment_line ();
351 continue;
354 break;
357 gfc_current_locus = start;
361 /* Skip comment lines in fixed source mode. We have the same rules as
362 in skip_free_comment(), except that we can have a 'c', 'C' or '*'
363 in column 1. and a '!' cannot be in* column 6. */
365 static void
366 skip_fixed_comments (void)
368 locus start;
369 int col;
370 char c;
372 for (;;)
374 start = gfc_current_locus;
375 if (gfc_at_eof ())
376 break;
378 c = next_char ();
379 if (c == '\n')
381 gfc_advance_line ();
382 continue;
385 if (c == '!' || c == 'c' || c == 'C' || c == '*')
387 skip_comment_line ();
388 continue;
391 col = 1;
394 c = next_char ();
395 col++;
397 while (gfc_is_whitespace (c));
399 if (c == '\n')
401 gfc_advance_line ();
402 continue;
405 if (col != 6 && c == '!')
407 skip_comment_line ();
408 continue;
411 break;
414 gfc_current_locus = start;
418 /* Skips the current line if it is a comment. Assumes that we are at
419 the start of the current line. */
421 void
422 gfc_skip_comments (void)
425 if (!gfc_at_bol () || gfc_current_form == FORM_FREE)
426 skip_free_comments ();
427 else
428 skip_fixed_comments ();
432 /* Get the next character from the input, taking continuation lines
433 and end-of-line comments into account. This implies that comment
434 lines between continued lines must be eaten here. For higher-level
435 subroutines, this flattens continued lines into a single logical
436 line. The in_string flag denotes whether we're inside a character
437 context or not. */
440 gfc_next_char_literal (int in_string)
442 locus old_loc;
443 int i, c;
445 continue_flag = 0;
447 restart:
448 c = next_char ();
449 if (gfc_at_end ())
450 return c;
452 if (gfc_current_form == FORM_FREE)
455 if (!in_string && c == '!')
457 /* This line can't be continued */
460 c = next_char ();
462 while (c != '\n');
464 goto done;
467 if (c != '&')
468 goto done;
470 /* If the next nonblank character is a ! or \n, we've got a
471 continuation line. */
472 old_loc = gfc_current_locus;
474 c = next_char ();
475 while (gfc_is_whitespace (c))
476 c = next_char ();
478 /* Character constants to be continued cannot have commentary
479 after the '&'. */
481 if (in_string && c != '\n')
483 gfc_current_locus = old_loc;
484 c = '&';
485 goto done;
488 if (c != '!' && c != '\n')
490 gfc_current_locus = old_loc;
491 c = '&';
492 goto done;
495 continue_flag = 1;
496 if (c == '!')
497 skip_comment_line ();
498 else
499 gfc_advance_line ();
501 /* We've got a continuation line and need to find where it continues.
502 First eat any comment lines. */
503 gfc_skip_comments ();
505 /* Now that we have a non-comment line, probe ahead for the
506 first non-whitespace character. If it is another '&', then
507 reading starts at the next character, otherwise we must back
508 up to where the whitespace started and resume from there. */
510 old_loc = gfc_current_locus;
512 c = next_char ();
513 while (gfc_is_whitespace (c))
514 c = next_char ();
516 if (c != '&')
517 gfc_current_locus = old_loc;
520 else
522 /* Fixed form continuation. */
523 if (!in_string && c == '!')
525 /* Skip comment at end of line. */
528 c = next_char ();
530 while (c != '\n');
533 if (c != '\n')
534 goto done;
536 continue_flag = 1;
537 old_loc = gfc_current_locus;
539 gfc_advance_line ();
540 gfc_skip_comments ();
542 /* See if this line is a continuation line. */
543 for (i = 0; i < 5; i++)
545 c = next_char ();
546 if (c != ' ')
547 goto not_continuation;
550 c = next_char ();
551 if (c == '0' || c == ' ')
552 goto not_continuation;
555 /* Ready to read first character of continuation line, which might
556 be another continuation line! */
557 goto restart;
559 not_continuation:
560 c = '\n';
561 gfc_current_locus = old_loc;
563 done:
564 continue_flag = 0;
565 return c;
569 /* Get the next character of input, folded to lowercase. In fixed
570 form mode, we also ignore spaces. When matcher subroutines are
571 parsing character literals, they have to call
572 gfc_next_char_literal(). */
575 gfc_next_char (void)
577 int c;
581 c = gfc_next_char_literal (0);
583 while (gfc_current_form == FORM_FIXED && gfc_is_whitespace (c));
585 return TOLOWER (c);
590 gfc_peek_char (void)
592 locus old_loc;
593 int c;
595 old_loc = gfc_current_locus;
596 c = gfc_next_char ();
597 gfc_current_locus = old_loc;
599 return c;
603 /* Recover from an error. We try to get past the current statement
604 and get lined up for the next. The next statement follows a '\n'
605 or a ';'. We also assume that we are not within a character
606 constant, and deal with finding a '\'' or '"'. */
608 void
609 gfc_error_recovery (void)
611 char c, delim;
613 if (gfc_at_eof ())
614 return;
616 for (;;)
618 c = gfc_next_char ();
619 if (c == '\n' || c == ';')
620 break;
622 if (c != '\'' && c != '"')
624 if (gfc_at_eof ())
625 break;
626 continue;
628 delim = c;
630 for (;;)
632 c = next_char ();
634 if (c == delim)
635 break;
636 if (c == '\n')
637 goto done;
638 if (c == '\\')
640 c = next_char ();
641 if (c == '\n')
642 goto done;
645 if (gfc_at_eof ())
646 break;
649 done:
650 if (c == '\n')
651 gfc_advance_line ();
655 /* Read ahead until the next character to be read is not whitespace. */
657 void
658 gfc_gobble_whitespace (void)
660 locus old_loc;
661 int c;
665 old_loc = gfc_current_locus;
666 c = gfc_next_char_literal (0);
668 while (gfc_is_whitespace (c));
670 gfc_current_locus = old_loc;
674 /* Load a single line into pbuf.
676 If pbuf points to a NULL pointer, it is allocated.
677 We truncate lines that are too long, unless we're dealing with
678 preprocessor lines or if the option -ffixed-line-length-none is set,
679 in which case we reallocate the buffer to fit the entire line, if
680 need be.
681 In fixed mode, we expand a tab that occurs within the statement
682 label region to expand to spaces that leave the next character in
683 the source region. */
685 static void
686 load_line (FILE * input, char **pbuf, char *filename, int linenum)
688 int c, maxlen, i, trunc_flag, preprocessor_flag;
689 static int buflen = 0;
690 char *buffer;
692 /* Determine the maximum allowed line length. */
693 if (gfc_current_form == FORM_FREE)
694 maxlen = GFC_MAX_LINE;
695 else
696 maxlen = gfc_option.fixed_line_length;
698 if (*pbuf == NULL)
700 /* Allocate the line buffer, storing its length into buflen. */
701 if (maxlen > 0)
702 buflen = maxlen;
703 else
704 buflen = GFC_MAX_LINE;
706 *pbuf = gfc_getmem (buflen + 1);
709 i = 0;
710 buffer = *pbuf;
712 preprocessor_flag = 0;
713 c = fgetc (input);
714 if (c == '#')
715 /* In order to not truncate preprocessor lines, we have to
716 remember that this is one. */
717 preprocessor_flag = 1;
718 ungetc (c, input);
720 for (;;)
722 c = fgetc (input);
724 if (c == EOF)
725 break;
726 if (c == '\n')
727 break;
729 if (c == '\r')
730 continue; /* Gobble characters. */
731 if (c == '\0')
732 continue;
734 if (c == '\032')
736 /* Ctrl-Z ends the file. */
737 while (fgetc (input) != EOF);
738 break;
741 if (gfc_current_form == FORM_FIXED && c == '\t' && i <= 6)
742 { /* Tab expansion. */
743 while (i <= 6)
745 *buffer++ = ' ';
746 i++;
749 continue;
752 *buffer++ = c;
753 i++;
755 if (i >= buflen && (maxlen == 0 || preprocessor_flag))
757 /* Reallocate line buffer to double size to hold the
758 overlong line. */
759 buflen = buflen * 2;
760 *pbuf = xrealloc (*pbuf, buflen);
761 buffer = (*pbuf)+i;
763 else if (i >= buflen)
765 /* Truncate the rest of the line. */
766 trunc_flag = 1;
768 for (;;)
770 c = fgetc (input);
771 if (c == '\n' || c == EOF)
772 break;
774 if (gfc_option.warn_line_truncation
775 && trunc_flag
776 && !gfc_is_whitespace (c))
778 gfc_warning_now ("%s:%d: Line is being truncated",
779 filename, linenum);
780 trunc_flag = 0;
784 ungetc ('\n', input);
788 /* Pad lines to the selected line length in fixed form. */
789 if (gfc_current_form == FORM_FIXED
790 && gfc_option.fixed_line_length > 0
791 && !preprocessor_flag
792 && c != EOF)
793 while (i++ < buflen)
794 *buffer++ = ' ';
796 *buffer = '\0';
800 /* Get a gfc_file structure, initialize it and add it to
801 the file stack. */
803 static gfc_file *
804 get_file (char *name, enum lc_reason reason ATTRIBUTE_UNUSED)
806 gfc_file *f;
808 f = gfc_getmem (sizeof (gfc_file));
810 f->filename = gfc_getmem (strlen (name) + 1);
811 strcpy (f->filename, name);
813 f->next = file_head;
814 file_head = f;
816 f->included_by = current_file;
817 if (current_file != NULL)
818 f->inclusion_line = current_file->line;
820 #ifdef USE_MAPPED_LOCATION
821 linemap_add (&line_table, reason, false, f->filename, 1);
822 #endif
824 return f;
827 /* Deal with a line from the C preprocessor. The
828 initial octothorp has already been seen. */
830 static void
831 preprocessor_line (char *c)
833 bool flag[5];
834 int i, line;
835 char *filename;
836 gfc_file *f;
838 c++;
839 while (*c == ' ' || *c == '\t')
840 c++;
842 if (*c < '0' || *c > '9')
843 goto bad_cpp_line;
845 line = atoi (c);
847 c = strchr (c, ' ');
848 if (c == NULL)
849 /* Something we don't understand has happened. */
850 goto bad_cpp_line;
851 c += 2; /* Skip space and quote. */
852 filename = c;
854 c = strchr (c, '"'); /* Make filename end at quote. */
855 if (c == NULL)
856 /* Preprocessor line has no closing quote. */
857 goto bad_cpp_line;
858 *c++ = '\0';
860 /* Get flags. */
862 flag[1] = flag[2] = flag[3] = flag[4] = flag[5] = false;
864 for (;;)
866 c = strchr (c, ' ');
867 if (c == NULL)
868 break;
870 c++;
871 i = atoi (c);
873 if (1 <= i && i <= 4)
874 flag[i] = true;
877 /* Interpret flags. */
879 if (flag[1] || flag[3]) /* Starting new file. */
881 f = get_file (filename, LC_RENAME);
882 f->up = current_file;
883 current_file = f;
886 if (flag[2]) /* Ending current file. */
888 current_file = current_file->up;
891 current_file->line = line;
893 /* The name of the file can be a temporary file produced by
894 cpp. Replace the name if it is different. */
896 if (strcmp (current_file->filename, filename) != 0)
898 gfc_free (current_file->filename);
899 current_file->filename = gfc_getmem (strlen (filename) + 1);
900 strcpy (current_file->filename, filename);
903 return;
905 bad_cpp_line:
906 gfc_warning_now ("%s:%d: Unknown preprocessor directive",
907 current_file->filename, current_file->line);
908 current_file->line++;
912 static try load_file (char *, bool);
914 /* include_line()-- Checks a line buffer to see if it is an include
915 line. If so, we call load_file() recursively to load the included
916 file. We never return a syntax error because a statement like
917 "include = 5" is perfectly legal. We return false if no include was
918 processed or true if we matched an include. */
920 static bool
921 include_line (char *line)
923 char quote, *c, *begin, *stop;
925 c = line;
926 while (*c == ' ' || *c == '\t')
927 c++;
929 if (strncasecmp (c, "include", 7))
930 return false;
932 c += 7;
933 while (*c == ' ' || *c == '\t')
934 c++;
936 /* Find filename between quotes. */
938 quote = *c++;
939 if (quote != '"' && quote != '\'')
940 return false;
942 begin = c;
944 while (*c != quote && *c != '\0')
945 c++;
947 if (*c == '\0')
948 return false;
950 stop = c++;
952 while (*c == ' ' || *c == '\t')
953 c++;
955 if (*c != '\0' && *c != '!')
956 return false;
958 /* We have an include line at this point. */
960 *stop = '\0'; /* It's ok to trash the buffer, as this line won't be
961 read by anything else. */
963 load_file (begin, false);
964 return true;
967 /* Load a file into memory by calling load_line until the file ends. */
969 static try
970 load_file (char *filename, bool initial)
972 char *line;
973 gfc_linebuf *b;
974 gfc_file *f;
975 FILE *input;
976 int len;
978 for (f = current_file; f; f = f->up)
979 if (strcmp (filename, f->filename) == 0)
981 gfc_error_now ("File '%s' is being included recursively", filename);
982 return FAILURE;
985 if (initial)
987 input = gfc_open_file (filename);
988 if (input == NULL)
990 gfc_error_now ("Can't open file '%s'", filename);
991 return FAILURE;
994 else
996 input = gfc_open_included_file (filename);
997 if (input == NULL)
999 gfc_error_now ("Can't open included file '%s'", filename);
1000 return FAILURE;
1004 /* Load the file. */
1006 f = get_file (filename, initial ? LC_RENAME : LC_ENTER);
1007 f->up = current_file;
1008 current_file = f;
1009 current_file->line = 1;
1010 line = NULL;
1012 for (;;)
1014 load_line (input, &line, filename, current_file->line);
1016 len = strlen (line);
1017 if (feof (input) && len == 0)
1018 break;
1020 /* There are three things this line can be: a line of Fortran
1021 source, an include line or a C preprocessor directive. */
1023 if (line[0] == '#')
1025 preprocessor_line (line);
1026 continue;
1029 if (include_line (line))
1031 current_file->line++;
1032 continue;
1035 /* Add line. */
1037 b = gfc_getmem (gfc_linebuf_header_size + len + 1);
1039 #ifdef USE_MAPPED_LOCATION
1040 b->location
1041 = linemap_line_start (&line_table, current_file->line++, 120);
1042 #else
1043 b->linenum = current_file->line++;
1044 #endif
1045 b->file = current_file;
1046 strcpy (b->line, line);
1048 if (line_head == NULL)
1049 line_head = b;
1050 else
1051 line_tail->next = b;
1053 line_tail = b;
1056 /* Release the line buffer allocated in load_line. */
1057 gfc_free (line);
1059 fclose (input);
1061 current_file = current_file->up;
1062 #ifdef USE_MAPPED_LOCATION
1063 linemap_add (&line_table, LC_LEAVE, 0, NULL, 0);
1064 #endif
1065 return SUCCESS;
1069 /* Determine the source form from the filename extension. We assume
1070 case insensitivity. */
1072 static gfc_source_form
1073 form_from_filename (const char *filename)
1076 static const struct
1078 const char *extension;
1079 gfc_source_form form;
1081 exttype[] =
1084 ".f90", FORM_FREE}
1087 ".f95", FORM_FREE}
1090 ".f", FORM_FIXED}
1093 ".for", FORM_FIXED}
1096 "", FORM_UNKNOWN}
1097 }; /* sentinel value */
1099 gfc_source_form f_form;
1100 const char *fileext;
1101 int i;
1103 /* Find end of file name. */
1104 i = 0;
1105 while ((i < PATH_MAX) && (filename[i] != '\0'))
1106 i++;
1108 /* Improperly terminated or too-long filename. */
1109 if (i == PATH_MAX)
1110 return FORM_UNKNOWN;
1112 /* Find last period. */
1113 while (i >= 0 && (filename[i] != '.'))
1114 i--;
1116 /* Did we see a file extension? */
1117 if (i < 0)
1118 return FORM_UNKNOWN; /* Nope */
1120 /* Get file extension and compare it to others. */
1121 fileext = &(filename[i]);
1123 i = -1;
1124 f_form = FORM_UNKNOWN;
1127 i++;
1128 if (strcasecmp (fileext, exttype[i].extension) == 0)
1130 f_form = exttype[i].form;
1131 break;
1134 while (exttype[i].form != FORM_UNKNOWN);
1136 return f_form;
1140 /* Open a new file and start scanning from that file. Returns SUCCESS
1141 if everything went OK, FAILURE otherwise. If form == FORM_UKNOWN
1142 it tries to determine the source form from the filename, defaulting
1143 to free form. */
1146 gfc_new_file (const char *filename, gfc_source_form form)
1148 try result;
1150 if (filename != NULL)
1152 gfc_source_file = gfc_getmem (strlen (filename) + 1);
1153 strcpy (gfc_source_file, filename);
1155 else
1156 gfc_source_file = NULL;
1158 /* Decide which form the file will be read in as. */
1160 if (form != FORM_UNKNOWN)
1161 gfc_current_form = form;
1162 else
1164 gfc_current_form = form_from_filename (filename);
1166 if (gfc_current_form == FORM_UNKNOWN)
1168 gfc_current_form = FORM_FREE;
1169 gfc_warning_now ("Reading file '%s' as free form.",
1170 (filename[0] == '\0') ? "<stdin>" : filename);
1174 result = load_file (gfc_source_file, true);
1176 gfc_current_locus.lb = line_head;
1177 gfc_current_locus.nextc = (line_head == NULL) ? NULL : line_head->line;
1179 #if 0 /* Debugging aid. */
1180 for (; line_head; line_head = line_head->next)
1181 gfc_status ("%s:%3d %s\n", line_head->file->filename,
1182 #ifdef USE_MAPPED_LOCATION
1183 LOCATION_LINE (line_head->location),
1184 #else
1185 line_head->linenum,
1186 #endif
1187 line_head->line);
1189 exit (0);
1190 #endif
1192 return result;