summaryrefslogtreecommitdiff
path: root/gcc/cp/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/input.c')
-rw-r--r--gcc/cp/input.c240
1 files changed, 0 insertions, 240 deletions
diff --git a/gcc/cp/input.c b/gcc/cp/input.c
deleted file mode 100644
index 431fed792a8..00000000000
--- a/gcc/cp/input.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Input handling for G++.
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
- Free Software Foundation, Inc.
- Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
- Enhanced by Michael Tiemann (tiemann@cygnus.com) to better support USE_CPPLIB
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* G++ needs to do enough saving and re-parsing of text that it is
- necessary to abandon the simple FILE* model and use a mechanism where
- we can pre-empt one input stream with another derived from saved text;
- we may need to do this arbitrarily often, and cannot depend on having
- the GNU library available, so FILE objects just don't cut it.
-
- This file is written as a separate module, but can be included by
- lex.c for very minor efficiency gains (primarily in function
- inlining). */
-
-#include "system.h"
-
-#if !USE_CPPLIB
-struct putback_buffer {
- char *buffer;
- int buffer_size;
- int index;
-};
-
-static struct putback_buffer putback = {NULL, 0, -1};
-#endif
-
-struct input_source {
- /* saved string */
- const char *str;
- int length;
- /* current position, when reading as input */
- int offset;
- /* linked list maintenance */
- struct input_source *next;
- /* values to restore after reading all of current string */
- struct pending_input *input;
-#if !USE_CPPLIB
- const char *filename;
- int lineno;
- struct putback_buffer putback;
-#endif
-};
-
-static struct input_source *input, *free_inputs;
-
-#if USE_CPPLIB
-extern unsigned char *yy_cur, *yy_lim;
-extern int yy_get_token ();
-#endif
-
-extern void feed_input PARAMS ((const char *, int, const char *, int));
-extern void put_input PARAMS ((int));
-extern void put_back PARAMS ((int));
-extern int getch PARAMS ((void));
-extern int input_redirected PARAMS ((void));
-
-static inline struct input_source * allocate_input PARAMS ((void));
-static inline void free_input PARAMS ((struct input_source *));
-static inline void end_input PARAMS ((void));
-
-static inline struct input_source *
-allocate_input ()
-{
- struct input_source *inp;
- if (free_inputs)
- {
- inp = free_inputs;
- free_inputs = inp->next;
- inp->next = 0;
- return inp;
- }
- inp = (struct input_source *) xmalloc (sizeof (struct input_source));
- inp->next = 0;
- return inp;
-}
-
-static inline void
-free_input (inp)
- struct input_source *inp;
-{
- inp->str = 0;
- inp->length = 0;
- inp->next = free_inputs;
- free_inputs = inp;
-}
-
-/* Some of these external functions are declared inline in case this file
- is included in lex.c. */
-
-inline
-void
-feed_input (str, len, file, line)
- const char *str;
- int len;
- const char *file;
- int line;
-{
- struct input_source *inp = allocate_input ();
-
- /* This shouldn't be necessary. */
- while (len && !str[len-1])
- len--;
-
-#if USE_CPPLIB
- if (yy_lim > yy_cur)
- /* If we've started reading the next token, we're hosed. The
- token_getch stuff is supposed to prevent this from happening. */
- my_friendly_abort (990710);
- cpp_push_buffer (&parse_in, str, len);
- CPP_BUFFER (&parse_in)->manual_pop = 1;
- CPP_BUFFER (&parse_in)->nominal_fname
- = CPP_BUFFER (&parse_in)->fname = file;
- CPP_BUFFER (&parse_in)->lineno = parse_in.lineno = line;
-#else
- inp->str = str;
- inp->length = len;
- inp->offset = 0;
- inp->putback = putback;
- inp->filename = input_filename;
- inp->lineno = lineno;
- putback.buffer = NULL;
- putback.buffer_size = 0;
- putback.index = -1;
-#endif
- inp->next = input;
- inp->input = save_pending_input ();
- input = inp;
- lineno = line;
- input_filename = file;
-}
-
-extern int end_of_file;
-
-static inline void
-end_input ()
-{
- struct input_source *inp = input;
-
-#if USE_CPPLIB
- cpp_pop_buffer (&parse_in);
-#else
- putback = inp->putback;
- input_filename = inp->filename;
- lineno = inp->lineno;
-#endif
-
- end_of_file = 0;
- input = inp->next;
- /* Get interface/implementation back in sync. */
- extract_interface_info ();
- restore_pending_input (inp->input);
- free_input (inp);
-}
-
-inline int
-getch ()
-{
-#if USE_CPPLIB
- return (yy_cur < yy_lim ? *yy_cur++ : yy_get_token ());
-#else
- if (putback.index != -1)
- {
- int ch = putback.buffer[putback.index];
- --putback.index;
- return ch;
- }
- if (input)
- {
- if (input->offset >= input->length)
- {
- my_friendly_assert (putback.index == -1, 223);
- ++(input->offset);
- if (input->offset - input->length < 64)
- return EOF;
-
- /* We must be stuck in an error-handling rule; give up. */
- end_input ();
- return getch ();
- }
- return (unsigned char)input->str[input->offset++];
- }
- return getc (finput);
-#endif
-}
-
-inline
-void
-put_back (ch)
- int ch;
-{
-#if USE_CPPLIB
- if (ch == EOF)
- ;
- else if (yy_cur[-1] != ch)
- my_friendly_abort (990709);
- else
- yy_cur--;
-#else
- if (ch != EOF)
- {
- if (putback.index == putback.buffer_size - 1)
- {
- putback.buffer_size += 16;
- putback.buffer = xrealloc (putback.buffer, putback.buffer_size);
- }
- my_friendly_assert (putback.buffer != NULL, 224);
- putback.buffer[++putback.index] = ch;
- }
-#endif
-}
-
-inline
-int
-input_redirected ()
-{
-#ifdef USE_CPPLIB
- return CPP_BUFFER(&parse_in)->manual_pop;
-#else
- return input != 0;
-#endif
-}