| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 deferred_load; | 5 library deferred_load; |
| 6 | 6 |
| 7 import 'common/tasks.dart' show CompilerTask; | 7 import 'common/tasks.dart' show CompilerTask; |
| 8 import 'common.dart'; | 8 import 'common.dart'; |
| 9 import 'compiler.dart' show Compiler; | 9 import 'compiler.dart' show Compiler; |
| 10 import 'constants/expressions.dart' show ConstantExpression; | 10 import 'constants/expressions.dart' show ConstantExpression; |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 }); | 784 }); |
| 785 | 785 |
| 786 // Generate a unique name for each OutputUnit. | 786 // Generate a unique name for each OutputUnit. |
| 787 _assignNamesToOutputUnits(allOutputUnits); | 787 _assignNamesToOutputUnits(allOutputUnits); |
| 788 })); | 788 })); |
| 789 // Notify the impact strategy impacts are no longer needed for deferred | 789 // Notify the impact strategy impacts are no longer needed for deferred |
| 790 // load. | 790 // load. |
| 791 compiler.impactStrategy.onImpactUsed(IMPACT_USE); | 791 compiler.impactStrategy.onImpactUsed(IMPACT_USE); |
| 792 } | 792 } |
| 793 | 793 |
| 794 void beforeResolution(Compiler compiler) { | 794 void beforeResolution(LibraryEntity mainLibrary) { |
| 795 if (compiler.mainApp == null) return; | 795 if (mainLibrary == null) return; |
| 796 // TODO(johnniwinther): Support deferred load for kernel based elements. | 796 // TODO(johnniwinther): Support deferred load for kernel based elements. |
| 797 if (compiler.options.loadFromDill) return; | 797 if (compiler.options.loadFromDill) return; |
| 798 _allDeferredImports[_fakeMainImport] = compiler.mainApp; | 798 _allDeferredImports[_fakeMainImport] = mainLibrary; |
| 799 var lastDeferred; | 799 var lastDeferred; |
| 800 // When detecting duplicate prefixes of deferred libraries there are 4 | 800 // When detecting duplicate prefixes of deferred libraries there are 4 |
| 801 // cases of duplicate prefixes: | 801 // cases of duplicate prefixes: |
| 802 // 1. | 802 // 1. |
| 803 // import "lib.dart" deferred as a; | 803 // import "lib.dart" deferred as a; |
| 804 // import "lib2.dart" deferred as a; | 804 // import "lib2.dart" deferred as a; |
| 805 // 2. | 805 // 2. |
| 806 // import "lib.dart" deferred as a; | 806 // import "lib.dart" deferred as a; |
| 807 // import "lib2.dart" as a; | 807 // import "lib2.dart" as a; |
| 808 // 3. | 808 // 3. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 if (import.isDeferred) { | 848 if (import.isDeferred) { |
| 849 _DeferredImport key = new _DeclaredDeferredImport(import); | 849 _DeferredImport key = new _DeclaredDeferredImport(import); |
| 850 LibraryElement importedLibrary = import.importedLibrary; | 850 LibraryElement importedLibrary = import.importedLibrary; |
| 851 _allDeferredImports[key] = importedLibrary; | 851 _allDeferredImports[key] = importedLibrary; |
| 852 | 852 |
| 853 if (prefix == null) { | 853 if (prefix == null) { |
| 854 reporter.reportErrorMessage( | 854 reporter.reportErrorMessage( |
| 855 import, MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX); | 855 import, MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX); |
| 856 } else { | 856 } else { |
| 857 prefixDeferredImport[prefix] = import; | 857 prefixDeferredImport[prefix] = import; |
| 858 Uri mainLibraryUri = compiler.mainLibraryUri; |
| 858 _deferredImportDescriptions[key] = | 859 _deferredImportDescriptions[key] = |
| 859 new ImportDescription(import, library, compiler); | 860 new ImportDescription(import, library, mainLibraryUri); |
| 860 } | 861 } |
| 861 isProgramSplit = true; | 862 isProgramSplit = true; |
| 862 lastDeferred = import; | 863 lastDeferred = import; |
| 863 } | 864 } |
| 864 if (prefix != null) { | 865 if (prefix != null) { |
| 865 if (previousDeferredImport != null || | 866 if (previousDeferredImport != null || |
| 866 (import.isDeferred && usedPrefixes.contains(prefix))) { | 867 (import.isDeferred && usedPrefixes.contains(prefix))) { |
| 867 ImportElement failingImport = (previousDeferredImport != null) | 868 ImportElement failingImport = (previousDeferredImport != null) |
| 868 ? previousDeferredImport | 869 ? previousDeferredImport |
| 869 : import; | 870 : import; |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1024 | 1025 |
| 1025 class ImportDescription { | 1026 class ImportDescription { |
| 1026 /// Relative uri to the importing library. | 1027 /// Relative uri to the importing library. |
| 1027 final String importingUri; | 1028 final String importingUri; |
| 1028 | 1029 |
| 1029 /// The prefix this import is imported as. | 1030 /// The prefix this import is imported as. |
| 1030 final String prefix; | 1031 final String prefix; |
| 1031 final LibraryElement _importingLibrary; | 1032 final LibraryElement _importingLibrary; |
| 1032 | 1033 |
| 1033 ImportDescription( | 1034 ImportDescription( |
| 1034 ImportElement import, LibraryElement importingLibrary, Compiler compiler) | 1035 ImportElement import, LibraryElement importingLibrary, Uri mainLibraryUri) |
| 1035 : importingUri = uri_extras.relativize(compiler.mainApp.canonicalUri, | 1036 : importingUri = uri_extras.relativize( |
| 1036 importingLibrary.canonicalUri, false), | 1037 mainLibraryUri, importingLibrary.canonicalUri, false), |
| 1037 prefix = import.prefix.name, | 1038 prefix = import.prefix.name, |
| 1038 _importingLibrary = importingLibrary; | 1039 _importingLibrary = importingLibrary; |
| 1039 | 1040 |
| 1040 String get importingLibraryName { | 1041 String get importingLibraryName { |
| 1041 return _importingLibrary.hasLibraryName | 1042 return _importingLibrary.hasLibraryName |
| 1042 ? _importingLibrary.libraryName | 1043 ? _importingLibrary.libraryName |
| 1043 : "<unnamed>"; | 1044 : "<unnamed>"; |
| 1044 } | 1045 } |
| 1045 } | 1046 } |
| 1046 | 1047 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 | 1102 |
| 1102 bool operator ==(other) { | 1103 bool operator ==(other) { |
| 1103 if (other is! _DeclaredDeferredImport) return false; | 1104 if (other is! _DeclaredDeferredImport) return false; |
| 1104 return declaration == other.declaration; | 1105 return declaration == other.declaration; |
| 1105 } | 1106 } |
| 1106 | 1107 |
| 1107 int get hashCode => declaration.hashCode * 17; | 1108 int get hashCode => declaration.hashCode * 17; |
| 1108 | 1109 |
| 1109 String toString() => '$declaration'; | 1110 String toString() => '$declaration'; |
| 1110 } | 1111 } |
| OLD | NEW |