]> gcc.gnu.org Git - gcc.git/commitdiff
cpplib.c: Don't include signal.h, sys/times.h, or sys/resource.h.
authorZack Weinberg <zack@rabi.phys.columbia.edu>
Mon, 25 Jan 1999 11:23:01 +0000 (11:23 +0000)
committerDave Brolley <brolley@gcc.gnu.org>
Mon, 25 Jan 1999 11:23:01 +0000 (06:23 -0500)
1999-01-25 14:10 -0500  Zack Weinberg  <zack@rabi.phys.columbia.edu>
* cpplib.c: Don't include signal.h, sys/times.h, or
sys/resource.h. Don't declare localtime.
(macroexpand): Handle special symbols here.
(push_macro_expansion): Chop off the trailing '@ ' if possible
here.
(cpp_get_token): Don't do either of the above two things here.
Move `string' label just after case '"' so that wide strings
don't crash the preprocessor.

From-SVN: r24858

gcc/ChangeLog
gcc/cpplib.c

index ce799f174f60290a90e9374e2578de8f8a5004cb..67142f6a608038ab9e54dfb850da1c5f41fe0d24 100644 (file)
@@ -1,3 +1,14 @@
+1999-01-25 14:10 -0500  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+       * cpplib.c: Don't include signal.h, sys/times.h, or
+       sys/resource.h. Don't declare localtime.
+       (macroexpand): Handle special symbols here.
+       (push_macro_expansion): Chop off the trailing '@ ' if possible
+       here.
+       (cpp_get_token): Don't do either of the above two things here.
+       Move `string' label just after case '"' so that wide strings
+       don't crash the preprocessor.
+
 Sun Jan 24 20:13:45 1999  David Edelsohn  <edelsohn@mhpcc.edu>
 
        * rs6000.md (left shift + set cr patterns): Add missing '#' to
index aa343f51d043ede49f0270d1676f0ba77da8500a..8aa20c418e280db6324852f42c76ca55df42a56a 100644 (file)
@@ -25,16 +25,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define STDC_VALUE 1
 #endif
 
-#include <signal.h>
-
-#ifdef HAVE_SYS_TIMES_H
-#include <sys/times.h>
-#endif
-
-#ifdef HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
 #include "cpplib.h"
 #include "cpphash.h"
 #include "output.h"
@@ -170,10 +160,7 @@ enum file_change_code {same_file, enter_file, leave_file};
 /* External declarations.  */
 
 extern HOST_WIDE_INT cpp_parse_expr PARAMS ((cpp_reader *));
-
 extern char *version_string;
-extern struct tm *localtime ();
-\f
 
 /* #include "file" looks in source file dir, then stack.  */
 /* #include <file> just looks in the stack.  */
@@ -2380,7 +2367,7 @@ macroexpand (pfile, hp)
      HASHNODE *hp;
 {
   int nargs;
-  DEFINITION *defn = hp->value.defn;
+  DEFINITION *defn;
   register U_CHAR *xbuf;
   long start_line, start_column;
   int xbuf_len;
@@ -2403,10 +2390,23 @@ macroexpand (pfile, hp)
     dump_single_macro (hp, pcp_outfile);
 #endif
 
-  pfile->output_escapes++;
   cpp_buf_line_and_col (cpp_file_buffer (pfile), &start_line, &start_column);
 
+  /* Check for and handle special symbols. */
+  if (hp->type != T_MACRO)
+    {
+      special_symbol (hp, pfile);
+      xbuf_len = CPP_WRITTEN (pfile) - old_written;
+      xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
+      CPP_SET_WRITTEN (pfile, old_written);
+      bcopy (CPP_PWRITTEN (pfile), xbuf, xbuf_len + 1);
+      push_macro_expansion (pfile, xbuf, xbuf_len, hp);
+      return;
+    }
+
+  defn = hp->value.defn;
   nargs = defn->nargs;
+  pfile->output_escapes++;
 
   if (nargs >= 0)
     {
@@ -2830,6 +2830,19 @@ push_macro_expansion (pfile, xbuf, xbuf_len, hp)
       && (is_idchar[xbuf[2]] || xbuf[2] == '(' || xbuf[2] == '\''
          || xbuf[2] == '\"'))
     mbuf->cur += 2;
+
+  /* Likewise, avoid the extra space at the end of the macro expansion
+     if this is safe.  (We can do a better job here since we can know
+     what the next char will be.) */
+  if (xbuf_len >= 3
+      && mbuf->rlimit[-2] == '@'
+      && mbuf->rlimit[-1] == ' ')
+    {
+      int c1 = mbuf->rlimit[-3];
+      int c2 = CPP_BUF_PEEK (CPP_PREV_BUFFER (CPP_BUFFER (pfile)));
+      if (c2 == EOF || ! unsafe_chars (c1, c2))
+       mbuf->rlimit -= 2;
+    }
 }
 \f
 /* Like cpp_get_token, except that it does not read past end-of-line.
@@ -4145,12 +4158,12 @@ cpp_get_token (pfile)
 
        case '\"':
        case '\'':
+       string:
          /* A single quoted string is treated like a double -- some
             programs (e.g., troff) are perverse this way */
          cpp_buf_line_and_col (cpp_file_buffer (pfile),
                                &start_line, &start_column);
          old_written = CPP_WRITTEN (pfile);
-       string:
          CPP_PUTC (pfile, c);
          while (1)
            {
@@ -4163,11 +4176,7 @@ cpp_get_token (pfile)
                         boundary.  This can happen naturally if -traditional.
                         Otherwise, only -D can make a macro with an unmatched
                         quote.  */
-                       cpp_buffer *next_buf
-                           = CPP_PREV_BUFFER (CPP_BUFFER (pfile));
-                       (*CPP_BUFFER (pfile)->cleanup)
-                           (CPP_BUFFER (pfile), pfile);
-                       CPP_BUFFER (pfile) = next_buf;
+                       cpp_pop_buffer (pfile);
                        continue;
                    }
                  if (!CPP_TRADITIONAL (pfile))
@@ -4558,40 +4567,11 @@ cpp_get_token (pfile)
              if (!is_macro_call)
                return CPP_NAME;
            }
-           /* This is now known to be a macro call.  */
-
-           /* it might not actually be a macro.  */
-           if (hp->type != T_MACRO) {
-             int xbuf_len;  U_CHAR *xbuf;
-             CPP_SET_WRITTEN (pfile, before_name_written);
-             special_symbol (hp, pfile);
-             xbuf_len = CPP_WRITTEN (pfile) - before_name_written;
-             xbuf = (U_CHAR *) xmalloc (xbuf_len + 1);
-             CPP_SET_WRITTEN (pfile, before_name_written);
-             bcopy (CPP_PWRITTEN (pfile), xbuf, xbuf_len + 1);
-             push_macro_expansion (pfile, xbuf, xbuf_len, hp);
-           }
-           else
-             {
-               /* Expand the macro, reading arguments as needed,
-                  and push the expansion on the input stack.  */
-               macroexpand (pfile, hp);
-               CPP_SET_WRITTEN (pfile, before_name_written);
-             }
-
-           /* An extra "@ " is added to the end of a macro expansion
-              to prevent accidental token pasting.  We prefer to avoid
-              unneeded extra spaces (for the sake of cpp-using tools like
-              imake).  Here we remove the space if it is safe to do so.  */
-           if (pfile->buffer->rlimit - pfile->buffer->cur >= 3
-               && pfile->buffer->rlimit[-2] == '@'
-               && pfile->buffer->rlimit[-1] == ' ')
-             {
-               int c1 = pfile->buffer->rlimit[-3];
-               int c2 = CPP_BUF_PEEK (CPP_PREV_BUFFER (CPP_BUFFER (pfile)));
-               if (c2 == EOF || ! unsafe_chars (c1, c2))
-                 pfile->buffer->rlimit -= 2;
-             }
+           /* This is now known to be a macro call.
+              Expand the macro, reading arguments as needed,
+              and push the expansion on the input stack.  */
+           macroexpand (pfile, hp);
+           CPP_SET_WRITTEN (pfile, before_name_written);
          }
          goto get_next;
 
This page took 0.076346 seconds and 5 git commands to generate.