cccp.c (ignore_escape_flag): Add support for \ as `natural' characters in file names...
authorMike Stump <mrs@wrs.com>
Mon, 7 Dec 1998 14:57:30 +0000 (14:57 +0000)
committerDave Brolley <brolley@gcc.gnu.org>
Mon, 7 Dec 1998 14:57:30 +0000 (09:57 -0500)
Mon Dec  7 17:55:06 1998  Mike Stump  <mrs@wrs.com>
* cccp.c (ignore_escape_flag): Add support for \ as `natural'
characters in file names in #line to be consistent with #include
handling.  We support escape prcessing in the # 1 "..." version of
the command.  See also support in cp/lex.c.
(handle_directive): Likewise.
(do_line): Likewise.

From-SVN: r24156

gcc/ChangeLog
gcc/cccp.c

index 098de32c649c59a77a7d78e8b32840c917dfe796..c2811fe1ad8bc64a5d5d382f454f05978ae84aa1 100644 (file)
@@ -1,3 +1,12 @@
+Mon Dec  7 17:55:06 1998  Mike Stump  <mrs@wrs.com>
+
+       * cccp.c (ignore_escape_flag): Add support for \ as `natural'
+       characters in file names in #line to be consistent with #include
+       handling.  We support escape prcessing in the # 1 "..." version of
+       the command.  See also support in cp/lex.c.
+       (handle_directive): Likewise.
+       (do_line): Likewise.
+       
 1998-12-07  Zack Weinberg  <zack@rabi.phys.columbia.edu>
 
        * cpplib.c (initialize_char_syntax): Use ISALPHA and ISALNUM
index f09709dc94c0d6660265de0f5312eb2e315e8dd2..34b9d46f839c32b55ab9834d5fd2461bfeef5880 100644 (file)
@@ -868,6 +868,10 @@ static int errors = 0;                     /* Error counter for exit code */
 /* Name of output file, for error messages.  */
 static char *out_fname;
 
+/* Nonzero to ignore \ in string constants.  Use to treat #line 1 "A:\file.h
+   as a non-form feed.  If you want it to be a form feed, you must use
+   # 1 "\f".  */
+static int ignore_escape_flag = 1;
 
 /* Stack of conditionals currently in progress
    (including both successful and failing conditionals).  */
@@ -3806,6 +3810,8 @@ handle_directive (ip, op)
   /* Record where the directive started.  do_xifdef needs this.  */
   directive_start = bp - 1;
 
+  ignore_escape_flag = 1;
+
   /* Skip whitespace and \-newline.  */
   while (1) {
     if (is_hor_space[*bp]) {
@@ -3868,6 +3874,7 @@ handle_directive (ip, op)
        pedwarn ("`#' followed by integer");
       after_ident = ident;
       kt = line_directive_table;
+      ignore_escape_flag = 0;
       goto old_linenum;
     }
 
@@ -6940,15 +6947,16 @@ do_line (buf, limit, op, keyword)
        return 0;
 
       case '\\':
-       {
-         char *bpc = (char *) bp;
-         HOST_WIDE_INT c = parse_escape (&bpc, (HOST_WIDE_INT) (U_CHAR) (-1));
-         bp = (U_CHAR *) bpc;
-         if (c < 0)
-           p--;
-         else
-           p[-1] = c;
-       }
+       if (! ignore_escape_flag)
+         {
+           char *bpc = (char *) bp;
+           HOST_WIDE_INT c = parse_escape (&bpc, (HOST_WIDE_INT) (U_CHAR) (-1));
+           bp = (U_CHAR *) bpc;
+           if (c < 0)
+             p--;
+           else
+             p[-1] = c;
+         }
        break;
 
       case '\"':