| Index: pkg/compiler/lib/src/parser/member_listener.dart
|
| diff --git a/pkg/compiler/lib/src/parser/member_listener.dart b/pkg/compiler/lib/src/parser/member_listener.dart
|
| index 6a72ad0f3f3538f0615aaf2e261595566b897e7c..08656d3325b7f692a430a05880ab6b19d4707c8c 100644
|
| --- a/pkg/compiler/lib/src/parser/member_listener.dart
|
| +++ b/pkg/compiler/lib/src/parser/member_listener.dart
|
| @@ -1,146 +1,35 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// Copyright (c) 2015, 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 dart2js.parser.classes;
|
| +library dart2js.parser.member_listener;
|
|
|
| -import '../compiler.dart' show
|
| - Compiler;
|
| import '../diagnostics/diagnostic_listener.dart' show
|
| DiagnosticListener;
|
| import '../diagnostics/messages.dart' show
|
| MessageKind;
|
| -import '../diagnostics/invariant.dart' show
|
| - invariant;
|
| import '../elements/elements.dart' show
|
| - CompilationUnitElement,
|
| Element,
|
| ElementKind,
|
| Elements,
|
| - MetadataAnnotation,
|
| - STATE_NOT_STARTED,
|
| - STATE_DONE;
|
| + MetadataAnnotation;
|
| import '../elements/modelx.dart' show
|
| ClassElementX,
|
| ElementX,
|
| FieldElementX,
|
| VariableList;
|
| -import '../elements/visitor.dart' show
|
| - ElementVisitor;
|
| import '../tokens/token.dart' show
|
| Token;
|
| import '../tree/tree.dart';
|
| import '../util/util.dart' show
|
| Link;
|
|
|
| -import 'listener.dart' show
|
| - Listener,
|
| - NodeListener,
|
| - ParserError,
|
| +import 'partial_elements.dart' show
|
| PartialConstructorElement,
|
| - PartialElement,
|
| PartialFunctionElement,
|
| PartialMetadataAnnotation;
|
| -import 'parser.dart' show
|
| - Parser;
|
| -import 'partial_parser.dart' show
|
| - PartialParser;
|
| -
|
| -class ClassElementParser extends PartialParser {
|
| - ClassElementParser(Listener listener) : super(listener);
|
| -
|
| - Token parseClassBody(Token token) => fullParseClassBody(token);
|
| -}
|
| -
|
| -class PartialClassElement extends ClassElementX with PartialElement {
|
| - ClassNode cachedNode;
|
| -
|
| - PartialClassElement(String name,
|
| - Token beginToken,
|
| - Token endToken,
|
| - Element enclosing,
|
| - int id)
|
| - : super(name, enclosing, id, STATE_NOT_STARTED) {
|
| - this.beginToken = beginToken;
|
| - this.endToken = endToken;
|
| - }
|
| -
|
| - void set supertypeLoadState(int state) {
|
| - assert(state == STATE_NOT_STARTED || state == supertypeLoadState + 1);
|
| - assert(state <= STATE_DONE);
|
| - super.supertypeLoadState = state;
|
| - }
|
| -
|
| - void set resolutionState(int state) {
|
| - assert(state == STATE_NOT_STARTED || state == resolutionState + 1);
|
| - assert(state <= STATE_DONE);
|
| - super.resolutionState = state;
|
| - }
|
| -
|
| - bool get hasNode => cachedNode != null;
|
| -
|
| - ClassNode get node {
|
| - assert(invariant(this, cachedNode != null,
|
| - message: "Node has not been computed for $this."));
|
| - return cachedNode;
|
| - }
|
| -
|
| - ClassNode parseNode(Compiler compiler) {
|
| - if (cachedNode != null) return cachedNode;
|
| - compiler.withCurrentElement(this, () {
|
| - compiler.parser.measure(() {
|
| - MemberListener listener = new MemberListener(compiler, this);
|
| - Parser parser = new ClassElementParser(listener);
|
| - try {
|
| - Token token = parser.parseTopLevelDeclaration(beginToken);
|
| - assert(identical(token, endToken.next));
|
| - cachedNode = listener.popNode();
|
| - assert(
|
| - invariant(
|
| - beginToken, listener.nodes.isEmpty,
|
| - message: "Non-empty listener stack: ${listener.nodes}"));
|
| - } on ParserError {
|
| - // TODO(ahe): Often, a ParserError is thrown while parsing the class
|
| - // body. This means that the stack actually contains most of the
|
| - // information synthesized below. Consider rewriting the parser so
|
| - // endClassDeclaration is called before parsing the class body.
|
| - Identifier name = new Identifier(findMyName(beginToken));
|
| - NodeList typeParameters = null;
|
| - Node supertype = null;
|
| - NodeList interfaces = listener.makeNodeList(0, null, null, ",");
|
| - Token extendsKeyword = null;
|
| - NodeList body = listener.makeNodeList(0, beginToken, endToken, null);
|
| - cachedNode = new ClassNode(
|
| - Modifiers.EMPTY, name, typeParameters, supertype, interfaces,
|
| - beginToken, extendsKeyword, body, endToken);
|
| - hasParseError = true;
|
| - }
|
| - });
|
| - compiler.patchParser.measure(() {
|
| - if (isPatched) {
|
| - // TODO(lrn): Perhaps extract functionality so it doesn't
|
| - // need compiler.
|
| - compiler.patchParser.parsePatchClassNode(patch);
|
| - }
|
| - });
|
| - });
|
| - return cachedNode;
|
| - }
|
| -
|
| - Token get position => beginToken;
|
| -
|
| - // TODO(johnniwinther): Ensure that modifiers are always available.
|
| - Modifiers get modifiers =>
|
| - cachedNode != null ? cachedNode.modifiers : Modifiers.EMPTY;
|
| -
|
| - accept(ElementVisitor visitor, arg) {
|
| - return visitor.visitClassElement(this, arg);
|
| - }
|
| -
|
| - PartialClassElement copyWithEnclosing(CompilationUnitElement enclosing) {
|
| - return new PartialClassElement(name, beginToken, endToken, enclosing, id);
|
| - }
|
| -}
|
| +import 'node_listener.dart' show
|
| + NodeListener;
|
|
|
| class MemberListener extends NodeListener {
|
| final ClassElementX enclosingClass;
|
|
|