OLD | NEW |
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 library fasta.body_builder; | 5 library fasta.body_builder; |
6 | 6 |
7 import 'package:dart_parser/src/parser.dart' show | 7 import 'package:dart_parser/src/parser.dart' show |
8 FormalParameterType, | 8 FormalParameterType, |
9 optional; | 9 optional; |
10 | 10 |
11 import 'package:dart_parser/src/error_kind.dart' show | 11 import 'package:dart_parser/src/error_kind.dart' show |
12 ErrorKind; | 12 ErrorKind; |
13 | 13 |
14 import 'package:kernel/ast.dart'; | 14 import 'package:kernel/ast.dart'; |
15 | 15 |
16 import 'package:kernel/clone.dart' show | 16 import 'package:kernel/clone.dart' show |
17 CloneVisitor; | 17 CloneVisitor; |
18 | 18 |
19 import 'package:kernel/transformations/flags.dart' show | 19 import 'package:kernel/transformations/flags.dart' show |
20 TransformerFlag; | 20 TransformerFlag; |
21 | 21 |
22 import 'package:kernel/class_hierarchy.dart' show | 22 import 'package:kernel/class_hierarchy.dart' show |
23 ClassHierarchy; | 23 ClassHierarchy; |
24 | 24 |
25 import 'package:kernel/core_types.dart' show | 25 import 'package:kernel/core_types.dart' show |
26 CoreTypes; | 26 CoreTypes; |
27 | 27 |
28 import 'package:dart_scanner/src/token.dart' show | 28 import 'package:dart_scanner/src/token.dart' show |
29 BeginGroupToken, | 29 BeginGroupToken, |
30 ErrorToken, | |
31 Token, | 30 Token, |
32 isBinaryOperator, | 31 isBinaryOperator, |
33 isMinusOperator; | 32 isMinusOperator; |
34 | 33 |
35 import '../errors.dart' show | 34 import '../errors.dart' show |
36 InputError, | 35 InputError, |
37 internalError; | 36 internalError; |
38 | 37 |
39 import '../errors.dart' as errors show | 38 import '../errors.dart' as errors show |
40 inputError; | 39 inputError; |
(...skipping 2073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2114 } | 2113 } |
2115 | 2114 |
2116 @override | 2115 @override |
2117 void handleModifiers(int count) { | 2116 void handleModifiers(int count) { |
2118 debugEvent("Modifiers"); | 2117 debugEvent("Modifiers"); |
2119 // TODO(ahe): Copied from outline_builder.dart. | 2118 // TODO(ahe): Copied from outline_builder.dart. |
2120 push(popList(count) ?? NullValue.Modifiers); | 2119 push(popList(count) ?? NullValue.Modifiers); |
2121 } | 2120 } |
2122 | 2121 |
2123 @override | 2122 @override |
2124 void reportErrorHelper(Token token, ErrorKind kind, Map arguments) { | 2123 void handleRecoverableError(Token token, ErrorKind kind, Map arguments) { |
2125 super.reportErrorHelper(token, kind, arguments); | 2124 super.handleRecoverableError(token, kind, arguments); |
2126 if (!hasParserError) { | 2125 if (!hasParserError) { |
2127 print("$uri:${recoverableErrors.last}"); | 2126 print("$uri:${recoverableErrors.last}"); |
2128 } | 2127 } |
2129 hasParserError = true; | 2128 hasParserError = true; |
2130 } | 2129 } |
2131 | 2130 |
2132 @override | 2131 @override |
2133 Token expectedExpression(Token token) { | 2132 Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) { |
2134 if (token is ErrorToken) { | 2133 if (kind == ErrorKind.UnexpectedToken) { |
2135 reportErrorToken(token); | 2134 String expected = arguments["expected"]; |
2136 push(new Throw(new StringLiteral("${recoverableErrors.last}"))); | 2135 const List<String> trailing = const <String>[")", "}", ";", ","]; |
2137 do { | 2136 if (trailing.contains(token.stringValue) && trailing.contains(expected)) { |
2138 token = token.next; | 2137 arguments.putIfAbsent("actual", () => token.value); |
2139 } while (token is ErrorToken); | 2138 handleRecoverableError(token, ErrorKind.ExpectedButGot, arguments); |
2140 return token; | |
2141 } else { | |
2142 push(new InvalidExpression()); | |
2143 return super.expectedExpression(token); | |
2144 } | |
2145 } | |
2146 | |
2147 @override | |
2148 Token expected(String string, Token token) { | |
2149 if (token is ErrorToken) { | |
2150 reportErrorToken(token); | |
2151 do { | |
2152 token = token.next; | |
2153 } while (token is ErrorToken); | |
2154 return token; | |
2155 } | |
2156 const List<String> trailing = const <String>[")", "}", ";", ","]; | |
2157 if (trailing.contains(token.stringValue) && trailing.contains(string)) { | |
2158 // We're just trying to get out an error. | |
2159 if (recoverableErrors.isNotEmpty) { | |
2160 reportError(token, ErrorKind.Unspecified, | |
2161 {"text": "Expected: '$string', but got '${token.value}'"}); | |
2162 } | 2139 } |
2163 return token; | 2140 return token; |
2164 } | 2141 } |
2165 return super.expected(string, token); | 2142 return super.handleUnrecoverableError(token, kind, arguments); |
2166 } | 2143 } |
2167 | 2144 |
2168 void warning(error, [int charOffset = -1]) { | 2145 void warning(error, [int charOffset = -1]) { |
2169 String message = new InputError(uri, charOffset, error).format(); | 2146 String message = new InputError(uri, charOffset, error).format(); |
2170 print(message); | 2147 print(message); |
2171 } | 2148 } |
2172 | 2149 |
2173 void nit(error, [int charOffset = -1]) { | 2150 void nit(error, [int charOffset = -1]) { |
2174 if (!showNits) return; | 2151 if (!showNits) return; |
2175 String message = new InputError(uri, charOffset, error).format(); | 2152 String message = new InputError(uri, charOffset, error).format(); |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2644 } else if (node is TypeDeclarationBuilder) { | 2621 } else if (node is TypeDeclarationBuilder) { |
2645 return node.name; | 2622 return node.name; |
2646 } else if (node is PrefixBuilder) { | 2623 } else if (node is PrefixBuilder) { |
2647 return node.name; | 2624 return node.name; |
2648 } else if (node is ThisPropertyAccessor) { | 2625 } else if (node is ThisPropertyAccessor) { |
2649 return node.name.name; | 2626 return node.name.name; |
2650 } else { | 2627 } else { |
2651 return internalError("Unhandled: ${node.runtimeType}"); | 2628 return internalError("Unhandled: ${node.runtimeType}"); |
2652 } | 2629 } |
2653 } | 2630 } |
OLD | NEW |