aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/macro.c31
2 files changed, 33 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9175656..83f90af 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/macro.c b/gas/macro.c
index fbe2666..eab3e66 100644
--- a/gas/macro.c
+++ b/gas/macro.c
@@ -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