Index: dart/lib/compiler/implementation/elements/elements.dart |
diff --git a/dart/lib/compiler/implementation/elements/elements.dart b/dart/lib/compiler/implementation/elements/elements.dart |
index 3dfee4956fba2b2051c86d758a4487239b3ca02a..71a7d0007dc859acdfd21e5800441658cf7d6755 100644 |
--- a/dart/lib/compiler/implementation/elements/elements.dart |
+++ b/dart/lib/compiler/implementation/elements/elements.dart |
@@ -6,6 +6,8 @@ |
#import('dart:uri'); |
+// TODO(ahe): Rename prefix to 'api' when VM bug is fixed. |
+#import('../../compiler.dart', prefix: 'api_e'); |
#import('../tree/tree.dart'); |
#import('../scanner/scannerlib.dart'); |
#import('../leg.dart'); // TODO(karlklose): we only need type. |
@@ -493,6 +495,7 @@ class ScopeContainerElement extends ContainerElement { |
class CompilationUnitElement extends ContainerElement { |
final Script script; |
+ PartOf partTag; |
CompilationUnitElement(Script script, LibraryElement library) |
: this.script = script, |
@@ -512,6 +515,43 @@ class CompilationUnitElement extends ContainerElement { |
getLibrary().addMember(element, listener); |
} |
} |
+ |
+ void setPartOf(PartOf tag, DiagnosticListener listener) { |
+ LibraryElement library = enclosingElement; |
+ if (library.entryCompilationUnit == this) { |
+ listener.reportMessage( |
+ listener.spanFromNode(tag), |
+ MessageKind.ILLEGAL_DIRECTIVE.error(), |
+ api_e.Diagnostic.WARNING); |
+ return; |
+ } |
+ if (!localMembers.isEmpty()) { |
+ listener.reportMessage( |
+ listener.spanFromNode(tag), |
+ MessageKind.BEFORE_TOP_LEVEL.error(), |
+ api_e.Diagnostic.ERROR); |
+ return; |
+ } |
+ if (partTag != null) { |
+ listener.reportMessage( |
+ listener.spanFromNode(tag), |
+ MessageKind.DUPLICATED_PART_OF.error(), |
+ api_e.Diagnostic.WARNING); |
+ return; |
+ } |
+ partTag = tag; |
+ LibraryName libraryTag = getLibrary().libraryTag; |
+ 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
|
+ String expectedName = tag.name.toString(); |
+ String actualName = libraryTag.name.toString(); |
+ if (expectedName != actualName) { |
+ listener.reportMessage( |
+ listener.spanFromNode(tag.name), |
+ MessageKind.LIBRARY_NAME_MISMATCH.error([expectedName]), |
+ api_e.Diagnostic.WARNING); |
+ } |
+ } |
+ } |
} |
class LibraryElement extends ScopeContainerElement { |