Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: pkg/compiler/lib/src/parser/partial_elements.dart

Issue 1383483006: Extract DiagnosticReporter implementation from Compiler. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/resolution.dart' show 7 import '../common/resolution.dart' show
8 Parsing, 8 Parsing,
9 Resolution; 9 Resolution;
10 import '../compiler.dart' show
11 Compiler;
12 import '../dart_types.dart' show DynamicType; 10 import '../dart_types.dart' show DynamicType;
13 import '../diagnostics/diagnostic_listener.dart'; 11 import '../diagnostics/diagnostic_listener.dart' show
12 DiagnosticReporter;
14 import '../diagnostics/invariant.dart' show 13 import '../diagnostics/invariant.dart' show
15 invariant; 14 invariant;
16 import '../diagnostics/messages.dart'; 15 import '../diagnostics/messages.dart';
17 import '../elements/elements.dart' show 16 import '../elements/elements.dart' show
18 CompilationUnitElement, 17 CompilationUnitElement,
19 ConstructorElement, 18 ConstructorElement,
20 Element, 19 Element,
21 ElementKind, 20 ElementKind,
22 GetterElement, 21 GetterElement,
23 LibraryElement, 22 LibraryElement,
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 Modifiers modifiers, 265 Modifiers modifiers,
267 bool hasParseError) 266 bool hasParseError)
268 : super(modifiers) { 267 : super(modifiers) {
269 super.beginToken = beginToken; 268 super.beginToken = beginToken;
270 super.endToken = endToken; 269 super.endToken = endToken;
271 super.hasParseError = hasParseError; 270 super.hasParseError = hasParseError;
272 } 271 }
273 272
274 VariableDefinitions parseNode(Element element, Parsing parsing) { 273 VariableDefinitions parseNode(Element element, Parsing parsing) {
275 if (definitions != null) return definitions; 274 if (definitions != null) return definitions;
276 DiagnosticListener listener = parsing.listener; 275 DiagnosticReporter reporter = parsing.reporter;
277 listener.withCurrentElement(element, () { 276 reporter.withCurrentElement(element, () {
278 definitions = parse( 277 definitions = parse(
279 parsing, element, declarationSite, 278 parsing, element, declarationSite,
280 (Parser parser) => parser.parseMember(beginToken)); 279 (Parser parser) => parser.parseMember(beginToken));
281 280
282 if (!hasParseError && 281 if (!hasParseError &&
283 !definitions.modifiers.isVar && 282 !definitions.modifiers.isVar &&
284 !definitions.modifiers.isFinal && 283 !definitions.modifiers.isFinal &&
285 !definitions.modifiers.isConst && 284 !definitions.modifiers.isConst &&
286 definitions.type == null && 285 definitions.type == null &&
287 !definitions.isErroneous) { 286 !definitions.isErroneous) {
288 listener.reportErrorMessage( 287 reporter.reportErrorMessage(
289 definitions, 288 definitions,
290 MessageKind.GENERIC, 289 MessageKind.GENERIC,
291 { 'text': 'A field declaration must start with var, final, ' 290 { 'text': 'A field declaration must start with var, final, '
292 'const, or a type annotation.' }); 291 'const, or a type annotation.' });
293 } 292 }
294 }); 293 });
295 return definitions; 294 return definitions;
296 } 295 }
297 296
298 computeType(Element element, Resolution resolution) { 297 computeType(Element element, Resolution resolution) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 bool get hasNode => cachedNode != null; 415 bool get hasNode => cachedNode != null;
417 416
418 ClassNode get node { 417 ClassNode get node {
419 assert(invariant(this, cachedNode != null, 418 assert(invariant(this, cachedNode != null,
420 message: "Node has not been computed for $this.")); 419 message: "Node has not been computed for $this."));
421 return cachedNode; 420 return cachedNode;
422 } 421 }
423 422
424 ClassNode parseNode(Parsing parsing) { 423 ClassNode parseNode(Parsing parsing) {
425 if (cachedNode != null) return cachedNode; 424 if (cachedNode != null) return cachedNode;
426 DiagnosticListener diagnosticListener = parsing.listener; 425 DiagnosticReporter reporter = parsing.reporter;
427 diagnosticListener.withCurrentElement(this, () { 426 reporter.withCurrentElement(this, () {
428 parsing.measure(() { 427 parsing.measure(() {
429 MemberListener listener = new MemberListener(diagnosticListener, this); 428 MemberListener listener = new MemberListener(reporter, this);
430 Parser parser = new ClassElementParser(listener); 429 Parser parser = new ClassElementParser(listener);
431 try { 430 try {
432 Token token = parser.parseTopLevelDeclaration(beginToken); 431 Token token = parser.parseTopLevelDeclaration(beginToken);
433 assert(identical(token, endToken.next)); 432 assert(identical(token, endToken.next));
434 cachedNode = listener.popNode(); 433 cachedNode = listener.popNode();
435 assert( 434 assert(
436 invariant( 435 invariant(
437 beginToken, listener.nodes.isEmpty, 436 beginToken, listener.nodes.isEmpty,
438 message: "Non-empty listener stack: ${listener.nodes}")); 437 message: "Non-empty listener stack: ${listener.nodes}"));
439 } on ParserError { 438 } on ParserError {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 PartialClassElement copyWithEnclosing(CompilationUnitElement enclosing) { 472 PartialClassElement copyWithEnclosing(CompilationUnitElement enclosing) {
474 return new PartialClassElement(name, beginToken, endToken, enclosing, id); 473 return new PartialClassElement(name, beginToken, endToken, enclosing, id);
475 } 474 }
476 } 475 }
477 476
478 Node parse( 477 Node parse(
479 Parsing parsing, 478 Parsing parsing,
480 ElementX element, 479 ElementX element,
481 PartialElement partial, 480 PartialElement partial,
482 doParse(Parser parser)) { 481 doParse(Parser parser)) {
483 DiagnosticListener diagnosticListener = parsing.listener; 482 DiagnosticReporter reporter = parsing.reporter;
484 return parsing.measure(() { 483 return parsing.measure(() {
485 return diagnosticListener.withCurrentElement(element, () { 484 return reporter.withCurrentElement(element, () {
486 CompilationUnitElement unit = element.compilationUnit; 485 CompilationUnitElement unit = element.compilationUnit;
487 NodeListener listener = new NodeListener(diagnosticListener, unit); 486 NodeListener listener = new NodeListener(reporter, unit);
488 listener.memberErrors = listener.memberErrors.prepend(false); 487 listener.memberErrors = listener.memberErrors.prepend(false);
489 try { 488 try {
490 if (partial.hasParseError) { 489 if (partial.hasParseError) {
491 listener.suppressParseErrors = true; 490 listener.suppressParseErrors = true;
492 } 491 }
493 doParse(new Parser(listener)); 492 doParse(new Parser(listener));
494 } on ParserError catch (e) { 493 } on ParserError catch (e) {
495 partial.hasParseError = true; 494 partial.hasParseError = true;
496 return new ErrorNode(element.position, e.reason); 495 return new ErrorNode(element.position, e.reason);
497 } 496 }
498 Node node = listener.popNode(); 497 Node node = listener.popNode();
499 assert(listener.nodes.isEmpty); 498 assert(listener.nodes.isEmpty);
500 return node; 499 return node;
501 }); 500 });
502 }); 501 });
503 } 502 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698