]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/app.c
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / app.c
index 32a172f55dd8d462f16eb6a9a6752e0624a3da59..89b39130bf10a497890b1d318a631f8b3ff64dcf 100644 (file)
--- a/gas/app.c
+++ b/gas/app.c
@@ -1,5 +1,5 @@
 /* This is the Assembler Pre-Processor
-   Copyright (C) 1987-2014 Free Software Foundation, Inc.
+   Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -56,6 +56,8 @@ static const char   symver_pseudo[] = ".symver";
 static const char * symver_state;
 #endif
 
+static char last_char;
+
 static char lex[256];
 static const char symbol_chars[] =
 "$._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
@@ -117,8 +119,7 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
     {
       lex['"'] = LEX_IS_STRINGQUOTE;
 
-#if ! defined (TC_HPPA) && ! defined (TC_I370)
-      /* I370 uses single-quotes to delimit integer, float constants.  */
+#if ! defined (TC_HPPA)
       lex['\''] = LEX_IS_ONECHAR_QUOTE;
 #endif
 
@@ -211,7 +212,7 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
 /* Saved state of the scrubber.  */
 static int state;
 static int old_state;
-static char *out_string;
+static const char *out_string;
 static char out_buf[20];
 static int add_newlines;
 static char *saved_input;
@@ -229,7 +230,7 @@ struct app_save
 {
   int          state;
   int          old_state;
-  char *       out_string;
+  const char * out_string;
   char         out_buf[sizeof (out_buf)];
   int          add_newlines;
   char *       saved_input;
@@ -242,14 +243,15 @@ struct app_save
 #if defined TC_ARM && defined OBJ_ELF
   const char * symver_state;
 #endif
+  char         last_char;
 };
 
 char *
 app_push (void)
 {
-  register struct app_save *saved;
+  struct app_save *saved;
 
-  saved = (struct app_save *) xmalloc (sizeof (*saved));
+  saved = XNEW (struct app_save);
   saved->state = state;
   saved->old_state = old_state;
   saved->out_string = out_string;
@@ -259,7 +261,7 @@ app_push (void)
     saved->saved_input = NULL;
   else
     {
-      saved->saved_input = (char *) xmalloc (saved_input_len);
+      saved->saved_input = XNEWVEC (char, saved_input_len);
       memcpy (saved->saved_input, saved_input, saved_input_len);
       saved->saved_input_len = saved_input_len;
     }
@@ -271,6 +273,7 @@ app_push (void)
 #if defined TC_ARM && defined OBJ_ELF
   saved->symver_state = symver_state;
 #endif
+  saved->last_char = last_char;
 
   /* do_scrub_begin() is not useful, just wastes time.  */
 
@@ -284,7 +287,7 @@ app_push (void)
 void
 app_pop (char *arg)
 {
-  register struct app_save *saved = (struct app_save *) arg;
+  struct app_save *saved = (struct app_save *) arg;
 
   /* There is no do_scrub_end ().  */
   state = saved->state;
@@ -310,6 +313,7 @@ app_pop (char *arg)
 #if defined TC_ARM && defined OBJ_ELF
   symver_state = saved->symver_state;
 #endif
+  last_char = saved->last_char;
 
   free (arg);
 }
@@ -360,7 +364,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
   char *from;
   char *fromend;
   size_t fromlen;
-  register int ch, ch2 = 0;
+  int ch, ch2 = 0;
   /* Character that started the string we're working on.  */
   static char quotechar;
 
@@ -591,13 +595,11 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
              state = old_state;
              PUT (ch);
            }
-#ifndef NO_STRING_ESCAPES
-         else if (ch == '\\')
+         else if (TC_STRING_ESCAPES && ch == '\\')
            {
              state = 6;
              PUT (ch);
            }
-#endif
          else if (scrub_m68k_mri && ch == '\n')
            {
              /* Just quietly terminate the string.  This permits lines like
@@ -695,6 +697,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
              state = 9;
              break;
            }
+         /* Fall through.  */
        case 17:
          /* We have seen "af" at the start of a symbol,
             a ' here is a part of that symbol.  */
@@ -1040,7 +1043,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
          PUT (ch);
          break;
 
-#ifndef IEEE_STYLE
        case LEX_IS_ONECHAR_QUOTE:
 #ifdef H_TICK_HEX
          if (state == 9 && enable_h_tick_hex)
@@ -1102,7 +1104,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
          out_string = out_buf;
          PUT (*out_string++);
          break;
-#endif
 
        case LEX_IS_COLON:
 #ifdef KEEP_WHITE_AROUND_COLON
@@ -1187,7 +1188,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
                  state = -2;
                  break;
                }
-             else
+             else if (ch2 != EOF)
                {
                  UNGET (ch2);
                }
@@ -1281,17 +1282,15 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
            goto de_fault;
 #endif
 
-#ifdef TC_ARM
-         /* For the ARM, care is needed not to damage occurrences of \@
-            by stripping the @ onwards.  Yuck.  */
-         if (to > tostart && *(to - 1) == '\\')
-           /* Do not treat the @ as a start-of-comment.  */
+         /* Care is needed not to damage occurrences of \<comment-char>
+            by stripping the <comment-char> onwards.  Yuck.  */
+         if ((to > tostart ? to[-1] : last_char) == '\\')
+           /* Do not treat the <comment-char> as a start-of-comment.  */
            goto de_fault;
-#endif
 
 #ifdef WARN_COMMENTS
          if (!found_comment)
-           as_where (&found_comment_file, &found_comment);
+           found_comment_file = as_where (&found_comment);
 #endif
          do
            {
@@ -1321,8 +1320,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
              else
                UNGET (quot);
            }
-         /* FALL THROUGH */
 #endif
+         /* Fall through.  */
 
        case LEX_IS_SYMBOL_COMPONENT:
          if (state == 10)
@@ -1464,6 +1463,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
 
  fromeof:
   /* We have reached the end of the input.  */
+  if (to > tostart)
+    last_char = to[-1];
   return to - tostart;
 
  tofull:
@@ -1477,5 +1478,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
   else
     saved_input = NULL;
 
+  if (to > tostart)
+    last_char = to[-1];
   return to - tostart;
 }