Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(941)

Unified Diff: pkg/front_end/lib/src/fasta/scanner/recover.dart

Issue 2661153005: Fix some problems with lexical error recovery. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/front_end/test/fasta/parser/parser.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/fasta/scanner/recover.dart
diff --git a/pkg/front_end/lib/src/fasta/scanner/recover.dart b/pkg/front_end/lib/src/fasta/scanner/recover.dart
index 5d3f5e91d27bfe6f0a7820911f1157345c6cbfd9..1479be9c8f946ef9155fbe93609f36f99e24a662 100644
--- a/pkg/front_end/lib/src/fasta/scanner/recover.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/recover.dart
@@ -113,14 +113,13 @@ Token defaultRecoveryStrategy(
next = next.next;
}
String value = new String.fromCharCodes(codeUnits);
- Token recovered = synthesizeToken(
- charOffset, value, Precedence.IDENTIFIER_INFO);
- recovered.next = next;
- return recovered;
+ return synthesizeToken(charOffset, value, Precedence.IDENTIFIER_INFO)
+ ..next = next;
}
recoverExponent() {
- return synthesizeToken(errorTail.charOffset, "NaN", Precedence.DOUBLE_INFO);
+ return synthesizeToken(errorTail.charOffset, "NaN", Precedence.DOUBLE_INFO)
+ ..next = errorTail.next;
}
recoverString() {
@@ -129,7 +128,8 @@ Token defaultRecoveryStrategy(
}
recoverHexDigit() {
- return synthesizeToken(errorTail.charOffset, "-1", Precedence.INT_INFO);
+ return synthesizeToken(errorTail.charOffset, "-1", Precedence.INT_INFO)
+ ..next = errorTail.next;
}
recoverStringInterpolation() {
@@ -145,7 +145,7 @@ Token defaultRecoveryStrategy(
recoverUnmatched() {
// TODO(ahe): Try to use top-level keywords (such as `class`, `typedef`,
// and `enum`) and identation to recover.
- return errorTail;
+ return errorTail.next;
}
for (Token current = tokens; !current.isEof; current = current.next) {
@@ -173,30 +173,37 @@ Token defaultRecoveryStrategy(
case ErrorKind.NonAsciiIdentifier:
current = recoverIdentifier(first);
+ assert(current.next != null);
break;
case ErrorKind.MissingExponent:
current = recoverExponent();
+ assert(current.next != null);
break;
case ErrorKind.UnterminatedString:
current = recoverString();
+ assert(current.next != null);
break;
case ErrorKind.ExpectedHexDigit:
current = recoverHexDigit();
+ assert(current.next != null);
break;
case ErrorKind.UnexpectedDollarInString:
current = recoverStringInterpolation();
+ assert(current.next != null);
break;
case ErrorKind.UnterminatedComment:
current = recoverComment();
+ assert(current.next != null);
break;
case ErrorKind.UnmatchedToken:
current = recoverUnmatched();
+ assert(current.next != null);
break;
case ErrorKind.UnterminatedToken: // TODO(ahe): Can this happen?
« no previous file with comments | « no previous file | pkg/front_end/test/fasta/parser/parser.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698