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

Side by Side Diff: pkg/front_end/lib/src/scanner/errors.dart

Issue 2923113002: translate remaining fasta scanner error codes (Closed)
Patch Set: address comments Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:front_end/src/base/errors.dart'; 5 import 'package:front_end/src/base/errors.dart';
6 import 'package:front_end/src/fasta/fasta_codes.dart'; 6 import 'package:front_end/src/fasta/fasta_codes.dart';
7 import 'package:front_end/src/fasta/scanner/error_token.dart'; 7 import 'package:front_end/src/fasta/scanner/error_token.dart';
8 import 'package:front_end/src/scanner/token.dart' show Token; 8 import 'package:front_end/src/scanner/token.dart' show Token, TokenType;
9 import 'package:front_end/src/fasta/scanner/token_constants.dart'; 9 import 'package:front_end/src/fasta/scanner/token_constants.dart';
10 10
11 /** 11 /**
12 * The error codes used for errors detected by the scanner. 12 * The error codes used for errors detected by the scanner.
13 */ 13 */
14 class ScannerErrorCode extends ErrorCode { 14 class ScannerErrorCode extends ErrorCode {
15 /** 15 /**
16 * Parameters: 16 * Parameters:
17 * 0: the token that was expected but not found
18 */
19 static const ScannerErrorCode EXPECTED_TOKEN =
20 const ScannerErrorCode('EXPECTED_TOKEN', "Expected to find '{0}'.");
21
22 /**
23 * Parameters:
17 * 0: the illegal character 24 * 0: the illegal character
18 */ 25 */
19 static const ScannerErrorCode ILLEGAL_CHARACTER = 26 static const ScannerErrorCode ILLEGAL_CHARACTER =
20 const ScannerErrorCode('ILLEGAL_CHARACTER', "Illegal character '{0}'."); 27 const ScannerErrorCode('ILLEGAL_CHARACTER', "Illegal character '{0}'.");
21 28
22 static const ScannerErrorCode MISSING_DIGIT = 29 static const ScannerErrorCode MISSING_DIGIT =
23 const ScannerErrorCode('MISSING_DIGIT', "Decimal digit expected."); 30 const ScannerErrorCode('MISSING_DIGIT', "Decimal digit expected.");
24 31
25 static const ScannerErrorCode MISSING_HEX_DIGIT = const ScannerErrorCode( 32 static const ScannerErrorCode MISSING_HEX_DIGIT = const ScannerErrorCode(
26 'MISSING_HEX_DIGIT', "Hexidecimal digit expected."); 33 'MISSING_HEX_DIGIT', "Hexidecimal digit expected.");
27 34
35 static const ScannerErrorCode MISSING_IDENTIFIER =
36 const ScannerErrorCode('MISSING_IDENTIFIER', "Expected an identifier.");
37
28 static const ScannerErrorCode MISSING_QUOTE = 38 static const ScannerErrorCode MISSING_QUOTE =
29 const ScannerErrorCode('MISSING_QUOTE', "Expected quote (' or \")."); 39 const ScannerErrorCode('MISSING_QUOTE', "Expected quote (' or \").");
30 40
31 /** 41 /**
32 * Parameters: 42 * Parameters:
33 * 0: the path of the file that cannot be read 43 * 0: the path of the file that cannot be read
34 */ 44 */
35 static const ScannerErrorCode UNABLE_GET_CONTENT = const ScannerErrorCode( 45 static const ScannerErrorCode UNABLE_GET_CONTENT = const ScannerErrorCode(
36 'UNABLE_GET_CONTENT', "Unable to get content of '{0}'."); 46 'UNABLE_GET_CONTENT', "Unable to get content of '{0}'.");
37 47
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 case "MISSING_HEX_DIGIT": 122 case "MISSING_HEX_DIGIT":
113 // TODO(paulberry,ahe): Fasta reports the error location as the entire 123 // TODO(paulberry,ahe): Fasta reports the error location as the entire
114 // number; analyzer expects the end of the number. 124 // number; analyzer expects the end of the number.
115 charOffset = endOffset - 1; 125 charOffset = endOffset - 1;
116 return _makeError(ScannerErrorCode.MISSING_HEX_DIGIT, null); 126 return _makeError(ScannerErrorCode.MISSING_HEX_DIGIT, null);
117 127
118 case "ILLEGAL_CHARACTER": 128 case "ILLEGAL_CHARACTER":
119 return _makeError(ScannerErrorCode.ILLEGAL_CHARACTER, [token.character]); 129 return _makeError(ScannerErrorCode.ILLEGAL_CHARACTER, [token.character]);
120 130
121 default: 131 default:
122 if (errorCode == codeUnmatchedToken || 132 if (errorCode == codeUnmatchedToken) {
123 errorCode == codeUnexpectedDollarInString) { 133 TokenType type = token.begin?.type;
124 return null; 134 if (type == TokenType.OPEN_CURLY_BRACKET ||
135 type == TokenType.STRING_INTERPOLATION_EXPRESSION) {
136 return _makeError(ScannerErrorCode.EXPECTED_TOKEN, ['}']);
137 }
138 if (type == TokenType.OPEN_SQUARE_BRACKET) {
139 return _makeError(ScannerErrorCode.EXPECTED_TOKEN, [']']);
140 }
141 if (type == TokenType.OPEN_PAREN) {
142 return _makeError(ScannerErrorCode.EXPECTED_TOKEN, [')']);
143 }
144 } else if (errorCode == codeUnexpectedDollarInString) {
145 return _makeError(ScannerErrorCode.MISSING_IDENTIFIER, null);
125 } 146 }
126 throw new UnimplementedError('$errorCode'); 147 throw new UnimplementedError('$errorCode');
127 } 148 }
128 } 149 }
129 150
130 /** 151 /**
131 * Determines whether the given [charOffset], which came from the non-EOF token 152 * Determines whether the given [charOffset], which came from the non-EOF token
132 * [token], represents the end of the input. 153 * [token], represents the end of the input.
133 */ 154 */
134 bool _isAtEnd(Token token, int charOffset) { 155 bool _isAtEnd(Token token, int charOffset) {
135 while (true) { 156 while (true) {
136 // Skip to the next token. 157 // Skip to the next token.
137 token = token.next; 158 token = token.next;
138 // If we've found an EOF token, its charOffset indicates where the end of 159 // If we've found an EOF token, its charOffset indicates where the end of
139 // the input is. 160 // the input is.
140 if (token.isEof) return token.charOffset == charOffset; 161 if (token.isEof) return token.charOffset == charOffset;
141 // If we've found a non-error token, then we know there is additional input 162 // If we've found a non-error token, then we know there is additional input
142 // text after [charOffset]. 163 // text after [charOffset].
143 if (token.type.kind != BAD_INPUT_TOKEN) return false; 164 if (token.type.kind != BAD_INPUT_TOKEN) return false;
144 // Otherwise keep looking. 165 // Otherwise keep looking.
145 } 166 }
146 } 167 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/scanner/recover.dart ('k') | pkg/front_end/test/scanner_fasta_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698