summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-25 01:07:31 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-25 01:07:31 +0000
commit25c66e490c9e3b685c7c75d63987998ce0eab993 (patch)
treefeff035e6fde071949c06603b5d1b5ab82c766cd /gcc
parent2012925d6a6c8a48b1d9052174fc80520205cfea (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/input.h5
-rw-r--r--gcc/toplev.c51
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. */