lex.c (java_lineterminator): Don't recognize \r after \n.
authorTom Tromey <tromey@cygnus.com>
Thu, 29 Jun 2000 17:03:49 +0000 (17:03 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 29 Jun 2000 17:03:49 +0000 (17:03 +0000)
* lex.c (java_lineterminator): Don't recognize \r after \n.  If \r
follows \r, then unget it at a lower level.

From-SVN: r34782

gcc/java/ChangeLog
gcc/java/lex.c

index fbd319b..dba6dc4 100644 (file)
@@ -1,3 +1,8 @@
+2000-06-27  Tom Tromey  <tromey@cygnus.com>
+
+       * lex.c (java_lineterminator): Don't recognize \r after \n.  If \r
+       follows \r, then unget it at a lower level.
+
 2000-06-26  Tom Tromey  <tromey@cygnus.com>
 
        * parse.y (resolve_field_access): Pass decl, not DECL_INITIAL, to
index c1d4c03..6efb907 100644 (file)
@@ -347,19 +347,23 @@ static int
 java_lineterminator (c)
      unicode_t c;
 {
-  int unicode_escape_p;
-  if (c == '\n')               /* CR */
+  if (c == '\n')               /* LF */
+    return 1;
+  else if (c == '\r')          /* CR */
     {
-      if ((c = java_read_unicode (1, &unicode_escape_p)) != '\r')
+      int unicode_escape_p;
+      c = java_read_unicode (1, &unicode_escape_p);
+      if (c == '\r')
        {
-         ctxp->c_line->ahead [0] = c;
-         ctxp->c_line->unicode_escape_ahead_p = unicode_escape_p;
+         /* In this case we will have another terminator.  For some
+            reason the lexer has several different unget methods.  We
+            can't use the `ahead' method because then the \r will end
+            up in the actual text of the line, causing an error.  So
+            instead we choose a very low-level method.  FIXME: this
+            is incredibly ugly.  */
+         UNGETC (c);
        }
-      return 1;
-    }
-  else if (c == '\r')          /* LF */
-    {
-      if ((c = java_read_unicode (1, &unicode_escape_p)) != '\n')
+      else if (c != '\n')
        {
          ctxp->c_line->ahead [0] = c;
          ctxp->c_line->unicode_escape_ahead_p = unicode_escape_p;