diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-02-25 01:07:31 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-02-25 01:07:31 +0000 |
commit | 25c66e490c9e3b685c7c75d63987998ce0eab993 (patch) | |
tree | feff035e6fde071949c06603b5d1b5ab82c766cd /gcc | |
parent | 2012925d6a6c8a48b1d9052174fc80520205cfea (diff) | |
download | gcc-25c66e490c9e3b685c7c75d63987998ce0eab993.tar.gz |
* input.h (push_srcloc): New function.
(pop_srcloc): Likewise.
* toplev.c (push_srcloc): Define it.
(pop_srcloc): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32141 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/input.h | 5 | ||||
-rw-r--r-- | gcc/toplev.c | 51 |
3 files changed, 58 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5424ba46328..92aea2909df 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-02-24 Mark Mitchell <mark@codesourcery.com> + + * input.h (push_srcloc): New function. + (pop_srcloc): Likewise. + * toplev.c (push_srcloc): Define it. + (pop_srcloc): Likewise. + 2000-02-24 Richard Henderson <rth@cygnus.com> * flow.c (life_analysis): When collecting reg info, clear diff --git a/gcc/input.h b/gcc/input.h index 5de5cdeb0fe..3aee605f9b9 100644 --- a/gcc/input.h +++ b/gcc/input.h @@ -1,6 +1,6 @@ /* Declarations for variables relating to reading the source file. Used by parsers, lexical analyzers, and error message routines. - Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1993, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of GNU CC. @@ -45,3 +45,6 @@ extern struct file_stack *input_file_stack; /* Incremented on each change to input_file_stack. */ extern int input_file_stack_tick; + +extern void push_srcloc PARAMS ((char *name, int line)); +extern void pop_srcloc PARAMS ((void)); diff --git a/gcc/toplev.c b/gcc/toplev.c index 8a0fc8801e8..ada79f9ed13 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1996,6 +1996,52 @@ check_global_declarations (vec, len) } } +/* Save the current INPUT_FILENAME and LINENO on the top entry in the + INPUT_FILE_STACK. Push a new entry for FILE and LINE, and set the + INPUT_FILENAME and LINENO accordingly. */ + +void +push_srcloc (file, line) + char *file; + int line; +{ + struct file_stack *fs; + + if (input_file_stack) + { + input_file_stack->name = input_filename; + input_file_stack->line = lineno; + } + + fs = (struct file_stack *) xmalloc (sizeof (struct file_stack)); + fs->name = input_filename = file; + fs->line = lineno = line; + fs->indent_level = 0; + fs->next = input_file_stack; + input_file_stack = fs; + input_file_stack_tick++; +} + +/* Pop the top entry off the stack of presently open source files. + Restore the INPUT_FILENAME and LINENO from the new topmost entry on + the stack. */ + +void +pop_srcloc () +{ + struct file_stack *fs; + + fs = input_file_stack; + input_file_stack = fs->next; + free (fs); + input_file_stack_tick++; + /* The initial souce file is never popped. */ + if (!input_file_stack) + abort (); + input_filename = input_file_stack->name; + lineno = input_file_stack->line; +} + /* Compile an entire file of output from cpp, named NAME. Write a file of assembly output and various debugging dumps. */ @@ -2257,10 +2303,7 @@ compile_file (name) input_filename = name; /* Put an entry on the input file stack for the main input file. */ - input_file_stack - = (struct file_stack *) xmalloc (sizeof (struct file_stack)); - input_file_stack->next = 0; - input_file_stack->name = input_filename; + push_srcloc (input_filename, 0); /* Perform language-specific initialization. This may set main_input_filename. */ |