* as.c (main): On TC_A29K, call macro_init with macro_alternate
authorIan Lance Taylor <ian@airs.com>
Fri, 3 Nov 1995 18:31:25 +0000 (18:31 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 3 Nov 1995 18:31:25 +0000 (18:31 +0000)
set to 1.
* macro.c (get_any_string): Don't keep quotes if macro_strip_at is
set, even if macro_alternate is set.
(get_apost_token): If macro_strip_at, only skip kind if it is '@'.
(sub_actual): If macro_strip_at, and kind is '@', don't look up
the token unless it ended in '@'.
* config/tc-a29k.c (line_separator_chars): Remove '@'.
* doc/c-a29k.texi: Document macro usage on A29K.

gas/ChangeLog
gas/config/tc-a29k.c
gas/doc/c-a29k.texi
gas/macro.c

index 74cd48d11cd11e3580aa5459cda32f738352e86d..f01840fc46c05a8fc86cf6b20e91daa3693f0697 100644 (file)
@@ -1,3 +1,15 @@
+Fri Nov  3 13:02:59 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * as.c (main): On TC_A29K, call macro_init with macro_alternate
+       set to 1.
+       * macro.c (get_any_string): Don't keep quotes if macro_strip_at is
+       set, even if macro_alternate is set.
+       (get_apost_token): If macro_strip_at, only skip kind if it is '@'.
+       (sub_actual): If macro_strip_at, and kind is '@', don't look up
+       the token unless it ended in '@'.
+       * config/tc-a29k.c (line_separator_chars): Remove '@'.
+       * doc/c-a29k.texi: Document macro usage on A29K.
+
 Thu Nov  2 23:07:57 1995  Ian Lance Taylor  <ian@cygnus.com>
 
        * config/tc-m68k.c (m68k_ip): Handle new 'W' place, meaning a
index 9832a3808ed7b7f6005eb4335cf01c42634480e3..96b13d9dfc3b74888724f9523b95b04c1cc4a114 100644 (file)
@@ -104,7 +104,7 @@ const char line_comment_chars[] = "#";
 
 /* We needed an unused char for line separation to work around the
    lack of macros, using sed and such.  */
-const char line_separator_chars[] = "@";
+const char line_separator_chars[] = "";
 
 /* Chars that can be used to separate mant from exp in floating point nums */
 const char EXP_CHARS[] = "eE";
index 1e5383b79d4966ff1915b6cc17c6e04801677eb5..771831a2efec393778a3926af3c5885f6806715b 100644 (file)
 @node AMD29K Syntax
 @section Syntax
 @menu
+* AMD29K-Macros::              Macros
 * AMD29K-Chars::                Special Characters
 * AMD29K-Regs::                 Register Names
 @end menu
 
+@node AMD29K-Macros
+@subsection Macros
+
+@cindex Macros, AMD 29K
+@cindex AMD 29K macros
+The macro syntax used on the AMD 29K is like that described in the AMD
+29K Family Macro Assembler Specification.  Normal @code{@value{AS}}
+macros should still work.
+
 @node AMD29K-Chars
 @subsection Special Characters
 
 @cindex AMD 29K line comment character
 @samp{;} is the line comment character.
 
-@cindex line separator, AMD 29K
-@cindex AMD 29K line separator
-@cindex statement separator, AMD 29K
-@cindex AMD 29K statement separator
-@samp{@@} can be used instead of a newline to separate statements.
-
 @cindex identifiers, AMD 29K
 @cindex AMD 29K identifiers
 The character @samp{?} is permitted in identifiers (but may not begin
index e256feebb69ff71ebfe64930d08331d8f844eb6d..5743f795362efd9b42ea87b63005ad07544d179b 100644 (file)
 
 #include "config.h"
 #include <stdio.h>
+#ifdef HAVE_STRING_H
 #include <string.h>
+#else
+#include <strings.h>
+#endif
 #include <ctype.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
@@ -382,7 +386,9 @@ get_any_string (idx, in, out, expand, pretend_quoted)
               || in->ptr[idx] == '<'
               || (macro_alternate && in->ptr[idx] == '\''))
        {
-         if (macro_alternate && expand)
+         if (macro_alternate
+             && ! macro_strip_at
+             && expand)
            {
              /* Keep the quotes */
              sb_add_char (out,  '\"');
@@ -573,8 +579,10 @@ get_apost_token (idx, in, name, kind)
      int kind;
 {
   idx = get_token (idx, in, name);
-  if (idx < in->len && in->ptr[idx] == kind
-      && (! macro_mri || macro_strip_at))
+  if (idx < in->len
+      && in->ptr[idx] == kind
+      && (! macro_mri || macro_strip_at)
+      && (! macro_strip_at || kind == '@'))
     idx++;
   return idx;
 }
@@ -582,8 +590,8 @@ get_apost_token (idx, in, name, kind)
 /* Substitute the actual value for a formal parameter.  */
 
 static int
-sub_actual (src, in, t, formal_hash, kind, out, copyifnotthere)
-     int src;
+sub_actual (start, in, t, formal_hash, kind, out, copyifnotthere)
+     int start;
      sb *in;
      sb *t;
      struct hash_control *formal_hash;
@@ -591,11 +599,18 @@ sub_actual (src, in, t, formal_hash, kind, out, copyifnotthere)
      sb *out;
      int copyifnotthere;
 {
+  int src;
   formal_entry *ptr;
 
-  src = get_apost_token (src, in, t, kind);
-  /* See if it's in the macro's hash table */
-  ptr = (formal_entry *) hash_find (formal_hash, sb_terminate (t));
+  src = get_apost_token (start, in, t, kind);
+  /* See if it's in the macro's hash table, unless this is
+     macro_strip_at and kind is '@' and the token did not end in '@'.  */
+  if (macro_strip_at
+      && kind == '@'
+      && (src == start || in->ptr[src - 1] != '@'))
+    ptr = NULL;
+  else
+    ptr = (formal_entry *) hash_find (formal_hash, sb_terminate (t));
   if (ptr)
     {
       if (ptr->actual.len)