* app.c (do_scrub_next_char): Fix more bugs dealing with
authorJeff Law <law@redhat.com>
Wed, 29 Dec 1993 19:33:31 +0000 (19:33 +0000)
committerJeff Law <law@redhat.com>
Wed, 29 Dec 1993 19:33:31 +0000 (19:33 +0000)
        labels without colons (For HPPA and MRI).

gas/ChangeLog
gas/app.c

index 6020996c97783d3a609e832e7c052637be0ae860..192d3ef81e53f8a9f39fb2ce2012bf4cfb92e1cc 100644 (file)
@@ -1,3 +1,8 @@
+Wed Dec 29 11:31:44 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+       * app.c (do_scrub_next_char): Fix more bugs dealing with
+       labels without colons (For HPPA and MRI).
+
 Sun Dec 26 14:31:47 1993  Torbjorn Granlund  (tege@adder.cygnus.com)
 
        * tc-hppa.c (pre_defined_registers): Convert to lower case.
index f518eb58cbeca191d57b0d0ce26e115bacf37c57..1317c806237782eda33d847cb0d8cbaa6ca5fb12 100644 (file)
--- a/gas/app.c
+++ b/gas/app.c
@@ -310,7 +310,7 @@ do_scrub_next_char (get, unget)
          if (ch == '"')
            {
              (*unget) (ch);
-             out_string = "\n.appfile ";
+             out_string = "\n\t.appfile ";
              old_state = 7;
              state = -1;
              return *out_string++;
@@ -447,10 +447,6 @@ recycle:
          not_cpp_line = 1;
          goto recycle;
        }
-#ifdef MRI
-      (*unget) (ch);           /* Put back */
-      return ' ';              /* Always return one space at start of line */
-#endif
 
       /* If we're in state 2, we've seen a non-white
         character followed by whitespace.  If the next
@@ -462,6 +458,29 @@ recycle:
          return ch;
        }
 
+#if defined (LABELS_WITHOUT_COLONS) || defined (MRI)
+      /* Like above, but handles case where labels are not
+        required to have colons (and therefore must be identified
+        by their *position* in the input stream.)  For a testcase
+        see hppa/more.parse/labelbug.s.
+
+        This also has the effect of sometimes leaving a whitespace
+        before a newline.  Instead of trying to rework this horribly
+        broken and hairy code I'm just going to zap the extra space here.  */
+      if (state == 2 && lex[ch] == LEX_IS_SYMBOL_COMPONENT)
+       {
+         (*unget) (ch);
+         return ' ';
+       }
+
+      /* Don't emit a space before a newline.  */
+      if (state == 2 && lex[ch] == LEX_IS_NEWLINE)
+       {
+         state = 0;
+         return ch;
+       }
+#endif
+
       switch (state)
        {
        case 0:
@@ -640,7 +659,7 @@ recycle:
          (*unget) (ch);
          old_state = 4;
          state = -1;
-         out_string = ".appline ";
+         out_string = "\t.appline ";
          return *out_string++;
        }