| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.parser.partial_elements; | 5 library dart2js.parser.partial_elements; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/resolution.dart' show ParsingContext, Resolution; | 8 import '../common/resolution.dart' show ParsingContext, Resolution; |
| 9 import '../elements/resolution_types.dart' show ResolutionDynamicType; | 9 import '../elements/resolution_types.dart' show ResolutionDynamicType; |
| 10 import '../elements/elements.dart' | 10 import '../elements/elements.dart' |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 import '../elements/visitor.dart' show ElementVisitor; | 33 import '../elements/visitor.dart' show ElementVisitor; |
| 34 import 'package:front_end/src/fasta/scanner.dart' show Token; | 34 import 'package:front_end/src/fasta/scanner.dart' show Token; |
| 35 import 'package:front_end/src/fasta/scanner.dart' as Tokens show EOF_TOKEN; | 35 import 'package:front_end/src/fasta/scanner.dart' as Tokens show EOF_TOKEN; |
| 36 import '../tree/tree.dart'; | 36 import '../tree/tree.dart'; |
| 37 import 'package:front_end/src/fasta/parser.dart' | 37 import 'package:front_end/src/fasta/parser.dart' |
| 38 show ClassMemberParser, Listener, Parser, ParserError; | 38 show ClassMemberParser, Listener, Parser, ParserError; |
| 39 import 'member_listener.dart' show MemberListener; | 39 import 'member_listener.dart' show MemberListener; |
| 40 import 'node_listener.dart' show NodeListener; | 40 import 'node_listener.dart' show NodeListener; |
| 41 | 41 |
| 42 class ClassElementParser extends ClassMemberParser { | 42 class ClassElementParser extends ClassMemberParser { |
| 43 ClassElementParser(Listener listener) | 43 ClassElementParser(Listener listener) : super(listener); |
| 44 : super(listener); | |
| 45 | 44 |
| 46 Token parseFormalParameters(Token token) => skipFormalParameters(token); | 45 Token parseFormalParameters(Token token) => skipFormalParameters(token); |
| 47 } | 46 } |
| 48 | 47 |
| 49 abstract class PartialElement implements DeclarationSite { | 48 abstract class PartialElement implements DeclarationSite { |
| 50 Token beginToken; | 49 Token beginToken; |
| 51 Token endToken; | 50 Token endToken; |
| 52 | 51 |
| 53 bool hasParseError = false; | 52 bool hasParseError = false; |
| 54 | 53 |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 DiagnosticReporter reporter = parsing.reporter; | 377 DiagnosticReporter reporter = parsing.reporter; |
| 379 reporter.withCurrentElement(this, () { | 378 reporter.withCurrentElement(this, () { |
| 380 parsing.measure(() { | 379 parsing.measure(() { |
| 381 MemberListener listener = new MemberListener( | 380 MemberListener listener = new MemberListener( |
| 382 parsing.getScannerOptionsFor(this), reporter, this); | 381 parsing.getScannerOptionsFor(this), reporter, this); |
| 383 Parser parser = new ClassElementParser(listener); | 382 Parser parser = new ClassElementParser(listener); |
| 384 try { | 383 try { |
| 385 Token token = parser.parseTopLevelDeclaration(beginToken); | 384 Token token = parser.parseTopLevelDeclaration(beginToken); |
| 386 assert(identical(token, endToken.next)); | 385 assert(identical(token, endToken.next)); |
| 387 cachedNode = listener.popNode(); | 386 cachedNode = listener.popNode(); |
| 388 assert(invariant(reporter.spanFromToken(beginToken), | 387 assert(invariant( |
| 389 listener.nodes.isEmpty, | 388 reporter.spanFromToken(beginToken), listener.nodes.isEmpty, |
| 390 message: "Non-empty listener stack: ${listener.nodes}")); | 389 message: "Non-empty listener stack: ${listener.nodes}")); |
| 391 } on ParserError { | 390 } on ParserError { |
| 392 // TODO(ahe): Often, a ParserError is thrown while parsing the class | 391 // TODO(ahe): Often, a ParserError is thrown while parsing the class |
| 393 // body. This means that the stack actually contains most of the | 392 // body. This means that the stack actually contains most of the |
| 394 // information synthesized below. Consider rewriting the parser so | 393 // information synthesized below. Consider rewriting the parser so |
| 395 // endClassDeclaration is called before parsing the class body. | 394 // endClassDeclaration is called before parsing the class body. |
| 396 Identifier name = new Identifier(findMyName(beginToken)); | 395 Identifier name = new Identifier(findMyName(beginToken)); |
| 397 NodeList typeParameters = null; | 396 NodeList typeParameters = null; |
| 398 Node supertype = null; | 397 Node supertype = null; |
| 399 NodeList interfaces = listener.makeNodeList(0, null, null, ","); | 398 NodeList interfaces = listener.makeNodeList(0, null, null, ","); |
| 400 Token extendsKeyword = null; | 399 Token extendsKeyword = null; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 } on ParserError catch (e) { | 450 } on ParserError catch (e) { |
| 452 partial.hasParseError = true; | 451 partial.hasParseError = true; |
| 453 return new ErrorNode(element.position, e.kind, e.arguments); | 452 return new ErrorNode(element.position, e.kind, e.arguments); |
| 454 } | 453 } |
| 455 Node node = listener.popNode(); | 454 Node node = listener.popNode(); |
| 456 assert(listener.nodes.isEmpty); | 455 assert(listener.nodes.isEmpty); |
| 457 return node; | 456 return node; |
| 458 }); | 457 }); |
| 459 }); | 458 }); |
| 460 } | 459 } |
| OLD | NEW |