* 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,
-   1999, 2000, 2002, 2003
+   1999, 2000, 2001, 2002, 2003
    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
-   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>
-#include "as.h"                        /* For BAD_CASE() only */
+#include "as.h"                        /* For BAD_CASE() only */
 
 #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)
 
-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
-do_scrub_begin (m68k_mri)
-     int m68k_mri ATTRIBUTE_UNUSED;
+do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
 {
   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)
-      /* I370 uses single-quotes to delimit integer, float constants */
+      /* I370 uses single-quotes to delimit integer, float constants */
       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)
-    {
-      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;
@@ -152,35 +149,25 @@ do_scrub_begin (m68k_mri)
 #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++)
-    {
-      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++)
-    {
-      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++)
-    {
-      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)
-    {
-      lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
-    }
+    lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
 
 #ifdef TC_M68K
   if (m68k_mri)
@@ -201,12 +188,12 @@ do_scrub_begin (m68k_mri)
   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
-}                              /* do_scrub_begin() */
+}
 
-/* Saved state of the scrubber */
+/* Saved state of the scrubber */
 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.  */
 
-struct app_save {
+struct app_save
+{
   int          state;
   int          old_state;
   char *       out_string;
@@ -242,7 +230,7 @@ struct app_save {
 };
 
 char *
-app_push ()
+app_push (void)
 {
   register struct app_save *saved;
 
@@ -278,8 +266,7 @@ app_push ()
 }
 
 void
-app_pop (arg)
-     char *arg;
+app_pop (char *arg)
 {
   register struct app_save *saved = (struct app_save *) arg;
 
@@ -309,13 +296,13 @@ app_pop (arg)
 #endif
 
   free (arg);
-}                              /* app_pop() */
+}
 
 /* @@ This assumes that \n &c are the same on host and target.  This is not
    necessarily true.  */
+
 static int
-process_escape (ch)
-     int ch;
+process_escape (int ch)
 {
   switch (ch)
     {
@@ -350,10 +337,7 @@ process_escape (ch)
    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;
@@ -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.
+#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
          */
 
@@ -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
-                  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 ('\'');
@@ -680,11 +669,34 @@ do_scrub_chars (get, tostart, tolen)
 #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 ();
 
+#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
@@ -965,7 +977,7 @@ do_scrub_chars (get, tostart, tolen)
        case LEX_IS_STRINGQUOTE:
          if (state == 10)
            {
-             /* Preserve the whitespace in foo "bar" */
+             /* Preserve the whitespace in foo "bar" */
              UNGET (ch);
              state = 3;
              PUT (' ');
@@ -987,7 +999,7 @@ do_scrub_chars (get, tostart, tolen)
        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 (' ');
@@ -1082,10 +1094,10 @@ do_scrub_chars (get, tostart, tolen)
              ch = GET ();
            }
          while (ch != EOF && ch != '\n');
+
          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;
@@ -1095,9 +1107,8 @@ do_scrub_chars (get, tostart, tolen)
          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.  */
@@ -1123,7 +1134,7 @@ do_scrub_chars (get, tostart, tolen)
                {
                  UNGET (ch2);
                }
-           } /* bad hack */
+           }
 
          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));
+
              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.  */
@@ -1255,15 +1268,17 @@ do_scrub_chars (get, tostart, tolen)
                      && type != LEX_IS_SYMBOL_COMPONENT)
                    break;
                }
+
              if (s > from)
-               {
-                 /* Handle the last character normally, for
-                    simplicity.  */
-                 --s;
-               }
+               /* Handle the last character normally, for
+                  simplicity.  */
+               --s;
+
              len = s - from;
+
              if (len > (toend - to) - 1)
                len = (toend - to) - 1;
+
              if (len > 0)
                {
                  PUT (ch);
@@ -1297,12 +1312,11 @@ do_scrub_chars (get, tostart, tolen)
          /* 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)
            {
-             state = 2;        /* Ditto */
+             state = 2;        /* Ditto */
            }
          else if (state == 9)
            {
@@ -1355,4 +1369,3 @@ do_scrub_chars (get, tostart, tolen)
   return to - tostart;
 }
 
-/* end of app.c */
This page took 0.0291 seconds and 4 git commands to generate.