2009-03-23 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 24 Mar 2009 01:04:25 +0000 (01:04 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 24 Mar 2009 01:04:25 +0000 (01:04 +0000)
PR gas/9966
* listing.c (listing_newline): Properly handle `\\"' and ';'.

* read.c (is_end_of_line): Update comments for line separator.
(read_begin): Set line separator in is_end_of_line to 2.

gas/ChangeLog
gas/listing.c
gas/read.c

index 103d442144caa8351d6fc09c254157c8b67a7193..eb9b7422a4f8e1cf6847b2c49a422046635c0ff3 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/9966
+       * listing.c (listing_newline): Properly handle `\\"' and ';'.
+
+       * read.c (is_end_of_line): Update comments for line separator.
+       (read_begin): Set line separator in is_end_of_line to 2.
+
 2009-03-19  David S. Miller  <davem@davemloft.net>
 
        * config/tc-sparc.c (md_parse_option): If the user gives
index 025a2ca67424fa39dedf88e9b7e195ee571d7eba..e307be21c9a3b77c9533d1af95eedbb91156fa68 100644 (file)
@@ -338,13 +338,18 @@ listing_newline (char *ps)
          char *copy;
          int len;
          int seen_quote = 0;
+         int seen_slash = 0;
 
          for (copy = input_line_pointer - 1;
               *copy && (seen_quote
-                        || (! is_end_of_line [(unsigned char) *copy]));
+                        || is_end_of_line [(unsigned char) *copy] != 1);
               copy++)
-           if (*copy == '"' && copy[-1] != '\\')
-             seen_quote = ! seen_quote;
+           {
+             if (*copy == '\\')
+               seen_slash = ! seen_slash;
+             else if (*copy == '"' && seen_slash)
+               seen_quote = ! seen_quote;
+           }
 
          len = (copy - input_line_pointer) + 2;
 
index 863a6ac13db92261a958d17b4f12203da85366dc..184dba7ebdc3e178215c0be9063cb5fb52aa9f7b 100644 (file)
@@ -125,7 +125,8 @@ char lex_type[256] = {
 };
 
 /* In: a character.
-   Out: 1 if this character ends a line.  */
+   Out: 1 if this character ends a line.
+       2 if this character is a line separator.  */
 char is_end_of_line[256] = {
 #ifdef CR_EOL
   1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,      /* @abcdefghijklmno */
@@ -239,7 +240,7 @@ read_begin (void)
 
   /* Use machine dependent syntax.  */
   for (p = line_separator_chars; *p; p++)
-    is_end_of_line[(unsigned char) *p] = 1;
+    is_end_of_line[(unsigned char) *p] = 2;
   /* Use more.  FIXME-SOMEDAY.  */
 
   if (flag_mri)