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

Side by Side Diff: pkg/compiler/lib/src/resolution/resolution.dart

Issue 1520293002: Add token invariant to DiagnosticReporter (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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.resolution; 5 library dart2js.resolution;
6 6
7 import 'dart:collection' show Queue; 7 import 'dart:collection' show Queue;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show 10 import '../common/names.dart' show
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 506 }
507 } 507 }
508 508
509 /** 509 /**
510 * Load and resolve the supertypes of [cls]. 510 * Load and resolve the supertypes of [cls].
511 * 511 *
512 * Warning: do not call this method directly. It should only be 512 * Warning: do not call this method directly. It should only be
513 * called by [resolveClass] and [ClassSupertypeResolver]. 513 * called by [resolveClass] and [ClassSupertypeResolver].
514 */ 514 */
515 void loadSupertypes(BaseClassElementX cls, Spannable from) { 515 void loadSupertypes(BaseClassElementX cls, Spannable from) {
516 reporter.withCurrentElement(cls, () => measure(() { 516 measure(() {
517 if (cls.supertypeLoadState == STATE_DONE) return; 517 if (cls.supertypeLoadState == STATE_DONE) return;
518 if (cls.supertypeLoadState == STATE_STARTED) { 518 if (cls.supertypeLoadState == STATE_STARTED) {
519 reporter.reportErrorMessage( 519 reporter.reportErrorMessage(
520 from, 520 from,
521 MessageKind.CYCLIC_CLASS_HIERARCHY, 521 MessageKind.CYCLIC_CLASS_HIERARCHY,
522 {'className': cls.name}); 522 {'className': cls.name});
523 cls.supertypeLoadState = STATE_DONE; 523 cls.supertypeLoadState = STATE_DONE;
524 cls.hasIncompleteHierarchy = true; 524 cls.hasIncompleteHierarchy = true;
525 cls.allSupertypesAndSelf = 525 cls.allSupertypesAndSelf =
526 coreClasses.objectClass.allSupertypesAndSelf.extendClass( 526 coreClasses.objectClass.allSupertypesAndSelf.extendClass(
527 cls.computeType(resolution)); 527 cls.computeType(resolution));
528 cls.supertype = cls.allSupertypes.head; 528 cls.supertype = cls.allSupertypes.head;
529 assert(invariant(from, cls.supertype != null, 529 assert(invariant(from, cls.supertype != null,
530 message: 'Missing supertype on cyclic class $cls.')); 530 message: 'Missing supertype on cyclic class $cls.'));
531 cls.interfaces = const Link<DartType>(); 531 cls.interfaces = const Link<DartType>();
532 return; 532 return;
533 } 533 }
534 cls.supertypeLoadState = STATE_STARTED; 534 cls.supertypeLoadState = STATE_STARTED;
535 reporter.withCurrentElement(cls, () { 535 reporter.withCurrentElement(cls, () {
536 // TODO(ahe): Cache the node in cls. 536 // TODO(ahe): Cache the node in cls.
537 cls.parseNode(parsing).accept( 537 cls.parseNode(parsing).accept(
538 new ClassSupertypeResolver(compiler, cls)); 538 new ClassSupertypeResolver(compiler, cls));
539 if (cls.supertypeLoadState != STATE_DONE) { 539 if (cls.supertypeLoadState != STATE_DONE) {
540 cls.supertypeLoadState = STATE_DONE; 540 cls.supertypeLoadState = STATE_DONE;
541 } 541 }
542 }); 542 });
543 })); 543 });
544 } 544 }
545 545
546 // TODO(johnniwinther): Remove this queue when resolution has been split into 546 // TODO(johnniwinther): Remove this queue when resolution has been split into
547 // syntax and semantic resolution. 547 // syntax and semantic resolution.
548 TypeDeclarationElement currentlyResolvedTypeDeclaration; 548 TypeDeclarationElement currentlyResolvedTypeDeclaration;
549 Queue<ClassElement> pendingClassesToBeResolved = new Queue<ClassElement>(); 549 Queue<ClassElement> pendingClassesToBeResolved = new Queue<ClassElement>();
550 Queue<ClassElement> pendingClassesToBePostProcessed = 550 Queue<ClassElement> pendingClassesToBePostProcessed =
551 new Queue<ClassElement>(); 551 new Queue<ClassElement>();
552 552
553 /// Resolve [element] using [resolveTypeDeclaration]. 553 /// Resolve [element] using [resolveTypeDeclaration].
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 } 756 }
757 } 757 }
758 }); 758 });
759 } 759 }
760 760
761 void checkMixinSuperUses(TreeElements resolutionTree, 761 void checkMixinSuperUses(TreeElements resolutionTree,
762 MixinApplicationElement mixinApplication, 762 MixinApplicationElement mixinApplication,
763 ClassElement mixin) { 763 ClassElement mixin) {
764 // TODO(johnniwinther): Avoid the use of [TreeElements] here. 764 // TODO(johnniwinther): Avoid the use of [TreeElements] here.
765 if (resolutionTree == null) return; 765 if (resolutionTree == null) return;
766 Iterable<Node> superUses = resolutionTree.superUses; 766 Iterable<SourceSpan> superUses = resolutionTree.superUses;
767 if (superUses.isEmpty) return; 767 if (superUses.isEmpty) return;
768 DiagnosticMessage error = reporter.createMessage( 768 DiagnosticMessage error = reporter.createMessage(
769 mixinApplication, 769 mixinApplication,
770 MessageKind.ILLEGAL_MIXIN_WITH_SUPER, 770 MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
771 {'className': mixin.name}); 771 {'className': mixin.name});
772 // Show the user the problematic uses of 'super' in the mixin. 772 // Show the user the problematic uses of 'super' in the mixin.
773 List<DiagnosticMessage> infos = <DiagnosticMessage>[]; 773 List<DiagnosticMessage> infos = <DiagnosticMessage>[];
774 for (Node use in superUses) { 774 for (SourceSpan use in superUses) {
775 infos.add(reporter.createMessage( 775 infos.add(reporter.createMessage(
776 use, 776 use,
777 MessageKind.ILLEGAL_MIXIN_SUPER_USE)); 777 MessageKind.ILLEGAL_MIXIN_SUPER_USE));
778 } 778 }
779 reporter.reportError(error, infos); 779 reporter.reportError(error, infos);
780 } 780 }
781 781
782 void checkClassMembers(ClassElement cls) { 782 void checkClassMembers(ClassElement cls) {
783 assert(invariant(cls, cls.isDeclaration)); 783 assert(invariant(cls, cls.isDeclaration));
784 if (cls.isObject) return; 784 if (cls.isObject) return;
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 new TypedefResolverVisitor(compiler, element, registry); 1039 new TypedefResolverVisitor(compiler, element, registry);
1040 visitor.visit(node); 1040 visitor.visit(node);
1041 element.resolutionState = STATE_DONE; 1041 element.resolutionState = STATE_DONE;
1042 return registry.worldImpact; 1042 return registry.worldImpact;
1043 }); 1043 });
1044 }); 1044 });
1045 }); 1045 });
1046 } 1046 }
1047 1047
1048 void resolveMetadataAnnotation(MetadataAnnotationX annotation) { 1048 void resolveMetadataAnnotation(MetadataAnnotationX annotation) {
1049 reporter.withCurrentElement(annotation.annotatedElement, () => measure(() { 1049 reporter.withCurrentElement(annotation.annotatedElement.enclosingElement, () => measure(() {
Siggi Cherem (dart-lang) 2015/12/14 22:54:44 nit => 80 col
Johnni Winther 2015/12/15 10:28:01 Done.
1050 assert(annotation.resolutionState == STATE_NOT_STARTED); 1050 assert(annotation.resolutionState == STATE_NOT_STARTED);
1051 annotation.resolutionState = STATE_STARTED; 1051 annotation.resolutionState = STATE_STARTED;
1052 1052
1053 Node node = annotation.parseNode(parsing); 1053 Node node = annotation.parseNode(parsing);
1054 Element annotatedElement = annotation.annotatedElement; 1054 Element annotatedElement = annotation.annotatedElement;
1055 AnalyzableElement context = annotatedElement.analyzableElement; 1055 AnalyzableElement context = annotatedElement.analyzableElement;
1056 ClassElement classElement = annotatedElement.enclosingClass; 1056 ClassElement classElement = annotatedElement.enclosingClass;
1057 if (classElement != null) { 1057 if (classElement != null) {
1058 // The annotation is resolved in the scope of [classElement]. 1058 // The annotation is resolved in the scope of [classElement].
1059 classElement.ensureResolved(resolution); 1059 classElement.ensureResolved(resolution);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 TreeElements get treeElements { 1127 TreeElements get treeElements {
1128 assert(invariant(this, _treeElements !=null, 1128 assert(invariant(this, _treeElements !=null,
1129 message: "TreeElements have not been computed for $this.")); 1129 message: "TreeElements have not been computed for $this."));
1130 return _treeElements; 1130 return _treeElements;
1131 } 1131 }
1132 1132
1133 void reuseElement() { 1133 void reuseElement() {
1134 _treeElements = null; 1134 _treeElements = null;
1135 } 1135 }
1136 } 1136 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/registry.dart ('k') | pkg/compiler/lib/src/resolution/tree_elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698