* mips-opc.c (MT32): New define.
[deliverable/binutils-gdb.git] / gas / app.c
index cbde88b8a6cbe21179f4c967fa16c9944182b5ff..9666ce58aca850a01b948b266d941b0866e1a7c1 100644 (file)
--- a/gas/app.c
+++ b/gas/app.c
@@ -1,6 +1,6 @@
 /* This is the Assembler Pre-Processor
    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
 /* This is the Assembler Pre-Processor
    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2002, 2003
+   1999, 2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 
-/* Modified by Allen Wirfs-Brock, Instantiations Inc 2/90 */
+/* Modified by Allen Wirfs-Brock, Instantiations Inc 2/90 */
 /* App, the assembler pre-processor.  This pre-processor strips out excess
    spaces, turns single-quoted characters into a decimal constant, and turns
    # <number> <filename> <garbage> into a .line <number>\n.file <filename>
    pair.  This needs better error-handling.  */
 
 #include <stdio.h>
 /* App, the assembler pre-processor.  This pre-processor strips out excess
    spaces, turns single-quoted characters into a decimal constant, and turns
    # <number> <filename> <garbage> into a .line <number>\n.file <filename>
    pair.  This needs better error-handling.  */
 
 #include <stdio.h>
-#include "as.h"                        /* For BAD_CASE() only */
+#include "as.h"                        /* For BAD_CASE() only */
 
 #if (__STDC__ != 1)
 #ifndef const
 
 #if (__STDC__ != 1)
 #ifndef const
@@ -87,15 +87,14 @@ static const char symbol_chars[] =
 #define IS_LINE_COMMENT(c)             (lex[c] == LEX_IS_LINE_COMMENT_START)
 #define        IS_NEWLINE(c)                   (lex[c] == LEX_IS_NEWLINE)
 
 #define IS_LINE_COMMENT(c)             (lex[c] == LEX_IS_LINE_COMMENT_START)
 #define        IS_NEWLINE(c)                   (lex[c] == LEX_IS_NEWLINE)
 
-static int process_escape PARAMS ((int));
+static int process_escape (int);
 
 /* FIXME-soon: The entire lexer/parser thingy should be
    built statically at compile time rather than dynamically
    each and every time the assembler is run.  xoxorich.  */
 
 void
 
 /* FIXME-soon: The entire lexer/parser thingy should be
    built statically at compile time rather than dynamically
    each and every time the assembler is run.  xoxorich.  */
 
 void
-do_scrub_begin (m68k_mri)
-     int m68k_mri ATTRIBUTE_UNUSED;
+do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
 {
   const char *p;
   int c;
 {
   const char *p;
   int c;
@@ -115,7 +114,7 @@ do_scrub_begin (m68k_mri)
       lex['"'] = LEX_IS_STRINGQUOTE;
 
 #if ! defined (TC_HPPA) && ! defined (TC_I370)
       lex['"'] = LEX_IS_STRINGQUOTE;
 
 #if ! defined (TC_HPPA) && ! defined (TC_I370)
-      /* I370 uses single-quotes to delimit integer, float constants */
+      /* I370 uses single-quotes to delimit integer, float constants */
       lex['\''] = LEX_IS_ONECHAR_QUOTE;
 #endif
 
       lex['\''] = LEX_IS_ONECHAR_QUOTE;
 #endif
 
@@ -130,9 +129,7 @@ do_scrub_begin (m68k_mri)
   /* Note that these override the previous defaults, e.g. if ';' is a
      comment char, then it isn't a line separator.  */
   for (p = symbol_chars; *p; ++p)
   /* Note that these override the previous defaults, e.g. if ';' is a
      comment char, then it isn't a line separator.  */
   for (p = symbol_chars; *p; ++p)
-    {
-      lex[(unsigned char) *p] = LEX_IS_SYMBOL_COMPONENT;
-    }                          /* declare symbol characters */
+    lex[(unsigned char) *p] = LEX_IS_SYMBOL_COMPONENT;
 
   for (c = 128; c < 256; ++c)
     lex[c] = LEX_IS_SYMBOL_COMPONENT;
 
   for (c = 128; c < 256; ++c)
     lex[c] = LEX_IS_SYMBOL_COMPONENT;
@@ -152,35 +149,25 @@ do_scrub_begin (m68k_mri)
 #define tc_comment_chars comment_chars
 #endif
   for (p = tc_comment_chars; *p; p++)
 #define tc_comment_chars comment_chars
 #endif
   for (p = tc_comment_chars; *p; p++)
-    {
-      lex[(unsigned char) *p] = LEX_IS_COMMENT_START;
-    }                          /* declare comment chars */
+    lex[(unsigned char) *p] = LEX_IS_COMMENT_START;
 
   for (p = line_comment_chars; *p; p++)
 
   for (p = line_comment_chars; *p; p++)
-    {
-      lex[(unsigned char) *p] = LEX_IS_LINE_COMMENT_START;
-    }                          /* declare line comment chars */
+    lex[(unsigned char) *p] = LEX_IS_LINE_COMMENT_START;
 
   for (p = line_separator_chars; *p; p++)
 
   for (p = line_separator_chars; *p; p++)
-    {
-      lex[(unsigned char) *p] = LEX_IS_LINE_SEPARATOR;
-    }                          /* declare line separators */
+    lex[(unsigned char) *p] = LEX_IS_LINE_SEPARATOR;
 
 #ifdef tc_parallel_separator_chars
   /* This macro permits the processor to specify all characters which
      separate parallel insns on the same line.  */
   for (p = tc_parallel_separator_chars; *p; p++)
 
 #ifdef tc_parallel_separator_chars
   /* This macro permits the processor to specify all characters which
      separate parallel insns on the same line.  */
   for (p = tc_parallel_separator_chars; *p; p++)
-    {
-      lex[(unsigned char) *p] = LEX_IS_PARALLEL_SEPARATOR;
-    }                          /* declare parallel separators */
+    lex[(unsigned char) *p] = LEX_IS_PARALLEL_SEPARATOR;
 #endif
 
   /* Only allow slash-star comments if slash is not in use.
      FIXME: This isn't right.  We should always permit them.  */
   if (lex['/'] == 0)
 #endif
 
   /* Only allow slash-star comments if slash is not in use.
      FIXME: This isn't right.  We should always permit them.  */
   if (lex['/'] == 0)
-    {
-      lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
-    }
+    lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
 
 #ifdef TC_M68K
   if (m68k_mri)
 
 #ifdef TC_M68K
   if (m68k_mri)
@@ -201,12 +188,12 @@ do_scrub_begin (m68k_mri)
   lex['|'] = LEX_IS_DOUBLEBAR_1ST;
 #endif
 #ifdef TC_D30V
   lex['|'] = LEX_IS_DOUBLEBAR_1ST;
 #endif
 #ifdef TC_D30V
-  /* must do this is we want VLIW instruction with "->" or "<-" */
+  /* Must do this is we want VLIW instruction with "->" or "<-".  */
   lex['-'] = LEX_IS_SYMBOL_COMPONENT;
 #endif
   lex['-'] = LEX_IS_SYMBOL_COMPONENT;
 #endif
-}                              /* do_scrub_begin() */
+}
 
 
-/* Saved state of the scrubber */
+/* Saved state of the scrubber */
 static int state;
 static int old_state;
 static char *out_string;
 static int state;
 static int old_state;
 static char *out_string;
@@ -223,7 +210,8 @@ static char mri_last_ch;
    state at the time .include is interpreted is completely unrelated.
    That's why we have to save it all.  */
 
    state at the time .include is interpreted is completely unrelated.
    That's why we have to save it all.  */
 
-struct app_save {
+struct app_save
+{
   int          state;
   int          old_state;
   char *       out_string;
   int          state;
   int          old_state;
   char *       out_string;
@@ -242,7 +230,7 @@ struct app_save {
 };
 
 char *
 };
 
 char *
-app_push ()
+app_push (void)
 {
   register struct app_save *saved;
 
 {
   register struct app_save *saved;
 
@@ -278,8 +266,7 @@ app_push ()
 }
 
 void
 }
 
 void
-app_pop (arg)
-     char *arg;
+app_pop (char *arg)
 {
   register struct app_save *saved = (struct app_save *) arg;
 
 {
   register struct app_save *saved = (struct app_save *) arg;
 
@@ -309,13 +296,13 @@ app_pop (arg)
 #endif
 
   free (arg);
 #endif
 
   free (arg);
-}                              /* app_pop() */
+}
 
 /* @@ This assumes that \n &c are the same on host and target.  This is not
    necessarily true.  */
 
 /* @@ This assumes that \n &c are the same on host and target.  This is not
    necessarily true.  */
+
 static int
 static int
-process_escape (ch)
-     int ch;
+process_escape (int ch)
 {
   switch (ch)
     {
 {
   switch (ch)
     {
@@ -350,10 +337,7 @@ process_escape (ch)
    This is the way the old code used to work.  */
 
 int
    This is the way the old code used to work.  */
 
 int
-do_scrub_chars (get, tostart, tolen)
-     int (*get) PARAMS ((char *, int));
-     char *tostart;
-     int tolen;
+do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen)
 {
   char *to = tostart;
   char *toend = tostart + tolen;
 {
   char *to = tostart;
   char *toend = tostart + tolen;
@@ -383,6 +367,12 @@ do_scrub_chars (get, tostart, tolen)
 #ifdef DOUBLEBAR_PARALLEL
         13: After seeing a vertical bar, looking for a second
             vertical bar as a parallel expression separator.
 #ifdef DOUBLEBAR_PARALLEL
         13: After seeing a vertical bar, looking for a second
             vertical bar as a parallel expression separator.
+#endif
+#ifdef TC_IA64
+        14: After seeing a `(' at state 0, looking for a `)' as
+            predicate.
+        15: After seeing a `(' at state 1, looking for a `)' as
+            predicate.
 #endif
          */
 
 #endif
          */
 
@@ -588,8 +578,7 @@ do_scrub_chars (get, tostart, tolen)
          else if (scrub_m68k_mri && ch == '\n')
            {
              /* Just quietly terminate the string.  This permits lines like
          else if (scrub_m68k_mri && ch == '\n')
            {
              /* Just quietly terminate the string.  This permits lines like
-                  bne  label   loop if we haven't reach end yet
-                */
+                  bne  label   loop if we haven't reach end yet.  */
              state = old_state;
              UNGET (ch);
              PUT ('\'');
              state = old_state;
              UNGET (ch);
              PUT ('\'');
@@ -680,11 +669,34 @@ do_scrub_chars (get, tostart, tolen)
 #endif
        }
 
 #endif
        }
 
-      /* OK, we are somewhere in states 0 through 4 or 9 through 11 */
+      /* OK, we are somewhere in states 0 through 4 or 9 through 11 */
 
       /* flushchar: */
       ch = GET ();
 
 
       /* flushchar: */
       ch = GET ();
 
+#ifdef TC_IA64
+      if (ch == '(' && (state == 0 || state == 1))
+       {
+         state += 14;
+         PUT (ch);
+         continue;
+       }
+      else if (state == 14 || state == 15)
+       {
+         if (ch == ')')
+           {
+             state -= 14;
+             PUT (ch);
+             ch = GET ();
+           }
+         else
+           {
+             PUT (ch);
+             continue;
+           }
+       }
+#endif
+
     recycle:
 
 #if defined TC_ARM && defined OBJ_ELF
     recycle:
 
 #if defined TC_ARM && defined OBJ_ELF
@@ -965,7 +977,7 @@ do_scrub_chars (get, tostart, tolen)
        case LEX_IS_STRINGQUOTE:
          if (state == 10)
            {
        case LEX_IS_STRINGQUOTE:
          if (state == 10)
            {
-             /* Preserve the whitespace in foo "bar" */
+             /* Preserve the whitespace in foo "bar" */
              UNGET (ch);
              state = 3;
              PUT (' ');
              UNGET (ch);
              state = 3;
              PUT (' ');
@@ -987,7 +999,7 @@ do_scrub_chars (get, tostart, tolen)
        case LEX_IS_ONECHAR_QUOTE:
          if (state == 10)
            {
        case LEX_IS_ONECHAR_QUOTE:
          if (state == 10)
            {
-             /* Preserve the whitespace in foo 'b' */
+             /* Preserve the whitespace in foo 'b' */
              UNGET (ch);
              state = 3;
              PUT (' ');
              UNGET (ch);
              state = 3;
              PUT (' ');
@@ -1082,10 +1094,10 @@ do_scrub_chars (get, tostart, tolen)
              ch = GET ();
            }
          while (ch != EOF && ch != '\n');
              ch = GET ();
            }
          while (ch != EOF && ch != '\n');
+
          if (ch == EOF)
          if (ch == EOF)
-           {
-             as_warn (_("end of file in comment; newline inserted"));
-           }
+           as_warn (_("end of file in comment; newline inserted"));
+
          state = 0;
          PUT ('\n');
          break;
          state = 0;
          PUT ('\n');
          break;
@@ -1095,9 +1107,8 @@ do_scrub_chars (get, tostart, tolen)
          ch2 = GET ();
          UNGET (ch2);
          if (ch2 != '|')
          ch2 = GET ();
          UNGET (ch2);
          if (ch2 != '|')
-           {
-             goto de_fault;
-           }
+           goto de_fault;
+
          /* Handle '||' in two states as invoking PUT twice might
             result in the first one jumping out of this loop.  We'd
             then lose track of the state and one '|' char.  */
          /* Handle '||' in two states as invoking PUT twice might
             result in the first one jumping out of this loop.  We'd
             then lose track of the state and one '|' char.  */
@@ -1123,7 +1134,7 @@ do_scrub_chars (get, tostart, tolen)
                {
                  UNGET (ch2);
                }
                {
                  UNGET (ch2);
                }
-           } /* bad hack */
+           }
 
          if (state == 0 || state == 1) /* Only comment at start of line.  */
            {
 
          if (state == 0 || state == 1) /* Only comment at start of line.  */
            {
@@ -1136,12 +1147,14 @@ do_scrub_chars (get, tostart, tolen)
                  ch = GET ();
                }
              while (ch != EOF && IS_WHITESPACE (ch));
                  ch = GET ();
                }
              while (ch != EOF && IS_WHITESPACE (ch));
+
              if (ch == EOF)
                {
                  as_warn (_("end of file in comment; newline inserted"));
                  PUT ('\n');
                  break;
                }
              if (ch == EOF)
                {
                  as_warn (_("end of file in comment; newline inserted"));
                  PUT ('\n');
                  break;
                }
+
              if (ch < '0' || ch > '9' || state != 0 || startch != '#')
                {
                  /* Not a cpp line.  */
              if (ch < '0' || ch > '9' || state != 0 || startch != '#')
                {
                  /* Not a cpp line.  */
@@ -1255,15 +1268,17 @@ do_scrub_chars (get, tostart, tolen)
                      && type != LEX_IS_SYMBOL_COMPONENT)
                    break;
                }
                      && type != LEX_IS_SYMBOL_COMPONENT)
                    break;
                }
+
              if (s > from)
              if (s > from)
-               {
-                 /* Handle the last character normally, for
-                    simplicity.  */
-                 --s;
-               }
+               /* Handle the last character normally, for
+                  simplicity.  */
+               --s;
+
              len = s - from;
              len = s - from;
+
              if (len > (toend - to) - 1)
                len = (toend - to) - 1;
              if (len > (toend - to) - 1)
                len = (toend - to) - 1;
+
              if (len > 0)
                {
                  PUT (ch);
              if (len > 0)
                {
                  PUT (ch);
@@ -1297,12 +1312,11 @@ do_scrub_chars (get, tostart, tolen)
          /* Some relatively `normal' character.  */
          if (state == 0)
            {
          /* Some relatively `normal' character.  */
          if (state == 0)
            {
-             if (IS_SYMBOL_COMPONENT (ch))
-               state = 11;     /* Now seeing label definition */
+             state = 11;       /* Now seeing label definition.  */
            }
          else if (state == 1)
            {
            }
          else if (state == 1)
            {
-             state = 2;        /* Ditto */
+             state = 2;        /* Ditto */
            }
          else if (state == 9)
            {
            }
          else if (state == 9)
            {
@@ -1355,4 +1369,3 @@ do_scrub_chars (get, tostart, tolen)
   return to - tostart;
 }
 
   return to - tostart;
 }
 
-/* end of app.c */
This page took 0.026964 seconds and 4 git commands to generate.