aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/lex.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-06-29 17:03:49 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-06-29 17:03:49 +0000
commit61d5c158833392a84403997867962ca7368392ee (patch)
treea5d813f0a2b5a9f34a9c63ae7df162dfa36725b8 /gcc/java/lex.c
parent3097c22b202d860d624a6ada70866096d1b2aa5a (diff)
downloadgcc-61d5c158833392a84403997867962ca7368392ee.zip
gcc-61d5c158833392a84403997867962ca7368392ee.tar.gz
gcc-61d5c158833392a84403997867962ca7368392ee.tar.bz2
lex.c (java_lineterminator): Don't recognize \r after \n.
* lex.c (java_lineterminator): Don't recognize \r after \n. If \r follows \r, then unget it at a lower level. From-SVN: r34782
Diffstat (limited to 'gcc/java/lex.c')
-rw-r--r--gcc/java/lex.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/gcc/java/lex.c b/gcc/java/lex.c
index c1d4c03..6efb907 100644
--- a/gcc/java/lex.c
+++ b/gcc/java/lex.c
@@ -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;