PR 1070
authorNick Clifton <nickc@redhat.com>
Tue, 9 Aug 2005 15:47:46 +0000 (15:47 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 9 Aug 2005 15:47:46 +0000 (15:47 +0000)
* macro.c (getstring): Do not treat round parentheses exactly the same as angle
brackets - the parentheses need to be preserved and passed on to the macro processing code.

gas/ChangeLog
gas/macro.c

index 917565622767a1eaa1608f0cd4b9ea07bc679994..83f90af5b5209af29f32deb3e0660944b9788504 100644 (file)
@@ -1,3 +1,10 @@
+2005-08-09  Nick Clifton  <nickc@redhat.com>
+
+       PR 1070
+       * macro.c (getstring): Do not treat round parentheses exactly the
+       same as angle brackets - the parentheses need to be preserved and
+       passed on to the macro processing code.
+
 2005-08-08  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-msp430.c (MSP430_ISA_21): Define.
index fbe266612c30036434e397a36d636bbbca3ce22a..eab3e66bbe62d8c47a4643b453ec117bae8b0ee9 100644 (file)
@@ -310,12 +310,11 @@ getstring (int idx, sb *in, sb *acc)
             || (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
             || (in->ptr[idx] == '\'' && macro_alternate)))
     {
-      if (in->ptr[idx] == '<'
-         || in->ptr[idx] == '(')
+      if (in->ptr[idx] == '<')
        {
          int nest = 0;
-         char start_char = in->ptr[idx];
-         char end_char = in->ptr[idx] == '<' ? '>' : ')';
+         char start_char = '>';
+         char end_char = '>';
 
          idx++;
          while ((in->ptr[idx] != end_char || nest)
@@ -337,6 +336,28 @@ getstring (int idx, sb *in, sb *acc)
            }
          idx++;
        }
+      else if (in->ptr[idx] == '(')
+       {
+         int nest = 0;
+         char c;
+
+         do
+           {
+             c = in->ptr[idx];
+
+             if (c == '!')
+               c = in->ptr[++idx];
+             else if (c == ')')
+               nest--;
+             else if (c == '(')
+               nest++;
+
+             sb_add_char (acc, c);
+             idx++;
+           }
+         while ((c != ')' || nest)
+                && idx < in->len);
+       }
       else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'')
        {
          char tchar = in->ptr[idx];
@@ -389,7 +410,7 @@ getstring (int idx, sb *in, sb *acc)
     'Bxyx<whitespace>          -> return 'Bxyza
     %<expr>            -> return string of decimal value of <expr>
     "string"           -> return string
-    (string)           -> return string
+    (string)           -> return (string-including-whitespaces)
     xyx<whitespace>     -> return xyz.  */
 
 static int