summaryrefslogtreecommitdiffstats
path: root/gcc/fortran/gfortran.h
diff options
context:
space:
mode:
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-15 17:31:32 +0000
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-15 17:31:32 +0000
commitb0057e95fbd739a367c67164d1107f5d955dfcd8 (patch)
tree78eca888e2f4be9f6b0c5e4db6a69c5180d050c6 /gcc/fortran/gfortran.h
parent1eb397b0a23e2a60bae64ee80c76f005199d807e (diff)
downloadppe42-gcc-b0057e95fbd739a367c67164d1107f5d955dfcd8.tar.gz
ppe42-gcc-b0057e95fbd739a367c67164d1107f5d955dfcd8.zip
PR fortran/13702
(Port from g95) * gfortran.h (gfc_linebuf): New typedef. (linebuf): Remove. (gfc_file): Revamped, use new gfc_linebuf. (locus): Revamped, use new types. (gfc_current_file): Remove. (gfc_current_form, gfc_source_file): New global variables. * match.c (gfc_match_space, gfc_match_strings): Use gfc_current_form to find source form. * module.c (gfc_dump_module): Use gfc_source_file when printing module header. * error.c (show_locus, show_loci) Use new data structures to print locus. * scanner.c (first_file, first_duplicated_file, gfc_current_file): Remove. (file_head, current_file, gfc_current_form, line_head, line_tail, gfc_current_locus1, gfc_source_file): New global variables. (gfc_scanner_init1): Set new global variables. (gfc_scanner_done1): Free new data structures. (gfc_current_locus): Return pointer to gfc_current_locus1. (gfc_set_locus): Set gfc_current_locus1. (gfc_at_eof): Set new variables. (gfc_at_bol, gfc_at_eol, gfc_advance_line, gfc_next_char): Adapt to new locus structure. (gfc_check_include): Remove. (skip_free_comments, skip_fixed_comments): Use gfc_current_locus1. (gfc_skip_comments): Use gfc_current_form, find locus with gfc_current_locus1. (gfc_next_char): Use gfc_current_form. (gfc_peek_char, gfc_gobble_whitespace): Use gfc_current_locus1. (load_line): Use gfc_current_form. Recognize ^Z as EOF. Fix comment formatting. (get_file): New function. (preprocessor_line, include_line): New functions. (load_file): Move down, rewrite to match new data structures. (gfc_new_file): Rewrite to match new data structures. * parse.c (next_statement): Remove code which is now useless. Use gfc_source_form and gfc_source_file where appropriate. * trans-decl.c (gfc_get_label_decl): adapt to new data structures when determining locus of frontend code. * trans-io.c (set_error_locus): Same. * trans.c (gfc_get_backend_locus, gfc_set_backend_locus): Likewise. * lang-specs.h (@f77-cpp-input, @f95-cpp-input): Remove '-P' from preprocessor flags. (all): Add missing initializers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81888 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/gfortran.h')
-rw-r--r--gcc/fortran/gfortran.h70
1 files changed, 33 insertions, 37 deletions
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 627eb8df96b..498e63b6c9b 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -413,35 +413,40 @@ typedef struct
symbol_attribute;
-typedef struct
-{
- char *nextc;
- int line; /* line within the lp structure */
- struct linebuf *lp;
- struct gfc_file *file;
-}
-locus;
+/* The following three structures are used to identify a location in
+ the sources.
+
+ gfc_file is used to maintain a tree of the source files and how
+ they include each other
-/* The linebuf structure deserves some explanation. This is the
- primary structure for holding lines. A source file is stored in a
- singly linked list of these structures. Each structure holds an
- integer number of lines. The line[] member is actually an array of
- pointers that point to the NULL-terminated lines. This list grows
- upwards, and the actual lines are stored at the top of the
- structure and grow downward. Each structure is packed with as many
- lines as it can hold, then another linebuf is allocated. */
+ gfc_linebuf holds a single line of source code and information
+ which file it resides in
-/* Chosen so that sizeof(linebuf) = 4096 on most machines */
-#define LINEBUF_SIZE 4080
+ locus point to the sourceline and the character in the source
+ line.
+*/
-typedef struct linebuf
+typedef struct gfc_file
{
- int start_line, lines;
- struct linebuf *next;
- char *line[1];
- char buf[LINEBUF_SIZE];
-}
-linebuf;
+ struct gfc_file *included_by, *next, *up;
+ int inclusion_line, line;
+ char *filename;
+} gfc_file;
+
+typedef struct gfc_linebuf
+{
+ int linenum;
+ struct gfc_file *file;
+ struct gfc_linebuf *next;
+
+ char line[];
+} gfc_linebuf;
+
+typedef struct
+{
+ char *nextc;
+ gfc_linebuf *lb;
+} locus;
#include <limits.h>
@@ -451,17 +456,6 @@ linebuf;
#endif
-typedef struct gfc_file
-{
- char filename[PATH_MAX + 1];
- gfc_source_form form;
- struct gfc_file *included_by, *next;
- locus loc;
- struct linebuf *start;
-}
-gfc_file;
-
-
extern int gfc_suppress_error;
@@ -1308,7 +1302,9 @@ void gfc_error_recovery (void);
void gfc_gobble_whitespace (void);
try gfc_new_file (const char *, gfc_source_form);
-extern gfc_file *gfc_current_file;
+extern gfc_source_form gfc_current_form;
+extern char *gfc_source_file;
+/* extern locus gfc_current_locus; */
/* misc.c */
void *gfc_getmem (size_t) ATTRIBUTE_MALLOC;
OpenPOWER on IntegriCloud