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 21 matching lines...) Expand all Loading... |
32 VariableList; | 32 VariableList; |
33 import '../elements/visitor.dart' show ElementVisitor; | 33 import '../elements/visitor.dart' show ElementVisitor; |
34 import 'package:dart_scanner/dart_scanner.dart' show Token; | 34 import 'package:dart_scanner/dart_scanner.dart' show Token; |
35 import 'package:dart_scanner/dart_scanner.dart' as Tokens show EOF_TOKEN; | 35 import 'package:dart_scanner/dart_scanner.dart' as Tokens show EOF_TOKEN; |
36 import '../tree/tree.dart'; | 36 import '../tree/tree.dart'; |
37 import 'package:dart_parser/dart_parser.dart' | 37 import 'package:dart_parser/dart_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 PartialParser extends ClassMemberParser { | 42 class ClassElementParser extends ClassMemberParser { |
43 PartialParser(Listener listener) | 43 ClassElementParser(Listener listener) |
44 : super(listener); | 44 : super(listener); |
45 | 45 |
46 Token parseFormalParameters(Token token) => skipFormalParameters(token); | 46 Token parseFormalParameters(Token token) => skipFormalParameters(token); |
47 } | 47 } |
48 | 48 |
49 abstract class PartialElement implements DeclarationSite { | 49 abstract class PartialElement implements DeclarationSite { |
50 Token beginToken; | 50 Token beginToken; |
51 Token endToken; | 51 Token endToken; |
52 | 52 |
53 bool hasParseError = false; | 53 bool hasParseError = false; |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 return cachedNode; | 373 return cachedNode; |
374 } | 374 } |
375 | 375 |
376 ClassNode parseNode(ParsingContext parsing) { | 376 ClassNode parseNode(ParsingContext parsing) { |
377 if (cachedNode != null) return cachedNode; | 377 if (cachedNode != null) return cachedNode; |
378 DiagnosticReporter reporter = parsing.reporter; | 378 DiagnosticReporter reporter = parsing.reporter; |
379 reporter.withCurrentElement(this, () { | 379 reporter.withCurrentElement(this, () { |
380 parsing.measure(() { | 380 parsing.measure(() { |
381 MemberListener listener = new MemberListener( | 381 MemberListener listener = new MemberListener( |
382 parsing.getScannerOptionsFor(this), reporter, this); | 382 parsing.getScannerOptionsFor(this), reporter, this); |
383 Parser parser = new PartialParser(listener); | 383 Parser parser = new ClassElementParser(listener); |
384 try { | 384 try { |
385 Token token = parser.parseTopLevelDeclaration(beginToken); | 385 Token token = parser.parseTopLevelDeclaration(beginToken); |
386 assert(identical(token, endToken.next)); | 386 assert(identical(token, endToken.next)); |
387 cachedNode = listener.popNode(); | 387 cachedNode = listener.popNode(); |
388 assert(invariant(reporter.spanFromToken(beginToken), | 388 assert(invariant(reporter.spanFromToken(beginToken), |
389 listener.nodes.isEmpty, | 389 listener.nodes.isEmpty, |
390 message: "Non-empty listener stack: ${listener.nodes}")); | 390 message: "Non-empty listener stack: ${listener.nodes}")); |
391 } on ParserError { | 391 } on ParserError { |
392 // TODO(ahe): Often, a ParserError is thrown while parsing the class | 392 // TODO(ahe): Often, a ParserError is thrown while parsing the class |
393 // body. This means that the stack actually contains most of the | 393 // body. This means that the stack actually contains most of the |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 } on ParserError catch (e) { | 451 } on ParserError catch (e) { |
452 partial.hasParseError = true; | 452 partial.hasParseError = true; |
453 return new ErrorNode(element.position, e.kind, e.arguments); | 453 return new ErrorNode(element.position, e.kind, e.arguments); |
454 } | 454 } |
455 Node node = listener.popNode(); | 455 Node node = listener.popNode(); |
456 assert(listener.nodes.isEmpty); | 456 assert(listener.nodes.isEmpty); |
457 return node; | 457 return node; |
458 }); | 458 }); |
459 }); | 459 }); |
460 } | 460 } |
OLD | NEW |