diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart index 65a29e61acf3..da5a987a90a1 100644 --- a/pkg/compiler/lib/src/dump_info.dart +++ b/pkg/compiler/lib/src/dump_info.dart @@ -419,21 +419,15 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { } void reportInlined(Element element, Element inlinedFrom) { + element = element.declaration; + inlinedFrom = inlinedFrom.declaration; + inlineCount.putIfAbsent(element, () => 0); inlineCount[element] += 1; inlineMap.putIfAbsent(inlinedFrom, () => new List()); inlineMap[inlinedFrom].add(element); } - final Map> _dependencies = {}; - void registerDependency(Element target) { - if (compiler.options.dumpInfo) { - _dependencies - .putIfAbsent(compiler.currentElement, () => new Set()) - .add(target); - } - } - void registerImpact(Element element, WorldImpact impact) { if (compiler.options.dumpInfo) { impacts[element] = impact; @@ -552,6 +546,8 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); + AllInfo result = infoCollector.result; + // Recursively build links to function uses Iterable functionElements = infoCollector._elementToInfo.keys.where((k) => k is FunctionElement); @@ -566,6 +562,21 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { info.uses.add(new DependencyInfo(useInfo, '${selection.mask}')); } } + + // Recursively build links to field uses + Iterable fieldElements = + infoCollector._elementToInfo.keys.where((k) => k is FieldElement); + for (FieldElement element in fieldElements) { + FieldInfo info = infoCollector._elementToInfo[element]; + Iterable uses = getRetaining(element, closedWorld); + // Don't bother recording an empty list of dependencies. + for (Selection selection in uses) { + Info useInfo = infoCollector._elementToInfo[selection.selectedElement]; + if (useInfo == null) continue; + info.uses.add(new DependencyInfo(useInfo, '${selection.mask}')); + } + } + // Notify the impact strategy impacts are no longer needed for dump info. compiler.impactStrategy.onImpactUsed(IMPACT_USE); @@ -580,17 +591,6 @@ class DumpInfoTask extends CompilerTask implements InfoReporter { } } - AllInfo result = infoCollector.result; - - for (Element element in _dependencies.keys) { - var a = infoCollector._elementToInfo[element]; - if (a == null) continue; - result.dependencies[a] = _dependencies[element] - .map((o) => infoCollector._elementToInfo[o]) - .where((o) => o != null) - .toList(); - } - result.deferredFiles = compiler.deferredLoadTask.computeDeferredMap(); stopwatch.stop(); result.program = new ProgramInfo( diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart index c8c6c8363db4..7ffcc12e4d0e 100644 --- a/pkg/compiler/lib/src/js_backend/backend.dart +++ b/pkg/compiler/lib/src/js_backend/backend.dart @@ -2693,10 +2693,6 @@ class CodegenEnqueuerListener extends EnqueuerListenerBase { WorldImpactBuilderImpl worldImpact = new WorldImpactBuilderImpl(); _registerUsedElement(worldImpact, member, forResolution: false); - // TODO(sigmund): add other missing dependencies (internals, selectors - // enqueued after allocations). - dumpInfoTask.registerDependency(member); - return worldImpact; }