PR 1070
authorNick Clifton <nickc@redhat.com>
Mon, 8 Aug 2005 11:15:33 +0000 (11:15 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 8 Aug 2005 11:15:33 +0000 (11:15 +0000)
* macro.c (getstring): Treat round parentheses in the same way as angle brackets.
(get_any_string): Likewise.

gas/ChangeLog
gas/macro.c

index fac097e5f9b71524990e997d9e61cf49a2df12b5..ccb4b02c9f180da4845d49a41c962048e7e67363 100644 (file)
@@ -1,3 +1,10 @@
+2005-08-08  Nick Clifton  <nickc@redhat.com>
+
+       PR 1070
+       * macro.c (getstring): Treat round parentheses in the same way as
+       angle brackets.
+       (get_any_string): Likewise.
+
 2005-08-07  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gas/1118
index afc560fbbc03f59c49d199483080e1e42c65c1b2..fbe266612c30036434e397a36d636bbbca3ce22a 100644 (file)
@@ -306,14 +306,19 @@ getstring (int idx, sb *in, sb *acc)
 {
   while (idx < in->len
         && (in->ptr[idx] == '"'
+            || in->ptr[idx] == '('
             || (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
             || (in->ptr[idx] == '\'' && macro_alternate)))
     {
-      if (in->ptr[idx] == '<')
+      if (in->ptr[idx] == '<'
+         || in->ptr[idx] == '(')
        {
          int nest = 0;
+         char start_char = in->ptr[idx];
+         char end_char = in->ptr[idx] == '<' ? '>' : ')';
+
          idx++;
-         while ((in->ptr[idx] != '>' || nest)
+         while ((in->ptr[idx] != end_char || nest)
                 && idx < in->len)
            {
              if (in->ptr[idx] == '!')
@@ -323,9 +328,9 @@ getstring (int idx, sb *in, sb *acc)
                }
              else
                {
-                 if (in->ptr[idx] == '>')
+                 if (in->ptr[idx] == end_char)
                    nest--;
-                 if (in->ptr[idx] == '<')
+                 if (in->ptr[idx] == start_char)
                    nest++;
                  sb_add_char (acc, in->ptr[idx++]);
                }
@@ -382,10 +387,10 @@ getstring (int idx, sb *in, sb *acc)
 /* Fetch string from the input stream,
    rules:
     'Bxyx<whitespace>          -> return 'Bxyza
-    %<char>            -> return string of decimal value of x
-    "<string>"         -> return string
-    xyx<whitespace>     -> return xyz
-*/
+    %<expr>            -> return string of decimal value of <expr>
+    "string"           -> return string
+    (string)           -> return string
+    xyx<whitespace>     -> return xyz.  */
 
 static int
 get_any_string (int idx, sb *in, sb *out)
@@ -404,6 +409,7 @@ get_any_string (int idx, sb *in, sb *out)
        {
          int val;
          char buf[20];
+
          /* Turns the next expression into a string.  */
          /* xgettext: no-c-format */
          idx = (*macro_expr) (_("% operator needs absolute expression"),
@@ -414,6 +420,7 @@ get_any_string (int idx, sb *in, sb *out)
          sb_add_string (out, buf);
        }
       else if (in->ptr[idx] == '"'
+              || in->ptr[idx] == '('
               || (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
               || (macro_alternate && in->ptr[idx] == '\''))
        {
@@ -443,6 +450,7 @@ get_any_string (int idx, sb *in, sb *out)
                  || in->ptr[idx] == '\'')
                {
                  char tchar = in->ptr[idx];
+
                  sb_add_char (out, in->ptr[idx++]);
                  while (idx < in->len
                         && in->ptr[idx] != tchar)