blob: 28904d06984b14bd3a0c2d188e1397af434ba646 [file] [log] [blame]
// 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);
}
}