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

Side by Side Diff: dart/lib/compiler/implementation/elements/elements.dart

Issue 11092003: Implement part-of directive. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Update co19 status for dart2dart Created 8 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 | Annotate | Revision Log
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('elements'); 5 #library('elements');
6 6
7 #import('dart:uri'); 7 #import('dart:uri');
8 8
9 // TODO(ahe): Rename prefix to 'api' when VM bug is fixed.
10 #import('../../compiler.dart', prefix: 'api_e');
9 #import('../tree/tree.dart'); 11 #import('../tree/tree.dart');
10 #import('../scanner/scannerlib.dart'); 12 #import('../scanner/scannerlib.dart');
11 #import('../leg.dart'); // TODO(karlklose): we only need type. 13 #import('../leg.dart'); // TODO(karlklose): we only need type.
12 #import('../universe/universe.dart'); 14 #import('../universe/universe.dart');
13 #import('../util/util.dart'); 15 #import('../util/util.dart');
14 16
15 const int STATE_NOT_STARTED = 0; 17 const int STATE_NOT_STARTED = 0;
16 const int STATE_STARTED = 1; 18 const int STATE_STARTED = 1;
17 const int STATE_DONE = 2; 19 const int STATE_DONE = 2;
18 20
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 } else { 488 } else {
487 field.setter = accessor; 489 field.setter = accessor;
488 } 490 }
489 addToScope(field, listener); 491 addToScope(field, listener);
490 } 492 }
491 } 493 }
492 } 494 }
493 495
494 class CompilationUnitElement extends ContainerElement { 496 class CompilationUnitElement extends ContainerElement {
495 final Script script; 497 final Script script;
498 PartOf partTag;
496 499
497 CompilationUnitElement(Script script, LibraryElement library) 500 CompilationUnitElement(Script script, LibraryElement library)
498 : this.script = script, 501 : this.script = script,
499 super(new SourceString(script.name), 502 super(new SourceString(script.name),
500 ElementKind.COMPILATION_UNIT, 503 ElementKind.COMPILATION_UNIT,
501 library) { 504 library) {
502 library.addCompilationUnit(this); 505 library.addCompilationUnit(this);
503 } 506 }
504 507
505 void addMember(Element element, DiagnosticListener listener) { 508 void addMember(Element element, DiagnosticListener listener) {
506 // Keep a list of top level members. 509 // Keep a list of top level members.
507 super.addMember(element, listener); 510 super.addMember(element, listener);
508 // Provide the member to the library to build scope. 511 // Provide the member to the library to build scope.
509 if (enclosingElement.isPatch) { 512 if (enclosingElement.isPatch) {
510 getImplementationLibrary().addMember(element, listener); 513 getImplementationLibrary().addMember(element, listener);
511 } else { 514 } else {
512 getLibrary().addMember(element, listener); 515 getLibrary().addMember(element, listener);
513 } 516 }
514 } 517 }
518
519 void setPartOf(PartOf tag, DiagnosticListener listener) {
520 LibraryElement library = enclosingElement;
521 if (library.entryCompilationUnit == this) {
522 listener.reportMessage(
523 listener.spanFromNode(tag),
524 MessageKind.ILLEGAL_DIRECTIVE.error(),
525 api_e.Diagnostic.WARNING);
526 return;
527 }
528 if (!localMembers.isEmpty()) {
529 listener.reportMessage(
530 listener.spanFromNode(tag),
531 MessageKind.BEFORE_TOP_LEVEL.error(),
532 api_e.Diagnostic.ERROR);
533 return;
534 }
535 if (partTag != null) {
536 listener.reportMessage(
537 listener.spanFromNode(tag),
538 MessageKind.DUPLICATED_PART_OF.error(),
539 api_e.Diagnostic.WARNING);
540 return;
541 }
542 partTag = tag;
543 LibraryName libraryTag = getLibrary().libraryTag;
544 if (libraryTag != null) {
Johnni Winther 2012/10/09 07:43:36 Isn't it also an error if the library does not hav
ahe 2012/10/09 07:48:09 A script may have parts, but no library name: scr
545 String expectedName = tag.name.toString();
546 String actualName = libraryTag.name.toString();
547 if (expectedName != actualName) {
548 listener.reportMessage(
549 listener.spanFromNode(tag.name),
550 MessageKind.LIBRARY_NAME_MISMATCH.error([expectedName]),
551 api_e.Diagnostic.WARNING);
552 }
553 }
554 }
515 } 555 }
516 556
517 class LibraryElement extends ScopeContainerElement { 557 class LibraryElement extends ScopeContainerElement {
518 final Uri uri; 558 final Uri uri;
519 CompilationUnitElement entryCompilationUnit; 559 CompilationUnitElement entryCompilationUnit;
520 Link<CompilationUnitElement> compilationUnits = 560 Link<CompilationUnitElement> compilationUnits =
521 const EmptyLink<CompilationUnitElement>(); 561 const EmptyLink<CompilationUnitElement>();
522 Link<LibraryTag> tags = const EmptyLink<LibraryTag>(); 562 Link<LibraryTag> tags = const EmptyLink<LibraryTag>();
523 LibraryName libraryTag; 563 LibraryName libraryTag;
524 bool canUseNative = false; 564 bool canUseNative = false;
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after
1873 1913
1874 MetadataAnnotation ensureResolved(Compiler compiler) { 1914 MetadataAnnotation ensureResolved(Compiler compiler) {
1875 if (resolutionState == STATE_NOT_STARTED) { 1915 if (resolutionState == STATE_NOT_STARTED) {
1876 compiler.resolver.resolveMetadataAnnotation(this); 1916 compiler.resolver.resolveMetadataAnnotation(this);
1877 } 1917 }
1878 return this; 1918 return this;
1879 } 1919 }
1880 1920
1881 String toString() => 'MetadataAnnotation($value, $resolutionState)'; 1921 String toString() => 'MetadataAnnotation($value, $resolutionState)';
1882 } 1922 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698