(buffer_and_nest): Store more to sb instead of '\n'.
authorNick Clifton <nickc@redhat.com>
Thu, 13 Mar 2003 11:49:33 +0000 (11:49 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 13 Mar 2003 11:49:33 +0000 (11:49 +0000)
(get_line_sb): Return end of line character or '\n' if it is zero or
non-existent.

gas/ChangeLog
gas/macro.c
gas/read.c

index 148a04b..4f281b7 100644 (file)
@@ -1,3 +1,9 @@
+2003-03-09  James E Wilson  <wilson@tuliptree.org>
+
+       * macro.c (buffer_and_nest): Store more to sb instead of '\n'.
+       * read.c (get_line_sb): Return end of line character or '\n' if
+       it is zero or non-existent.
+
 2003-03-12  Alexandre Oliva  <aoliva@redhat.com>
 
        * config/tc-mips.c (mips_validate_fix): New function.
index 77dc067..469ca80 100644 (file)
@@ -222,8 +222,8 @@ buffer_and_nest (from, to, ptr, get_line)
            }
        }
 
-      /* Add a CR to the end and keep running.  */
-      sb_add_char (ptr, '\n');
+      /* Add the original end-of-line char to the end and keep running.  */
+      sb_add_char (ptr, more);
       line_start = ptr->len;
       more = get_line (ptr);
     }
index f8d5d7e..90ef367 100644 (file)
@@ -2235,13 +2235,15 @@ s_lsym (ignore)
   demand_empty_rest_of_line ();
 }
 
-/* Read a line into an sb.  */
+/* Read a line into an sb.  Returns the character that ended the line
+   or zero if there are no more lines.  */
 
 static int
 get_line_sb (line)
      sb *line;
 {
   char quote1, quote2, inquote;
+  unsigned char c;
 
   if (input_line_pointer[-1] == '\n')
     bump_line_counters ();
@@ -2269,31 +2271,29 @@ get_line_sb (line)
 
   inquote = '\0';
 
-  while (!is_end_of_line[(unsigned char) *input_line_pointer]
-        || (inquote != '\0' && *input_line_pointer != '\n'))
+  while ((c = * input_line_pointer ++) != 0
+        && (!is_end_of_line[c]
+            || (inquote != '\0' && c != '\n')))
     {
-      if (inquote == *input_line_pointer)
+      if (inquote == c)
        inquote = '\0';
       else if (inquote == '\0')
        {
-         if (*input_line_pointer == quote1)
+         if (c == quote1)
            inquote = quote1;
-         else if (*input_line_pointer == quote2)
+         else if (c == quote2)
            inquote = quote2;
        }
 
-      sb_add_char (line, *input_line_pointer++);
+      sb_add_char (line, c);
     }
 
-  while (input_line_pointer < buffer_limit
-        && is_end_of_line[(unsigned char) *input_line_pointer])
-    {
-      if (input_line_pointer[-1] == '\n')
-       bump_line_counters ();
-      ++input_line_pointer;
-    }
-
-  return 1;
+  /* Don't skip multiple end-of-line characters, because that breaks support
+     for the IA-64 stop bit (;;) which looks like two consecutive end-of-line
+     characters but isn't.  Instead just skip one end of line character and
+     return the character skipped so that the caller can re-insert it if
+     necessary.   */
+  return c;
 }
 
 /* Define a macro.  This is an interface to macro.c.  */