Commit 82b22c42 by Tom Tromey Committed by Tom Tromey

lex.c (java_lex): Don't include UEOF as part of token.

	* lex.c (java_lex): Don't include UEOF as part of token.
	(java_read_unicode): Error if \u sequence prematurely terminated.

From-SVN: r61993
parent bffcd064
2003-01-28 Tom Tromey <tromey@redhat.com>
* lex.c (java_lex): Don't include UEOF as part of token.
(java_read_unicode): Error if \u sequence prematurely terminated.
2003-01-27 Tom Tromey <tromey@redhat.com> 2003-01-27 Tom Tromey <tromey@redhat.com>
* parse.y (java_check_regular_methods): Check for construct after * parse.y (java_check_regular_methods): Check for construct after
......
...@@ -542,23 +542,31 @@ java_read_unicode (java_lexer *lex, int *unicode_escape_p) ...@@ -542,23 +542,31 @@ java_read_unicode (java_lexer *lex, int *unicode_escape_p)
while ((c = java_read_char (lex)) == 'u') while ((c = java_read_char (lex)) == 'u')
; ;
/* Unget the most recent character as it is not a `u'. */ shift = 12;
if (c == UEOF) do
return UEOF;
lex->unget_value = c;
/* Next should be 4 hex digits, otherwise it's an error.
The hex value is converted into the unicode, pushed into
the Unicode stream. */
for (shift = 12; shift >= 0; shift -= 4)
{ {
if ((c = java_read_char (lex)) == UEOF) if (c == UEOF)
return UEOF; {
java_lex_error ("prematurely terminated \\u sequence", 0);
return UEOF;
}
if (hex_p (c)) if (hex_p (c))
unicode |= (unicode_t)(hex_value (c) << shift); unicode |= (unicode_t)(hex_value (c) << shift);
else else
java_lex_error ("Non hex digit in Unicode escape sequence", 0); {
java_lex_error ("non-hex digit in \\u sequence", 0);
break;
}
c = java_read_char (lex);
shift -= 4;
} }
while (shift >= 0);
if (c != UEOF)
lex->unget_value = c;
lex->bs_count = 0; lex->bs_count = 0;
*unicode_escape_p = 1; *unicode_escape_p = 1;
return unicode; return unicode;
...@@ -1514,7 +1522,7 @@ java_lex (YYSTYPE *java_lval) ...@@ -1514,7 +1522,7 @@ java_lex (YYSTYPE *java_lval)
/* Keyword, boolean literal or null literal. */ /* Keyword, boolean literal or null literal. */
for (first_unicode = c, all_ascii = 1, ascii_index = 0; for (first_unicode = c, all_ascii = 1, ascii_index = 0;
JAVA_PART_CHAR_P (c); c = java_get_unicode ()) c != UEOF && JAVA_PART_CHAR_P (c); c = java_get_unicode ())
{ {
java_unicode_2_utf8 (c); java_unicode_2_utf8 (c);
if (all_ascii && c >= 128) if (all_ascii && c >= 128)
...@@ -1524,7 +1532,8 @@ java_lex (YYSTYPE *java_lval) ...@@ -1524,7 +1532,8 @@ java_lex (YYSTYPE *java_lval)
obstack_1grow (&temporary_obstack, '\0'); obstack_1grow (&temporary_obstack, '\0');
string = obstack_finish (&temporary_obstack); string = obstack_finish (&temporary_obstack);
java_unget_unicode (); if (c != UEOF)
java_unget_unicode ();
/* If we have something all ascii, we consider a keyword, a boolean /* If we have something all ascii, we consider a keyword, a boolean
literal, a null literal or an all ASCII identifier. Otherwise, literal, a null literal or an all ASCII identifier. Otherwise,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment