Skip to content

Commit 24d1e51

Browse files
Dan Rubelcommit-bot@chromium.org
authored andcommitted
improve missing hex digit recovery
Change-Id: I12d9e3fe314e850a6ee9599187d67dfa5455b18a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110143 Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 3999da0 commit 24d1e51

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ import 'error_token.dart'
3535

3636
import 'keyword_state.dart' show KeywordState;
3737

38-
import 'token.dart'
39-
show CommentToken, DartDocToken, LanguageVersionToken, SyntheticStringToken;
38+
import 'token.dart' show CommentToken, DartDocToken, LanguageVersionToken;
4039

4140
import 'token_constants.dart';
4241

@@ -1117,8 +1116,8 @@ abstract class AbstractScanner implements Scanner {
11171116
prependErrorToken(new UnterminatedToken(
11181117
messageExpectedHexDigit, start, stringOffset));
11191118
// Recovery
1120-
// TODO(danrubel): append actual characters not "0"
1121-
appendToken(SyntheticStringToken(TokenType.INT, "0", tokenStart));
1119+
appendSyntheticSubstringToken(
1120+
TokenType.HEXADECIMAL, start, true, "0");
11221121
return next;
11231122
}
11241123
appendSubstringToken(TokenType.HEXADECIMAL, start, true);

pkg/front_end/test/scanner_test.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,12 @@ abstract class ScannerTestBase {
303303
}
304304

305305
void test_hexadecimal_missingDigit() {
306-
_assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 5, "a = 0x");
306+
var token = _assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 5, "a = 0x");
307+
expect(token.lexeme, 'a');
308+
token = token.next;
309+
expect(token.lexeme, '=');
310+
token = token.next;
311+
expect(token.lexeme, '0x0');
307312
}
308313

309314
void test_identifier() {
@@ -1299,13 +1304,14 @@ abstract class ScannerTestBase {
12991304
* [expectedOffset] the string offset that should be associated with the error
13001305
* [source] the source to be scanned to produce the error
13011306
*/
1302-
void _assertError(
1307+
Token _assertError(
13031308
ScannerErrorCode expectedError, int expectedOffset, String source,
13041309
[List<Object> arguments]) {
13051310
ErrorListener listener = new ErrorListener();
1306-
scanWithListener(source, listener);
1311+
var tokens = scanWithListener(source, listener);
13071312
listener.assertErrors(
13081313
[new TestError(expectedOffset, expectedError, arguments)]);
1314+
return tokens;
13091315
}
13101316

13111317
/**

0 commit comments

Comments
 (0)