Index: pkg/compiler/lib/src/dump_info.dart |
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart |
index 523186ccf2616d5cb0d11d07900327696afc5e7f..5bda2f3797b24aef47aa4dc301fb2b3601ea43a0 100644 |
--- a/pkg/compiler/lib/src/dump_info.dart |
+++ b/pkg/compiler/lib/src/dump_info.dart |
@@ -24,16 +24,18 @@ import 'types/types.dart' show TypeMask; |
import 'universe/world_builder.dart' show ReceiverConstraint; |
import 'universe/world_impact.dart' |
show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl; |
+import 'world.dart' show ClosedWorld; |
class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> { |
final Compiler compiler; |
+ final ClosedWorld closedWorld; |
final AllInfo result = new AllInfo(); |
final Map<Element, Info> _elementToInfo = <Element, Info>{}; |
final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{}; |
final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {}; |
- ElementInfoCollector(this.compiler); |
+ ElementInfoCollector(this.compiler, this.closedWorld); |
void run() { |
compiler.dumpInfoTask._constantToNode.forEach((constant, node) { |
@@ -260,12 +262,11 @@ class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> { |
// TODO(sigmund): why all these checks? |
if (element.isInstanceMember && |
!element.isAbstract && |
- compiler.closedWorld.allFunctions.contains(element)) { |
+ closedWorld.allFunctions.contains(element)) { |
returnType = '${element.type.returnType}'; |
} |
String inferredReturnType = '${_resultOf(element).returnType}'; |
- String sideEffects = |
- '${compiler.closedWorld.getSideEffectsOfElement(element)}'; |
+ String sideEffects = '${closedWorld.getSideEffectsOfElement(element)}'; |
int inlinedCount = compiler.dumpInfoTask.inlineCount[element]; |
if (inlinedCount == null) inlinedCount = 0; |
@@ -442,7 +443,7 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { |
* [element]. Each [Selection] contains an element that is |
* used and the selector that selected the element. |
*/ |
- Iterable<Selection> getRetaining(Element element) { |
+ Iterable<Selection> getRetaining(Element element, ClosedWorld closedWorld) { |
WorldImpact impact = impacts[element]; |
if (impact == null) return const <Selection>[]; |
@@ -451,7 +452,7 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { |
element, |
impact, |
new WorldImpactVisitorImpl(visitDynamicUse: (dynamicUse) { |
- selections.addAll(compiler.closedWorld.allFunctions |
+ selections.addAll(closedWorld.allFunctions |
.filter(dynamicUse.selector, dynamicUse.mask) |
.map((e) => new Selection(e, dynamicUse.mask))); |
}, visitStaticUse: (staticUse) { |
@@ -528,18 +529,18 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { |
return sb.toString(); |
} |
- void dumpInfo() { |
+ void dumpInfo(ClosedWorld closedWorld) { |
measure(() { |
- infoCollector = new ElementInfoCollector(compiler)..run(); |
+ infoCollector = new ElementInfoCollector(compiler, closedWorld)..run(); |
StringBuffer jsonBuffer = new StringBuffer(); |
- dumpInfoJson(jsonBuffer); |
+ dumpInfoJson(jsonBuffer, closedWorld); |
compiler.outputProvider('', 'info.json') |
..add(jsonBuffer.toString()) |
..close(); |
}); |
} |
- void dumpInfoJson(StringSink buffer) { |
+ void dumpInfoJson(StringSink buffer, ClosedWorld closedWorld) { |
JsonEncoder encoder = const JsonEncoder.withIndent(' '); |
Stopwatch stopwatch = new Stopwatch(); |
stopwatch.start(); |
@@ -549,7 +550,7 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { |
infoCollector._elementToInfo.keys.where((k) => k is FunctionElement); |
for (FunctionElement element in functionElements) { |
FunctionInfo info = infoCollector._elementToInfo[element]; |
- Iterable<Selection> uses = getRetaining(element); |
+ Iterable<Selection> uses = getRetaining(element, closedWorld); |
// Don't bother recording an empty list of dependencies. |
for (Selection selection in uses) { |
// Don't register dart2js builtin functions that are not recorded. |