aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Booth <neil@cat.daikokuya.demon.co.uk>2001-08-04 12:01:59 +0000
committerNeil Booth <neil@gcc.gnu.org>2001-08-04 12:01:59 +0000
commitef6e958a8611ff372211d0fd3cd9659614583bb4 (patch)
tree0aaaf48e2153d5621bc68cb09f9c0d2ef9a3854a
parent03997728b499f76a20356705aa4d05d808ab9c3c (diff)
downloadgcc-ef6e958a8611ff372211d0fd3cd9659614583bb4.zip
gcc-ef6e958a8611ff372211d0fd3cd9659614583bb4.tar.gz
gcc-ef6e958a8611ff372211d0fd3cd9659614583bb4.tar.bz2
Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h are also on line-map.h.
* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h are also on line-map.h. * cppfiles.c (stack_include_file): Update. * cpphash.h (struct cpp_buffer): New member return_at_eof. (_cpp_pop_buffer): New. * cppinit.c (cpp_destroy, cpp_finish): Update. (do_includes): Mark each buffer to return at EOF. * cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or return as requested. * cpplib.c (run_directive, do_line, cpp_push_buffer): Update. (cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping. * cpplib.h (cpp_pop_buffer): Remove. (cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput. * cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop buffers. * cppmain.c (scan_buffer): Rename scan_translation_unit. No need to pop buffers. (do_preprocessing): Update. * fix-header.c (read_scan_file): Update. No need to pop buffers. * c-parse.in (_yylex): Similarly. * scan-decls.c (scan_decls): Similarly. * line-map.h: Update comments. * cp/spew.c (read_token): No need to pop buffers. * objc/Make-lang.in (objc-act.o): Update dependencies. From-SVN: r44634
-rw-r--r--gcc/ChangeLog27
-rw-r--r--gcc/Makefile.in13
-rw-r--r--gcc/c-parse.in4
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/spew.c2
-rw-r--r--gcc/cppfiles.c2
-rw-r--r--gcc/cpphash.h6
-rw-r--r--gcc/cppinit.c9
-rw-r--r--gcc/cpplex.c23
-rw-r--r--gcc/cpplib.c20
-rw-r--r--gcc/cpplib.h5
-rw-r--r--gcc/cppmacro.c10
-rw-r--r--gcc/cppmain.c88
-rw-r--r--gcc/fix-header.c3
-rw-r--r--gcc/line-map.h7
-rw-r--r--gcc/objc/Make-lang.in2
-rw-r--r--gcc/scan-decls.c11
17 files changed, 135 insertions, 101 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index abb7295..70d3130 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,30 @@
+2001-08-04 Neil Booth <neil@cat.daikokuya.demon.co.uk>
+
+ * Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
+ are also on line-map.h.
+ * cppfiles.c (stack_include_file): Update.
+ * cpphash.h (struct cpp_buffer): New member return_at_eof.
+ (_cpp_pop_buffer): New.
+ * cppinit.c (cpp_destroy, cpp_finish): Update.
+ (do_includes): Mark each buffer to return at EOF.
+ * cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or
+ return as requested.
+ * cpplib.c (run_directive, do_line, cpp_push_buffer): Update.
+ (cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping.
+ * cpplib.h (cpp_pop_buffer): Remove.
+ (cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput.
+ * cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop
+ buffers.
+ * cppmain.c (scan_buffer): Rename scan_translation_unit. No need
+ to pop buffers.
+ (do_preprocessing): Update.
+ * fix-header.c (read_scan_file): Update. No need to pop buffers.
+ * c-parse.in (_yylex): Similarly.
+ * scan-decls.c (scan_decls): Similarly.
+ * line-map.h: Update comments.
+
+ * objc/Make-lang.in (objc-act.o): Update dependencies.
+
2001-08-04 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* config/m68hc11/m68hc11.md ("cmphi_1", "cmpqi_1"): Allow memory
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index cdb68f7..9b8bc19 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -579,6 +579,7 @@ C_COMMON_H = c-common.h $(SPLAY_TREE_H)
C_TREE_H = c-tree.h $(C_COMMON_H)
SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
PREDICT_H = predict.h predict.def
+CPPLIB_H = cpplib.h line-map.h
# sed inserts variable overrides after the following line.
####target overrides
@@ -1152,7 +1153,7 @@ s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \
diagnostic.h $(TM_P_H)
c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) intl.h \
- $(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h cpplib.h \
+ $(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H) \
diagnostic.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
@@ -1177,7 +1178,7 @@ c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
debug.h $(C_TREE_H) \
c-pragma.h input.h intl.h flags.h toplev.h output.h \
- mbchar.h cpplib.h $(EXPR_H) $(TM_P_H)
+ mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
flags.h toplev.h
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h
@@ -1937,7 +1938,7 @@ LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \
cpphash.o cpperror.o cppinit.o cppdefault.o \
hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o
-LIBCPP_DEPS = cpplib.h cpphash.h line-map.h hashtable.h intl.h \
+LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
$(OBSTACK_H) $(SYSTEM_H)
# Most of the other archives built/used by this makefile are for
@@ -1951,7 +1952,7 @@ cpp0$(exeext): cppmain.o intl.o libcpp.a $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cpp0$(exeext) cppmain.o \
intl.o libcpp.a $(LIBS)
-cppmain.o: cppmain.c $(CONFIG_H) cpplib.h intl.h $(SYSTEM_H)
+cppmain.o: cppmain.c $(CONFIG_H) $(CPPLIB_H) intl.h $(SYSTEM_H)
cpperror.o: cpperror.c $(CONFIG_H) $(LIBCPP_DEPS)
cppexp.o: cppexp.c $(CONFIG_H) $(LIBCPP_DEPS)
@@ -2194,10 +2195,10 @@ fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
scan-decls.o scan.o libcpp.a $(LIBS)
fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
- xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) cpplib.h
+ xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) $(CPPLIB_H)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
-scan-decls.o: scan-decls.c scan.h cpplib.h $(HCONFIG_H) $(SYSTEM_H)
+scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(HCONFIG_H) $(SYSTEM_H)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c
# stmp-fixproto depends on this, not on fix-header directly.
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index d132056..801a265 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -3767,9 +3767,7 @@ _yylex ()
case CPP_SEMICOLON: OBJC_NEED_RAW_IDENTIFIER (0); return ';';
case CPP_EOF:
- if (cpp_pop_buffer (parse_in) == 0)
- return 0;
- goto get_next;
+ return 0;
case CPP_NAME:
return yylexname ();
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7f29314..2911f99 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2001-08-04 Neil Booth <neil@cat.daikokuya.demon.co.uk>
+
+ * cp/spew.c (read_token): No need to pop buffers.
+
2001-08-02 Stan Shebs <shebs@apple.com>
* cp-tree.h (FNADDR_FROM_VTABLE_ENTRY): Remove, no longer used.
diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c
index 28b2323..4b7f845 100644
--- a/gcc/cp/spew.c
+++ b/gcc/cp/spew.c
@@ -331,8 +331,6 @@ read_token (t)
#undef YYCODE
case CPP_EOF:
- if (cpp_pop_buffer (parse_in) != 0)
- goto retry;
t->yychar = 0;
break;
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index b939b40..fb01145 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -326,7 +326,7 @@ stack_include_file (pfile, inc)
}
/* Push a buffer. */
- fp = cpp_push_buffer (pfile, inc->buffer, len, BUF_FILE, inc->name);
+ fp = cpp_push_buffer (pfile, inc->buffer, len, BUF_FILE, inc->name, 0);
fp->inc = inc;
fp->inc->refcnt++;
fp->sysp = sysp;
diff --git a/gcc/cpphash.h b/gcc/cpphash.h
index 0c1695c..b1d0325 100644
--- a/gcc/cpphash.h
+++ b/gcc/cpphash.h
@@ -226,6 +226,11 @@ struct cpp_buffer
include files has been calculated and stored in "dir" below. */
unsigned char search_cached;
+ /* At EOF, a buffer is automatically popped. If RETURN_AT_EOF is
+ true, a CPP_EOF token is then returned. Otherwise, the next
+ token from the enclosing buffer is returned. */
+ bool return_at_eof;
+
/* Buffer type. */
ENUM_BITFIELD (cpp_buffer_type) type : 8;
@@ -441,6 +446,7 @@ extern void _cpp_do__Pragma PARAMS ((cpp_reader *));
extern void _cpp_init_directives PARAMS ((cpp_reader *));
extern void _cpp_init_internal_pragmas PARAMS ((cpp_reader *));
extern void _cpp_do_file_change PARAMS ((cpp_reader *, enum lc_reason));
+extern void _cpp_pop_buffer PARAMS ((cpp_reader *));
/* Utility routines and macros. */
#define DSC(str) (const U_CHAR *)str, sizeof str - 1
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index fa01b34..6d4c7a0 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -555,7 +555,7 @@ cpp_destroy (pfile)
cpp_context *context, *contextn;
while (CPP_BUFFER (pfile) != NULL)
- cpp_pop_buffer (pfile);
+ _cpp_pop_buffer (pfile);
if (pfile->macro_buffer)
{
@@ -883,7 +883,10 @@ do_includes (pfile, p, scan)
header.val.str.text = (const unsigned char *) p->arg;
header.val.str.len = strlen (p->arg);
if (_cpp_execute_include (pfile, &header, IT_CMDLINE) && scan)
- cpp_scan_buffer_nooutput (pfile, 0);
+ {
+ pfile->buffer->return_at_eof = true;
+ cpp_scan_nooutput (pfile);
+ }
}
q = p->next;
free (p);
@@ -1011,7 +1014,7 @@ cpp_finish (pfile)
{
cpp_ice (pfile, "buffers still stacked in cpp_finish");
while (CPP_BUFFER (pfile))
- cpp_pop_buffer (pfile);
+ _cpp_pop_buffer (pfile);
}
/* Don't write the deps file if preprocessing has failed. */
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index fa32bd5..e0002be 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -893,16 +893,23 @@ _cpp_lex_token (pfile, result)
switch (c)
{
case EOF:
- /* Non-empty files should end in a newline. Checking "bol" too
- prevents multiple warnings when hitting the EOF more than
- once, like in a directive. Don't warn for command line and
- _Pragma buffers. */
- if (pfile->lexer_pos.col != 0 && !bol && !buffer->from_stage3)
- cpp_pedwarn (pfile, "no newline at end of file");
+ if (!pfile->state.in_directive)
+ {
+ unsigned char ret = pfile->buffer->return_at_eof;
+
+ /* Non-empty files should end in a newline. Don't warn for
+ command line and _Pragma buffers. */
+ if (pfile->lexer_pos.col != 0 && !buffer->from_stage3)
+ cpp_pedwarn (pfile, "no newline at end of file");
+ _cpp_pop_buffer (pfile);
+ if (pfile->buffer && !ret)
+ {
+ bol = 1;
+ goto done_directive;
+ }
+ }
pfile->state.next_bol = 1;
- pfile->state.skipping = 0; /* In case missing #endif. */
result->type = CPP_EOF;
- /* Don't do MI optimisation. */
return;
case ' ': case '\t': case '\f': case '\v': case '\0':
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index b3d1c70..76e5355 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -397,7 +397,7 @@ run_directive (pfile, dir_no, type, buf, count)
unsigned int output_line = pfile->lexer_pos.output_line;
cpp_buffer *buffer;
- buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0);
+ buffer = cpp_push_buffer (pfile, (const U_CHAR *) buf, count, type, 0, 1);
if (dir_no == T_PRAGMA)
{
@@ -414,8 +414,7 @@ run_directive (pfile, dir_no, type, buf, count)
pfile->state.prevent_expansion--;
check_eol (pfile);
end_directive (pfile, 1);
-
- cpp_pop_buffer (pfile);
+ _cpp_pop_buffer (pfile);
}
/* Checks for validity the macro name in #define, #undef, #ifdef and
@@ -770,7 +769,7 @@ do_line (pfile)
if (reason == LC_ENTER)
{
/* Fake a buffer stack for diagnostics. */
- cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname);
+ cpp_push_buffer (pfile, 0, 0, BUF_FAKE, fname, 0);
/* Fake an include for cpp_included. */
_cpp_fake_include (pfile, fname);
buffer = pfile->buffer;
@@ -782,7 +781,7 @@ do_line (pfile)
buffer->nominal_fname);
else
{
- cpp_pop_buffer (pfile);
+ _cpp_pop_buffer (pfile);
buffer = pfile->buffer;
#ifdef ENABLE_CHECKING
if (strcmp (buffer->nominal_fname, fname))
@@ -1775,12 +1774,13 @@ cpp_set_callbacks (pfile, cb)
doesn't fail. It does not generate a file change call back; that
is the responsibility of the caller. */
cpp_buffer *
-cpp_push_buffer (pfile, buffer, len, type, filename)
+cpp_push_buffer (pfile, buffer, len, type, filename, return_at_eof)
cpp_reader *pfile;
const U_CHAR *buffer;
size_t len;
enum cpp_buffer_type type;
const char *filename;
+ int return_at_eof;
{
cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer);
@@ -1826,6 +1826,7 @@ cpp_push_buffer (pfile, buffer, len, type, filename)
new->pfile = pfile;
new->include_stack_listed = 0;
new->lineno = 1;
+ new->return_at_eof = return_at_eof;
pfile->state.next_bol = 1;
pfile->buffer_stack_depth++;
@@ -1837,8 +1838,8 @@ cpp_push_buffer (pfile, buffer, len, type, filename)
/* If called from do_line, pops a single buffer. Otherwise pops all
buffers until a real file is reached. Generates appropriate
call-backs. */
-cpp_buffer *
-cpp_pop_buffer (pfile)
+void
+_cpp_pop_buffer (pfile)
cpp_reader *pfile;
{
cpp_buffer *buffer;
@@ -1884,7 +1885,8 @@ cpp_pop_buffer (pfile)
}
obstack_free (&pfile->buffer_ob, buffer);
- return pfile->buffer;
+
+ pfile->state.skipping = 0; /* In case missing #endif. */
}
void
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index bb91adb..31c01e7 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -554,8 +554,7 @@ extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
const unsigned char *, size_t,
enum cpp_buffer_type,
- const char *));
-extern cpp_buffer *cpp_pop_buffer PARAMS ((cpp_reader *));
+ const char *, int));
extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int));
/* N.B. The error-message-printer prototypes have not been nicely
@@ -611,7 +610,7 @@ extern void cpp_forall_identifiers PARAMS ((cpp_reader *,
cpp_cb, void *));
/* In cppmacro.c */
-extern void cpp_scan_buffer_nooutput PARAMS ((cpp_reader *, int));
+extern void cpp_scan_nooutput PARAMS ((cpp_reader *));
extern void cpp_start_lookahead PARAMS ((cpp_reader *));
extern void cpp_stop_lookahead PARAMS ((cpp_reader *, int));
extern int cpp_sys_macro_p PARAMS ((cpp_reader *));
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c
index dd0d518..d45a949 100644
--- a/gcc/cppmacro.c
+++ b/gcc/cppmacro.c
@@ -1010,18 +1010,14 @@ cpp_sys_macro_p (pfile)
/* Read each token in, until EOF. Directives are transparently
processed. */
void
-cpp_scan_buffer_nooutput (pfile, all_buffers)
+cpp_scan_nooutput (pfile)
cpp_reader *pfile;
- int all_buffers;
{
cpp_token token;
- cpp_buffer *buffer = all_buffers ? 0: pfile->buffer->prev;
do
- do
- cpp_get_token (pfile, &token);
- while (token.type != CPP_EOF);
- while (cpp_pop_buffer (pfile) != buffer);
+ cpp_get_token (pfile, &token);
+ while (token.type != CPP_EOF);
}
/* Lookahead handling. */
diff --git a/gcc/cppmain.c b/gcc/cppmain.c
index cc3b81d..9dfb680 100644
--- a/gcc/cppmain.c
+++ b/gcc/cppmain.c
@@ -44,7 +44,7 @@ static void do_preprocessing PARAMS ((int, char **));
static void setup_callbacks PARAMS ((void));
/* General output routines. */
-static void scan_buffer PARAMS ((cpp_reader *));
+static void scan_translation_unit PARAMS ((cpp_reader *));
static void check_multiline_token PARAMS ((cpp_string *));
static int printer_init PARAMS ((cpp_reader *));
static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
@@ -151,11 +151,11 @@ do_preprocessing (argc, argv)
if (cpp_start_read (pfile, options->in_fname))
{
/* A successful cpp_start_read guarantees that we can call
- cpp_scan_buffer_nooutput or cpp_get_token next. */
+ cpp_scan_nooutput or cpp_get_token next. */
if (options->no_output)
- cpp_scan_buffer_nooutput (pfile, 1);
+ cpp_scan_nooutput (pfile);
else
- scan_buffer (pfile);
+ scan_translation_unit (pfile);
/* -dM command line option. Should this be in cpp_finish? */
if (options->dump_macros == dump_only)
@@ -200,60 +200,56 @@ setup_callbacks ()
/* Writes out the preprocessed file. Alternates between two tokens,
so that we can avoid accidental token pasting. */
static void
-scan_buffer (pfile)
+scan_translation_unit (pfile)
cpp_reader *pfile;
{
unsigned int index, line;
cpp_token tokens[2], *token;
- do
+ for (index = 0;; index = 1 - index)
{
- for (index = 0;; index = 1 - index)
- {
- token = &tokens[index];
- cpp_get_token (pfile, token);
+ token = &tokens[index];
+ cpp_get_token (pfile, token);
- if (token->type == CPP_EOF)
- break;
+ if (token->type == CPP_EOF)
+ break;
- line = cpp_get_line (pfile)->output_line;
- if (print.lineno != line)
+ line = cpp_get_line (pfile)->output_line;
+ if (print.lineno != line)
+ {
+ unsigned int col = cpp_get_line (pfile)->col;
+
+ /* Supply enough whitespace to put this token in its original
+ column. Don't bother trying to reconstruct tabs; we can't
+ get it right in general, and nothing ought to care. (Yes,
+ some things do care; the fault lies with them.) */
+ maybe_print_line (line);
+ if (col > 1)
{
- unsigned int col = cpp_get_line (pfile)->col;
-
- /* Supply enough whitespace to put this token in its original
- column. Don't bother trying to reconstruct tabs; we can't
- get it right in general, and nothing ought to care. (Yes,
- some things do care; the fault lies with them.) */
- maybe_print_line (line);
- if (col > 1)
- {
- if (token->flags & PREV_WHITE)
- col--;
- while (--col)
- putc (' ', print.outf);
- }
+ if (token->flags & PREV_WHITE)
+ col--;
+ while (--col)
+ putc (' ', print.outf);
}
- else if ((token->flags & (PREV_WHITE | AVOID_LPASTE))
- == AVOID_LPASTE
- && cpp_avoid_paste (pfile, &tokens[1 - index], token))
- token->flags |= PREV_WHITE;
- /* Special case '# <directive name>': insert a space between
- the # and the token. This will prevent it from being
- treated as a directive when this code is re-preprocessed.
- XXX Should do this only at the beginning of a line, but how? */
- else if (token->type == CPP_NAME && token->val.node->directive_index
- && tokens[1 - index].type == CPP_HASH)
- token->flags |= PREV_WHITE;
-
- cpp_output_token (token, print.outf);
- print.printed = 1;
- if (token->type == CPP_STRING || token->type == CPP_WSTRING
- || token->type == CPP_COMMENT)
- check_multiline_token (&token->val.str);
}
+ else if ((token->flags & (PREV_WHITE | AVOID_LPASTE))
+ == AVOID_LPASTE
+ && cpp_avoid_paste (pfile, &tokens[1 - index], token))
+ token->flags |= PREV_WHITE;
+ /* Special case '# <directive name>': insert a space between
+ the # and the token. This will prevent it from being
+ treated as a directive when this code is re-preprocessed.
+ XXX Should do this only at the beginning of a line, but how? */
+ else if (token->type == CPP_NAME && token->val.node->directive_index
+ && tokens[1 - index].type == CPP_HASH)
+ token->flags |= PREV_WHITE;
+
+ cpp_output_token (token, print.outf);
+ print.printed = 1;
+ if (token->type == CPP_STRING || token->type == CPP_WSTRING
+ || token->type == CPP_COMMENT)
+ check_multiline_token (&token->val.str);
}
- while (cpp_pop_buffer (pfile) != 0);
}
/* Adjust print.lineno for newlines embedded in tokens. */
diff --git a/gcc/fix-header.c b/gcc/fix-header.c
index 3124196..25d7a4f 100644
--- a/gcc/fix-header.c
+++ b/gcc/fix-header.c
@@ -658,7 +658,7 @@ read_scan_file (in_fname, argc, argv)
/* Scan the macro expansion of "getchar();". */
cpp_push_buffer (scan_in, getchar_call, sizeof(getchar_call) - 1,
- BUF_BUILTIN, in_fname);
+ BUF_BUILTIN, in_fname, 1);
for (;;)
{
cpp_token t;
@@ -669,7 +669,6 @@ read_scan_file (in_fname, argc, argv)
else if (cpp_ideq (&t, "_filbuf"))
seen_filbuf++;
}
- cpp_pop_buffer (scan_in);
if (seen_filbuf)
{
diff --git a/gcc/line-map.h b/gcc/line-map.h
index fe5e3cc..1f9a47d 100644
--- a/gcc/line-map.h
+++ b/gcc/line-map.h
@@ -25,7 +25,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/* The logical line FROM_LINE maps to physical source file TO_FILE at
line TO_LINE, and subsequently one-to-one until the next line_map
- structure in the set. */
+ structure in the set. INCLUDED_FROM is an index into the set that
+ gives the line mapping at whose end the current one was included.
+ File(s) at the bottom of the include stack have this set to -1. */
struct line_map
{
const char *to_file;
@@ -34,7 +36,7 @@ struct line_map
int included_from;
};
-/* Contains a sequence of chronological line_map structures. */
+/* A set of chronological line_map structures. */
struct line_maps
{
struct line_map *maps;
@@ -75,6 +77,7 @@ extern struct line_map *lookup_line
of the #include, or other directive, that caused a map change. */
#define LAST_SOURCE_LINE(MAP) SOURCE_LINE (MAP, (MAP)[1].from_line - 1)
+/* Non-zero if the map is at the bottom of the include stack. */
#define MAIN_FILE_P(MAP) ((MAP)->included_from < 0)
#endif /* !GCC_LINE_MAP_H */
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
index 0d1fd1a..bd2437d 100644
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -59,7 +59,7 @@ objc-parse.o : $(srcdir)/objc/objc-parse.c \
$(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \
$(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/c-common.h \
$(srcdir)/input.h $(srcdir)/flags.h $(srcdir)/output.h \
- $(srcdir)/objc/objc-act.h $(SYSTEM_H) cpplib.h
+ $(srcdir)/objc/objc-act.h $(SYSTEM_H) $(CPPLIB_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-parse.c $(OUTPUT_OPTION)
diff --git a/gcc/scan-decls.c b/gcc/scan-decls.c
index 336ced7..2fe570e 100644
--- a/gcc/scan-decls.c
+++ b/gcc/scan-decls.c
@@ -111,13 +111,10 @@ scan_decls (pfile, argc, argv)
brace_nesting++;
goto new_statement;
}
+
if (token.type == CPP_EOF)
- {
- if (cpp_pop_buffer (pfile) == 0)
- return 0;
+ return 0;
- goto new_statement;
- }
if (token.type == CPP_SEMICOLON)
goto new_statement;
if (token.type != CPP_NAME)
@@ -148,9 +145,7 @@ scan_decls (pfile, argc, argv)
goto new_statement;
case CPP_EOF:
- if (cpp_pop_buffer (pfile) == 0)
- return 0;
- break;
+ return 0;
case CPP_OPEN_PAREN:
/* Looks like this is the start of a formal parameter list. */