| Index: runtime/vm/parser.cc
|
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
|
| index 125d54db8249e57d88ce00bae8fc730edb72d63e..c5cc870457d1efca83ec37264fff7e6e32a7a5cb 100644
|
| --- a/runtime/vm/parser.cc
|
| +++ b/runtime/vm/parser.cc
|
| @@ -5542,6 +5542,15 @@ void Parser::SkipTypeArguments() {
|
| }
|
|
|
|
|
| +void Parser::SkipTypeParameters() {
|
| + // Function already parsed, no need to check FLAG_generic_method_syntax.
|
| + if (IsTypeParameters()) {
|
| + const bool skipped = TryParseTypeParameters();
|
| + ASSERT(skipped);
|
| + }
|
| +}
|
| +
|
| +
|
| void Parser::SkipType(bool allow_void) {
|
| if (CurrentToken() == Token::kVOID) {
|
| if (!allow_void) {
|
| @@ -14857,17 +14866,23 @@ void Parser::SkipFunctionLiteral() {
|
| // previously parsed the function.
|
| void Parser::SkipFunctionPreamble() {
|
| while (true) {
|
| - const Token::Kind token = CurrentToken();
|
| if (IsFunctionTypeSymbol()) {
|
| ConsumeToken();
|
| - SkipTypeArguments();
|
| + SkipTypeParameters();
|
| SkipToMatchingParenthesis();
|
| continue;
|
| }
|
| + const Token::Kind token = CurrentToken();
|
| if (token == Token::kLPAREN) {
|
| return;
|
| }
|
| if (token == Token::kGET) {
|
| + if (LookaheadToken(1) == Token::kLT) {
|
| + // Case: Generic Function/method named get.
|
| + ConsumeToken(); // Parse away 'get' (the function's name).
|
| + SkipTypeParameters();
|
| + continue;
|
| + }
|
| if (LookaheadToken(1) == Token::kLPAREN) {
|
| // Case: Function/method named get.
|
| ConsumeToken(); // Parse away 'get' (the function's name).
|
| @@ -14878,7 +14893,7 @@ void Parser::SkipFunctionPreamble() {
|
| ConsumeToken(); // Parse away the getter name.
|
| return;
|
| }
|
| - ConsumeToken();
|
| + ConsumeToken(); // Can be static, factory, operator, void, ident, etc...
|
| }
|
| }
|
|
|
|
|