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

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

Issue 2265473004: Introduce "CommonElements" (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: cl Created 4 years, 4 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
« no previous file with comments | « pkg/compiler/lib/src/core_types.dart ('k') | pkg/compiler/lib/src/elements/elements.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/backend_api.dart' show Backend; 7 import 'common/backend_api.dart' show Backend;
8 import 'common/tasks.dart' show CompilerTask; 8 import 'common/tasks.dart' show CompilerTask;
9 import 'common.dart'; 9 import 'common.dart';
10 import 'compiler.dart' show Compiler; 10 import 'compiler.dart' show Compiler;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 82 }
83 83
84 /// For each deferred import, find elements and constants to be loaded when that 84 /// For each deferred import, find elements and constants to be loaded when that
85 /// import is loaded. Elements that are used by several deferred imports are in 85 /// import is loaded. Elements that are used by several deferred imports are in
86 /// shared OutputUnits. 86 /// shared OutputUnits.
87 class DeferredLoadTask extends CompilerTask { 87 class DeferredLoadTask extends CompilerTask {
88 /// The name of this task. 88 /// The name of this task.
89 String get name => 'Deferred Loading'; 89 String get name => 'Deferred Loading';
90 90
91 /// DeferredLibrary from dart:async 91 /// DeferredLibrary from dart:async
92 ClassElement get deferredLibraryClass => compiler.deferredLibraryClass; 92 ClassElement get deferredLibraryClass =>
93 compiler.commonElements.deferredLibraryClass;
93 94
94 /// A synthetic import representing the loading of the main program. 95 /// A synthetic import representing the loading of the main program.
95 final _DeferredImport _fakeMainImport = const _DeferredImport(); 96 final _DeferredImport _fakeMainImport = const _DeferredImport();
96 97
97 /// The OutputUnit that will be loaded when the program starts. 98 /// The OutputUnit that will be loaded when the program starts.
98 final OutputUnit mainOutputUnit = new OutputUnit(isMainOutput: true); 99 final OutputUnit mainOutputUnit = new OutputUnit(isMainOutput: true);
99 100
100 /// A set containing (eventually) all output units that will result from the 101 /// A set containing (eventually) all output units that will result from the
101 /// program. 102 /// program.
102 final Set<OutputUnit> allOutputUnits = new Set<OutputUnit>(); 103 final Set<OutputUnit> allOutputUnits = new Set<OutputUnit>();
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 } 457 }
457 } 458 }
458 459
459 iterateTags(library); 460 iterateTags(library);
460 if (library.isPatched) { 461 if (library.isPatched) {
461 iterateTags(library.implementation); 462 iterateTags(library.implementation);
462 } 463 }
463 } 464 }
464 465
465 traverseLibrary(root); 466 traverseLibrary(root);
466 result.add(compiler.coreLibrary); 467 result.add(compiler.commonElements.coreLibrary);
467 return result; 468 return result;
468 } 469 }
469 470
470 /// Add all dependencies of [constant] to the mapping of [import]. 471 /// Add all dependencies of [constant] to the mapping of [import].
471 void _mapConstantDependencies( 472 void _mapConstantDependencies(
472 ConstantValue constant, _DeferredImport import) { 473 ConstantValue constant, _DeferredImport import) {
473 Set<ConstantValue> constants = _constantsDeferredBy.putIfAbsent( 474 Set<ConstantValue> constants = _constantsDeferredBy.putIfAbsent(
474 import, () => new Set<ConstantValue>()); 475 import, () => new Set<ConstantValue>());
475 if (constants.contains(constant)) return; 476 if (constants.contains(constant)) return;
476 constants.add(constant); 477 constants.add(constant);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 // are things that the backend needs but cannot associate with a 662 // are things that the backend needs but cannot associate with a
662 // particular element, for example, startRootIsolate. This set 663 // particular element, for example, startRootIsolate. This set
663 // also contains elements for which we lack precise information. 664 // also contains elements for which we lack precise information.
664 for (Element element 665 for (Element element
665 in compiler.globalDependencies.otherDependencies) { 666 in compiler.globalDependencies.otherDependencies) {
666 _mapDependencies(element: element, import: _fakeMainImport); 667 _mapDependencies(element: element, import: _fakeMainImport);
667 } 668 }
668 669
669 // Now check to see if we have to add more elements due to 670 // Now check to see if we have to add more elements due to
670 // mirrors. 671 // mirrors.
671 if (compiler.mirrorsLibrary != null) { 672 if (compiler.commonElements.mirrorsLibrary != null) {
672 _addMirrorElements(); 673 _addMirrorElements();
673 } 674 }
674 675
675 // Build the OutputUnits using these two maps. 676 // Build the OutputUnits using these two maps.
676 Map<Element, OutputUnit> elementToOutputUnitBuilder = 677 Map<Element, OutputUnit> elementToOutputUnitBuilder =
677 new Map<Element, OutputUnit>(); 678 new Map<Element, OutputUnit>();
678 Map<ConstantValue, OutputUnit> constantToOutputUnitBuilder = 679 Map<ConstantValue, OutputUnit> constantToOutputUnitBuilder =
679 new Map<ConstantValue, OutputUnit>(); 680 new Map<ConstantValue, OutputUnit>();
680 681
681 // Reverse the mappings. For each element record an OutputUnit 682 // Reverse the mappings. For each element record an OutputUnit
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 } 1015 }
1015 } else { 1016 } else {
1016 // Finds the first argument to the [DeferredLibrary] annotation 1017 // Finds the first argument to the [DeferredLibrary] annotation
1017 List<MetadataAnnotation> metadatas = declaration.metadata; 1018 List<MetadataAnnotation> metadatas = declaration.metadata;
1018 assert(metadatas != null); 1019 assert(metadatas != null);
1019 for (MetadataAnnotation metadata in metadatas) { 1020 for (MetadataAnnotation metadata in metadatas) {
1020 metadata.ensureResolved(compiler.resolution); 1021 metadata.ensureResolved(compiler.resolution);
1021 ConstantValue value = 1022 ConstantValue value =
1022 compiler.constants.getConstantValue(metadata.constant); 1023 compiler.constants.getConstantValue(metadata.constant);
1023 Element element = value.getType(compiler.coreTypes).element; 1024 Element element = value.getType(compiler.coreTypes).element;
1024 if (element == compiler.deferredLibraryClass) { 1025 if (element == compiler.commonElements.deferredLibraryClass) {
1025 ConstructedConstantValue constant = value; 1026 ConstructedConstantValue constant = value;
1026 StringConstantValue s = constant.fields.values.single; 1027 StringConstantValue s = constant.fields.values.single;
1027 result = s.primitiveValue.slowToString(); 1028 result = s.primitiveValue.slowToString();
1028 break; 1029 break;
1029 } 1030 }
1030 } 1031 }
1031 } 1032 }
1032 assert(result != null); 1033 assert(result != null);
1033 return result; 1034 return result;
1034 } 1035 }
1035 1036
1036 bool operator ==(other) { 1037 bool operator ==(other) {
1037 if (other is! _DeclaredDeferredImport) return false; 1038 if (other is! _DeclaredDeferredImport) return false;
1038 return declaration == other.declaration; 1039 return declaration == other.declaration;
1039 } 1040 }
1040 1041
1041 int get hashCode => declaration.hashCode * 17; 1042 int get hashCode => declaration.hashCode * 17;
1042 1043
1043 String toString() => '$declaration'; 1044 String toString() => '$declaration';
1044 } 1045 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/core_types.dart ('k') | pkg/compiler/lib/src/elements/elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698