| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 analyzer.src.generated.parser; | 5 library analyzer.src.generated.parser; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import "dart:math" as math; | 8 import "dart:math" as math; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 2312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2323 // we allow them to appear in any order so that we can recover faster. | 2323 // we allow them to appear in any order so that we can recover faster. |
| 2324 // | 2324 // |
| 2325 bool wasInInitializer = _inInitializer; | 2325 bool wasInInitializer = _inInitializer; |
| 2326 _inInitializer = false; | 2326 _inInitializer = false; |
| 2327 try { | 2327 try { |
| 2328 Expression argument = parseArgument(); | 2328 Expression argument = parseArgument(); |
| 2329 List<Expression> arguments = <Expression>[argument]; | 2329 List<Expression> arguments = <Expression>[argument]; |
| 2330 bool foundNamedArgument = argument is NamedExpression; | 2330 bool foundNamedArgument = argument is NamedExpression; |
| 2331 bool generatedError = false; | 2331 bool generatedError = false; |
| 2332 while (_optional(TokenType.COMMA)) { | 2332 while (_optional(TokenType.COMMA)) { |
| 2333 if (parseTrailingCommas && _matches(TokenType.CLOSE_PAREN)) { |
| 2334 break; |
| 2335 } |
| 2333 argument = parseArgument(); | 2336 argument = parseArgument(); |
| 2334 arguments.add(argument); | 2337 arguments.add(argument); |
| 2335 if (argument is NamedExpression) { | 2338 if (argument is NamedExpression) { |
| 2336 foundNamedArgument = true; | 2339 foundNamedArgument = true; |
| 2337 } else if (foundNamedArgument) { | 2340 } else if (foundNamedArgument) { |
| 2338 if (!generatedError) { | 2341 if (!generatedError) { |
| 2339 if (!argument.isSynthetic) { | 2342 if (!argument.isSynthetic) { |
| 2340 // Report the error, once, but allow the arguments to be in any | 2343 // Report the error, once, but allow the arguments to be in any |
| 2341 // order in the AST. | 2344 // order in the AST. |
| 2342 _reportErrorForCurrentToken( | 2345 _reportErrorForCurrentToken( |
| (...skipping 3768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6111 if (kind == ParameterKind.REQUIRED && wasOptionalParameter) { | 6114 if (kind == ParameterKind.REQUIRED && wasOptionalParameter) { |
| 6112 _reportErrorForNode( | 6115 _reportErrorForNode( |
| 6113 ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter); | 6116 ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter); |
| 6114 } | 6117 } |
| 6115 // | 6118 // |
| 6116 // Handle the end of parameter groups. | 6119 // Handle the end of parameter groups. |
| 6117 // | 6120 // |
| 6118 // TODO(brianwilkerson) Improve the detection and reporting of missing and | 6121 // TODO(brianwilkerson) Improve the detection and reporting of missing and |
| 6119 // mismatched delimiters. | 6122 // mismatched delimiters. |
| 6120 type = _currentToken.type; | 6123 type = _currentToken.type; |
| 6124 |
| 6125 // Advance past trailing commas as appropriate. |
| 6126 if (parseTrailingCommas && type == TokenType.COMMA) { |
| 6127 // Only parse commas trailing normal (non-positional/named) params. |
| 6128 if (rightSquareBracket == null && rightCurlyBracket == null) { |
| 6129 Token next = _peek(); |
| 6130 if (next.type == TokenType.CLOSE_PAREN || |
| 6131 next.type == TokenType.CLOSE_CURLY_BRACKET || |
| 6132 next.type == TokenType.CLOSE_SQUARE_BRACKET) { |
| 6133 _advance(); |
| 6134 type = _currentToken.type; |
| 6135 } |
| 6136 } |
| 6137 } |
| 6138 |
| 6121 if (type == TokenType.CLOSE_SQUARE_BRACKET) { | 6139 if (type == TokenType.CLOSE_SQUARE_BRACKET) { |
| 6122 rightSquareBracket = getAndAdvance(); | 6140 rightSquareBracket = getAndAdvance(); |
| 6123 if (leftSquareBracket == null) { | 6141 if (leftSquareBracket == null) { |
| 6124 if (leftCurlyBracket != null) { | 6142 if (leftCurlyBracket != null) { |
| 6125 _reportErrorForCurrentToken( | 6143 _reportErrorForCurrentToken( |
| 6126 ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]); | 6144 ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]); |
| 6127 rightCurlyBracket = rightSquareBracket; | 6145 rightCurlyBracket = rightSquareBracket; |
| 6128 rightSquareBracket = null; | 6146 rightSquareBracket = null; |
| 6129 } else { | 6147 } else { |
| 6130 _reportErrorForCurrentToken( | 6148 _reportErrorForCurrentToken( |
| (...skipping 4329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10460 */ | 10478 */ |
| 10461 const ParserErrorCode(String name, String message, [String correction]) | 10479 const ParserErrorCode(String name, String message, [String correction]) |
| 10462 : super(name, message, correction); | 10480 : super(name, message, correction); |
| 10463 | 10481 |
| 10464 @override | 10482 @override |
| 10465 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; | 10483 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; |
| 10466 | 10484 |
| 10467 @override | 10485 @override |
| 10468 ErrorType get type => ErrorType.SYNTACTIC_ERROR; | 10486 ErrorType get type => ErrorType.SYNTACTIC_ERROR; |
| 10469 } | 10487 } |
| OLD | NEW |