--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Wed Jul 05 19:50:06 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Mon Jul 14 12:02:58 2014 +0200
@@ -213,7 +213,7 @@
reader.putChar(true);
}
skipIllegalUnderscores();
- if ('0' <= reader.ch && reader.ch <= '9') {
+ if (reader.digit(pos, 10) >= 0) {
scanDigits(pos, 10);
if (!hexFloatsWork)
lexError(pos, "unsupported.cross.fp.lit");
@@ -239,7 +239,7 @@
*/
private void scanFraction(int pos) {
skipIllegalUnderscores();
- if ('0' <= reader.ch && reader.ch <= '9') {
+ if (reader.digit(pos, 10) >= 0) {
scanDigits(pos, 10);
}
int sp1 = reader.sp;
@@ -250,7 +250,7 @@
reader.putChar(true);
}
skipIllegalUnderscores();
- if ('0' <= reader.ch && reader.ch <= '9') {
+ if (reader.digit(pos, 10) >= 0) {
scanDigits(pos, 10);
return;
}
@@ -384,11 +384,11 @@
reader.scanChar();
continue;
} else {
- high = reader.scanSurrogates();
- if (high != 0) {
- reader.putChar(high);
- isJavaIdentifierPart = Character.isJavaIdentifierPart(
- Character.toCodePoint(high, reader.ch));
+ int codePoint = reader.peekSurrogates();
+ if (codePoint >= 0) {
+ if (isJavaIdentifierPart = Character.isJavaIdentifierPart(codePoint)) {
+ reader.putChar(true);
+ }
} else {
isJavaIdentifierPart = Character.isJavaIdentifierPart(reader.ch);
}
@@ -530,7 +530,7 @@
break loop;
case '.':
reader.scanChar();
- if ('0' <= reader.ch && reader.ch <= '9') {
+ if (reader.digit(pos, 10) >= 0) {
reader.putChar('.');
scanFractionAndSuffix(pos);
} else if (reader.ch == '.') {
@@ -613,11 +613,11 @@
reader.scanChar();
if (reader.ch == '\'') {
lexError(pos, "empty.char.lit");
+ reader.scanChar();
} else {
if (reader.ch == CR || reader.ch == LF)
lexError(pos, "illegal.line.end.in.char.lit");
scanLitChar(pos);
- char ch2 = reader.ch;
if (reader.ch == '\'') {
reader.scanChar();
tk = TokenKind.CHARLITERAL;
@@ -642,29 +642,39 @@
scanOperator();
} else {
boolean isJavaIdentifierStart;
+ int codePoint = -1;
if (reader.ch < '\u0080') {
// all ASCII range chars already handled, above
isJavaIdentifierStart = false;
} else {
- char high = reader.scanSurrogates();
- if (high != 0) {
- reader.putChar(high);
-
- isJavaIdentifierStart = Character.isJavaIdentifierStart(
- Character.toCodePoint(high, reader.ch));
+ codePoint = reader.peekSurrogates();
+ if (codePoint >= 0) {
+ if (isJavaIdentifierStart = Character.isJavaIdentifierStart(codePoint)) {
+ reader.putChar(true);
+ }
} else {
isJavaIdentifierStart = Character.isJavaIdentifierStart(reader.ch);
}
}
if (isJavaIdentifierStart) {
scanIdent();
+ } else if (reader.digit(pos, 10) >= 0) {
+ scanNumber(pos, 10);
} else if (reader.bp == reader.buflen || reader.ch == EOI && reader.bp + 1 == reader.buflen) { // JLS 3.5
tk = TokenKind.EOF;
pos = reader.buflen;
} else {
- String arg = (32 < reader.ch && reader.ch < 127) ?
- String.format("%s", reader.ch) :
- String.format("\\u%04x", (int)reader.ch);
+ String arg;
+
+ if (codePoint >= 0) {
+ char high = reader.ch;
+ reader.scanChar();
+ arg = String.format("\\u%04x\\u%04x", (int) high, (int)reader.ch);
+ } else {
+ arg = (32 < reader.ch && reader.ch < 127) ?
+ String.format("%s", reader.ch) :
+ String.format("\\u%04x", (int)reader.ch);
+ }
lexError(pos, "illegal.char", arg);
reader.scanChar();
}