| 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 '../fasta_codes.dart' |
| 8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; |
| 9 |
| 7 import '../parser/parser.dart' show FormalParameterType, optional; | 10 import '../parser/parser.dart' show FormalParameterType, optional; |
| 8 | 11 |
| 9 import '../parser/error_kind.dart' show ErrorKind; | |
| 10 | |
| 11 import '../parser/identifier_context.dart' show IdentifierContext; | 12 import '../parser/identifier_context.dart' show IdentifierContext; |
| 12 | 13 |
| 13 import 'package:kernel/ast.dart'; | 14 import 'package:kernel/ast.dart'; |
| 14 | 15 |
| 15 import 'package:kernel/clone.dart' show CloneVisitor; | 16 import 'package:kernel/clone.dart' show CloneVisitor; |
| 16 | 17 |
| 17 import 'package:kernel/transformations/flags.dart' show TransformerFlag; | 18 import 'package:kernel/transformations/flags.dart' show TransformerFlag; |
| 18 | 19 |
| 19 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 20 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
| 20 | 21 |
| (...skipping 2315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2336 } | 2337 } |
| 2337 | 2338 |
| 2338 @override | 2339 @override |
| 2339 void handleModifiers(int count) { | 2340 void handleModifiers(int count) { |
| 2340 debugEvent("Modifiers"); | 2341 debugEvent("Modifiers"); |
| 2341 // TODO(ahe): Copied from outline_builder.dart. | 2342 // TODO(ahe): Copied from outline_builder.dart. |
| 2342 push(popList(count) ?? NullValue.Modifiers); | 2343 push(popList(count) ?? NullValue.Modifiers); |
| 2343 } | 2344 } |
| 2344 | 2345 |
| 2345 @override | 2346 @override |
| 2346 void handleRecoverableError(Token token, ErrorKind kind, Map arguments) { | 2347 void handleRecoverableError(Token token, FastaMessage message) { |
| 2347 bool silent = hasParserError; | 2348 bool silent = hasParserError; |
| 2348 super.handleRecoverableError(token, kind, arguments); | 2349 super.handleRecoverableError(token, message); |
| 2349 addCompileTimeError(recoverableErrors.last.beginOffset, | 2350 addCompileTimeError(message.charOffset, message.message, silent: silent); |
| 2350 '${recoverableErrors.last.kind} $arguments', | |
| 2351 silent: silent); | |
| 2352 } | 2351 } |
| 2353 | 2352 |
| 2354 @override | 2353 @override |
| 2355 Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) { | 2354 Token handleUnrecoverableError(Token token, FastaMessage message) { |
| 2356 if (isDartLibrary && kind == ErrorKind.ExpectedFunctionBody) { | 2355 if (isDartLibrary && message.code == codeExpectedFunctionBody) { |
| 2357 Token recover = skipNativeClause(token); | 2356 Token recover = skipNativeClause(token); |
| 2358 if (recover != null) return recover; | 2357 if (recover != null) return recover; |
| 2359 } else if (kind == ErrorKind.UnexpectedToken) { | 2358 } else if (message.code == codeExpectedButGot) { |
| 2360 String expected = arguments["expected"]; | 2359 String expected = message.arguments["string"]; |
| 2361 const List<String> trailing = const <String>[")", "}", ";", ","]; | 2360 const List<String> trailing = const <String>[")", "}", ";", ","]; |
| 2362 if (trailing.contains(token.stringValue) && trailing.contains(expected)) { | 2361 if (trailing.contains(token.stringValue) && trailing.contains(expected)) { |
| 2363 arguments.putIfAbsent("actual", () => token.lexeme); | 2362 handleRecoverableError(token, message); |
| 2364 handleRecoverableError(token, ErrorKind.ExpectedButGot, arguments); | |
| 2365 return newSyntheticToken(token); | 2363 return newSyntheticToken(token); |
| 2366 } | 2364 } |
| 2367 } | 2365 } |
| 2368 return super.handleUnrecoverableError(token, kind, arguments); | 2366 return super.handleUnrecoverableError(token, message); |
| 2369 } | 2367 } |
| 2370 | 2368 |
| 2371 @override | 2369 @override |
| 2372 Expression buildCompileTimeError(error, [int charOffset = -1]) { | 2370 Expression buildCompileTimeError(error, [int charOffset = -1]) { |
| 2373 addCompileTimeError(charOffset, error); | 2371 addCompileTimeError(charOffset, error); |
| 2374 String message = formatUnexpected(uri, charOffset, error); | 2372 String message = formatUnexpected(uri, charOffset, error); |
| 2375 Builder constructor = library.loader.getCompileTimeError(); | 2373 Builder constructor = library.loader.getCompileTimeError(); |
| 2376 return new Throw(buildStaticInvocation(constructor.target, | 2374 return new Throw(buildStaticInvocation(constructor.target, |
| 2377 new Arguments(<Expression>[new StringLiteral(message)]))); | 2375 new Arguments(<Expression>[new StringLiteral(message)]))); |
| 2378 } | 2376 } |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2926 } else if (node is PrefixBuilder) { | 2924 } else if (node is PrefixBuilder) { |
| 2927 return node.name; | 2925 return node.name; |
| 2928 } else if (node is ThisAccessor) { | 2926 } else if (node is ThisAccessor) { |
| 2929 return node.isSuper ? "super" : "this"; | 2927 return node.isSuper ? "super" : "this"; |
| 2930 } else if (node is FastaAccessor) { | 2928 } else if (node is FastaAccessor) { |
| 2931 return node.plainNameForRead; | 2929 return node.plainNameForRead; |
| 2932 } else { | 2930 } else { |
| 2933 return internalError("Unhandled: ${node.runtimeType}"); | 2931 return internalError("Unhandled: ${node.runtimeType}"); |
| 2934 } | 2932 } |
| 2935 } | 2933 } |
| OLD | NEW |