| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library fasta.parser.class_member_parser; |
| |
| import '../../scanner/token.dart' show Token; |
| |
| import '../fasta_codes.dart' show Message; |
| |
| import 'assert.dart' show Assert; |
| |
| import 'listener.dart' show Listener; |
| |
| import 'parser.dart' show Parser; |
| |
| /// Parser similar to [TopLevelParser] but also parses class members (excluding |
| /// their bodies). |
| class ClassMemberParser extends Parser { |
| ClassMemberParser(Listener listener) : super(listener); |
| |
| @override |
| Token parseExpression(Token token) { |
| return skipExpression(token); |
| } |
| |
| @override |
| Token parseIdentifierExpression(Token token) { |
| return token.next; |
| } |
| |
| @override |
| Token parseAssert(Token token, Assert kind) { |
| if (kind == Assert.Statement) { |
| return super.parseAssert(token, kind); |
| } else { |
| return skipExpression(token); |
| } |
| } |
| |
| @override |
| Token parseRecoverExpression(Token token, Message message) { |
| Token begin = token; |
| // TODO(brianwilkerson): Remove the invocation of `syntheticPreviousToken` |
| // when `parseRecoverExpression` accepts the last consumed token. |
| token = skipExpression(syntheticPreviousToken(token)); |
| listener.handleRecoverExpression(begin, message); |
| return token; |
| } |
| |
| // This method is overridden for two reasons: |
| // 1. Avoid generating events for arguments. |
| // 2. Avoid calling skip expression for each argument (which doesn't work). |
| Token parseArgumentsOpt(Token token) => skipArgumentsOpt(token); |
| |
| Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) { |
| return skipFunctionBody(token, isExpression, allowAbstract); |
| } |
| } |