]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h are also on line-map.h.
authorNeil Booth <neil@cat.daikokuya.demon.co.uk>
Sat, 4 Aug 2001 12:01:59 +0000 (12:01 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sat, 4 Aug 2001 12:01:59 +0000 (12:01 +0000)
* 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

17 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/c-parse.in
gcc/cp/ChangeLog
gcc/cp/spew.c
gcc/cppfiles.c
gcc/cpphash.h
gcc/cppinit.c
gcc/cpplex.c
gcc/cpplib.c
gcc/cpplib.h
gcc/cppmacro.c
gcc/cppmain.c
gcc/fix-header.c
gcc/line-map.h
gcc/objc/Make-lang.in
gcc/scan-decls.c

index abb7295b1c9d27d67f6e829f1b34b821a94a3492..70d31306d890c1ce4d28062fdbe733f2da25c465 100644 (file)
@@ -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 
index cdb68f7b357cf3a4f20ce593ee41eddf3e27f1a8..9b8bc19f0a82fbb629c1ab6097af322410b8de5b 100644 (file)
@@ -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.
index d1320565bfc54997b1f67f2e7cf862e2ab96dabf..801a265404ce0b325df7e00ab3839174c3783900 100644 (file)
@@ -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 ();
index 7f29314c638badaf2ef8be7b8c75ce5baea1a802..2911f991c41eea1f27c5e5c96ea4a21d93424c53 100644 (file)
@@ -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.
index 28b2323ed994f9645ffb2fa22e6c9eda5af159a3..4b7f84536f73db6eb05328ecd7b586044e813d21 100644 (file)
@@ -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;
       
index b939b405c889d659ab0512661138f8f497604c92..fb01145d8cd06ecb4a9461d8075d51399d9af236 100644 (file)
@@ -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;
index 0c1695c1d09328ba9d81cf1ba8afcbf7bb452e1b..b1d03251aa50ceec999e44c232923795d17f400d 100644 (file)
@@ -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
index fa01b347055bb4a7344df436bf411511f5dc9d9a..6d4c7a0aa3420d46eb2b7f54b8902742397d6f94 100644 (file)
@@ -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.  */
index fa32bd51561a108ac87c2b41b65cdc5a3452641a..e0002beac4566c5f0bf6f695a6c0b691f15a0478 100644 (file)
@@ -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':
index b3d1c701794a6a7485bdbf3f20ea4752c64976f8..76e5355d74009c190db4fdd0056c75549f252ee6 100644 (file)
@@ -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
index bb91adb33eb36583aa6086d87c6098a0686f15e4..31c01e72c4fbe04a19f63aada80280d1075babc8 100644 (file)
@@ -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 *));
index dd0d5183d3ae9745126a7df9ce10b78b8db68565..d45a949c6290b443cfc959ff82dddaa357e9834b 100644 (file)
@@ -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.  */
index cc3b81d10bd89ace35e61713802c157d4e66c251..9dfb6803f26218fead6015cf3ebe15ede7eaba8c 100644 (file)
@@ -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.  */
index 3124196e7b07b1b6c92652d21f894c97035ef292..25d7a4f82332ab690b5eb34722084bfbd0d0f437 100644 (file)
@@ -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)
        {
index fe5e3cc6c9d6bd32cd9096a0343942a101094595..1f9a47da42a5cc60e4cdc2e84937200f25e6e43e 100644 (file)
@@ -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  */
index 0d1fd1a1903548be0b6da8fcca612361d18b50ac..bd2437dacc77762c35bcfc8f055d90952502877d 100644 (file)
@@ -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)
 
index 336ced71889e5bd4b92d1a9435c7559d19217eac..2fe570e3ec409daaf22cda955d6f322c75254834 100644 (file)
@@ -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.  */