| 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 'constants/expressions.dart'; | 7 import 'constants/expressions.dart'; |
| 8 import 'constants/values.dart' show | 8 import 'constants/values.dart' show |
| 9 ConstantValue, | 9 ConstantValue, |
| 10 ConstructedConstantValue, | 10 ConstructedConstantValue, |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 /// Returns the [OutputUnit] where [constant] belongs. | 194 /// Returns the [OutputUnit] where [constant] belongs. |
| 195 OutputUnit outputUnitForConstant(ConstantValue constant) { | 195 OutputUnit outputUnitForConstant(ConstantValue constant) { |
| 196 if (!isProgramSplit) return mainOutputUnit; | 196 if (!isProgramSplit) return mainOutputUnit; |
| 197 return _constantToOutputUnit[constant]; | 197 return _constantToOutputUnit[constant]; |
| 198 } | 198 } |
| 199 | 199 |
| 200 bool isDeferred(Element element) { | 200 bool isDeferred(Element element) { |
| 201 return outputUnitForElement(element) != mainOutputUnit; | 201 return outputUnitForElement(element) != mainOutputUnit; |
| 202 } | 202 } |
| 203 | 203 |
| 204 /// Returns true if e1 and e2 are in the same output unit. | 204 /// Returns `true` if element [to] is reachable from element [from] without |
| 205 bool inSameOutputUnit(Element e1, Element e2) { | 205 /// crossing a deferred import. |
| 206 return outputUnitForElement(e1) == outputUnitForElement(e2); | 206 /// |
| 207 /// For example, if we have two deferred libraries `A` and `B` that both |
| 208 /// import a library `C`, then even though elements from `A` and `C` end up in |
| 209 /// different output units, there is a non-deferred path between `A` and `C`. |
| 210 bool hasOnlyNonDeferredImportPaths(Element from, Element to) { |
| 211 OutputUnit outputUnitFrom = outputUnitForElement(from); |
| 212 OutputUnit outputUnitTo = outputUnitForElement(to); |
| 213 return outputUnitTo.imports.containsAll(outputUnitFrom.imports); |
| 214 } |
| 215 |
| 216 bool isFromMainOutputUnit(Element element) { |
| 217 return outputUnitForElement(element) == mainOutputUnit; |
| 207 } | 218 } |
| 208 | 219 |
| 209 void registerConstantDeferredUse(DeferredConstantValue constant, | 220 void registerConstantDeferredUse(DeferredConstantValue constant, |
| 210 PrefixElement prefix) { | 221 PrefixElement prefix) { |
| 211 OutputUnit outputUnit = new OutputUnit(); | 222 OutputUnit outputUnit = new OutputUnit(); |
| 212 outputUnit.imports.add(prefix.deferredImport); | 223 outputUnit.imports.add(prefix.deferredImport); |
| 213 _constantToOutputUnit[constant] = outputUnit; | 224 _constantToOutputUnit[constant] = outputUnit; |
| 214 } | 225 } |
| 215 | 226 |
| 216 /// Answers whether [element] is explicitly deferred when referred to from | 227 /// Answers whether [element] is explicitly deferred when referred to from |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 _importingLibrary = importingLibrary; | 893 _importingLibrary = importingLibrary; |
| 883 | 894 |
| 884 String get importingLibraryName { | 895 String get importingLibraryName { |
| 885 String libraryName = _importingLibrary.getLibraryName(); | 896 String libraryName = _importingLibrary.getLibraryName(); |
| 886 return libraryName == "" | 897 return libraryName == "" |
| 887 ? "<unnamed>" | 898 ? "<unnamed>" |
| 888 : libraryName; | 899 : libraryName; |
| 889 } | 900 } |
| 890 | 901 |
| 891 } | 902 } |
| OLD | NEW |