189 reader.putChar('\'', true); break;
190 case '\"':
191 reader.putChar('\"', true); break;
192 case '\\':
193 reader.putChar('\\', true); break;
194 default:
195 lexError(reader.bp, Errors.IllegalEscChar);
196 }
197 }
198 } else if (reader.bp != reader.buflen) {
199 reader.putChar(true);
200 }
201 }
202
203 private void scanDigits(int pos, int digitRadix) {
204 char saveCh;
205 int savePos;
206 do {
207 if (reader.ch != '_') {
208 reader.putChar(false);
209 } else {
210 checkSourceLevel(pos, Feature.UNDERSCORES_IN_LITERALS);
211 }
212 saveCh = reader.ch;
213 savePos = reader.bp;
214 reader.scanChar();
215 } while (reader.digit(pos, digitRadix) >= 0 || reader.ch == '_');
216 if (saveCh == '_')
217 lexError(savePos, Errors.IllegalUnderscore);
218 }
219
220 /** Read fractional part of hexadecimal floating point number.
221 */
222 private void scanHexExponentAndSuffix(int pos) {
223 if (reader.ch == 'p' || reader.ch == 'P') {
224 reader.putChar(true);
225 skipIllegalUnderscores();
226 if (reader.ch == '+' || reader.ch == '-') {
227 reader.putChar(true);
228 }
229 skipIllegalUnderscores();
230 if (reader.digit(pos, 10) >= 0) {
501 case 'K': case 'L': case 'M': case 'N': case 'O':
502 case 'P': case 'Q': case 'R': case 'S': case 'T':
503 case 'U': case 'V': case 'W': case 'X': case 'Y':
504 case 'Z':
505 case 'a': case 'b': case 'c': case 'd': case 'e':
506 case 'f': case 'g': case 'h': case 'i': case 'j':
507 case 'k': case 'l': case 'm': case 'n': case 'o':
508 case 'p': case 'q': case 'r': case 's': case 't':
509 case 'u': case 'v': case 'w': case 'x': case 'y':
510 case 'z':
511 case '$': case '_':
512 scanIdent();
513 break loop;
514 case '0':
515 reader.scanChar();
516 if (reader.ch == 'x' || reader.ch == 'X') {
517 reader.scanChar();
518 skipIllegalUnderscores();
519 scanNumber(pos, 16);
520 } else if (reader.ch == 'b' || reader.ch == 'B') {
521 checkSourceLevel(pos, Feature.BINARY_LITERALS);
522 reader.scanChar();
523 skipIllegalUnderscores();
524 scanNumber(pos, 2);
525 } else {
526 reader.putChar('0');
527 if (reader.ch == '_') {
528 int savePos = reader.bp;
529 do {
530 reader.scanChar();
531 } while (reader.ch == '_');
532 if (reader.digit(pos, 10) < 0) {
533 lexError(savePos, Errors.IllegalUnderscore);
534 }
535 }
536 scanNumber(pos, 8);
537 }
538 break loop;
539 case '1': case '2': case '3': case '4':
540 case '5': case '6': case '7': case '8': case '9':
541 scanNumber(pos, 10);
|
189 reader.putChar('\'', true); break;
190 case '\"':
191 reader.putChar('\"', true); break;
192 case '\\':
193 reader.putChar('\\', true); break;
194 default:
195 lexError(reader.bp, Errors.IllegalEscChar);
196 }
197 }
198 } else if (reader.bp != reader.buflen) {
199 reader.putChar(true);
200 }
201 }
202
203 private void scanDigits(int pos, int digitRadix) {
204 char saveCh;
205 int savePos;
206 do {
207 if (reader.ch != '_') {
208 reader.putChar(false);
209 }
210 saveCh = reader.ch;
211 savePos = reader.bp;
212 reader.scanChar();
213 } while (reader.digit(pos, digitRadix) >= 0 || reader.ch == '_');
214 if (saveCh == '_')
215 lexError(savePos, Errors.IllegalUnderscore);
216 }
217
218 /** Read fractional part of hexadecimal floating point number.
219 */
220 private void scanHexExponentAndSuffix(int pos) {
221 if (reader.ch == 'p' || reader.ch == 'P') {
222 reader.putChar(true);
223 skipIllegalUnderscores();
224 if (reader.ch == '+' || reader.ch == '-') {
225 reader.putChar(true);
226 }
227 skipIllegalUnderscores();
228 if (reader.digit(pos, 10) >= 0) {
499 case 'K': case 'L': case 'M': case 'N': case 'O':
500 case 'P': case 'Q': case 'R': case 'S': case 'T':
501 case 'U': case 'V': case 'W': case 'X': case 'Y':
502 case 'Z':
503 case 'a': case 'b': case 'c': case 'd': case 'e':
504 case 'f': case 'g': case 'h': case 'i': case 'j':
505 case 'k': case 'l': case 'm': case 'n': case 'o':
506 case 'p': case 'q': case 'r': case 's': case 't':
507 case 'u': case 'v': case 'w': case 'x': case 'y':
508 case 'z':
509 case '$': case '_':
510 scanIdent();
511 break loop;
512 case '0':
513 reader.scanChar();
514 if (reader.ch == 'x' || reader.ch == 'X') {
515 reader.scanChar();
516 skipIllegalUnderscores();
517 scanNumber(pos, 16);
518 } else if (reader.ch == 'b' || reader.ch == 'B') {
519 reader.scanChar();
520 skipIllegalUnderscores();
521 scanNumber(pos, 2);
522 } else {
523 reader.putChar('0');
524 if (reader.ch == '_') {
525 int savePos = reader.bp;
526 do {
527 reader.scanChar();
528 } while (reader.ch == '_');
529 if (reader.digit(pos, 10) < 0) {
530 lexError(savePos, Errors.IllegalUnderscore);
531 }
532 }
533 scanNumber(pos, 8);
534 }
535 break loop;
536 case '1': case '2': case '3': case '4':
537 case '5': case '6': case '7': case '8': case '9':
538 scanNumber(pos, 10);
|