src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java

changeset 1431
1f41a5758cf7
parent 1385
75c936d14c6a
child 1442
fcf89720ae71
     1.1 --- a/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java	Tue Nov 27 13:55:10 2012 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java	Fri Nov 23 15:13:45 2012 +0000
     1.3 @@ -348,8 +348,8 @@
     1.4      private void scanIdent() {
     1.5          boolean isJavaIdentifierPart;
     1.6          char high;
     1.7 +        reader.putChar(true);
     1.8          do {
     1.9 -            reader.putChar(true);
    1.10              switch (reader.ch) {
    1.11              case 'A': case 'B': case 'C': case 'D': case 'E':
    1.12              case 'F': case 'G': case 'H': case 'I': case 'J':
    1.13 @@ -366,6 +366,7 @@
    1.14              case '$': case '_':
    1.15              case '0': case '1': case '2': case '3': case '4':
    1.16              case '5': case '6': case '7': case '8': case '9':
    1.17 +                break;
    1.18              case '\u0000': case '\u0001': case '\u0002': case '\u0003':
    1.19              case '\u0004': case '\u0005': case '\u0006': case '\u0007':
    1.20              case '\u0008': case '\u000E': case '\u000F': case '\u0010':
    1.21 @@ -373,26 +374,33 @@
    1.22              case '\u0015': case '\u0016': case '\u0017':
    1.23              case '\u0018': case '\u0019': case '\u001B':
    1.24              case '\u007F':
    1.25 -                break;
    1.26 +                reader.scanChar();
    1.27 +                continue;
    1.28              case '\u001A': // EOI is also a legal identifier part
    1.29                  if (reader.bp >= reader.buflen) {
    1.30                      name = reader.name();
    1.31                      tk = tokens.lookupKind(name);
    1.32                      return;
    1.33                  }
    1.34 -                break;
    1.35 +                reader.scanChar();
    1.36 +                continue;
    1.37              default:
    1.38                  if (reader.ch < '\u0080') {
    1.39                      // all ASCII range chars already handled, above
    1.40                      isJavaIdentifierPart = false;
    1.41                  } else {
    1.42 -                    high = reader.scanSurrogates();
    1.43 -                    if (high != 0) {
    1.44 -                        reader.putChar(high);
    1.45 -                        isJavaIdentifierPart = Character.isJavaIdentifierPart(
    1.46 -                            Character.toCodePoint(high, reader.ch));
    1.47 +                    if (Character.isIdentifierIgnorable(reader.ch)) {
    1.48 +                        reader.scanChar();
    1.49 +                        continue;
    1.50                      } else {
    1.51 -                        isJavaIdentifierPart = Character.isJavaIdentifierPart(reader.ch);
    1.52 +                        high = reader.scanSurrogates();
    1.53 +                        if (high != 0) {
    1.54 +                            reader.putChar(high);
    1.55 +                            isJavaIdentifierPart = Character.isJavaIdentifierPart(
    1.56 +                                Character.toCodePoint(high, reader.ch));
    1.57 +                        } else {
    1.58 +                            isJavaIdentifierPart = Character.isJavaIdentifierPart(reader.ch);
    1.59 +                        }
    1.60                      }
    1.61                  }
    1.62                  if (!isJavaIdentifierPart) {
    1.63 @@ -401,6 +409,7 @@
    1.64                      return;
    1.65                  }
    1.66              }
    1.67 +            reader.putChar(true);
    1.68          } while (true);
    1.69      }
    1.70  

mercurial