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; |