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

Unified Diff: pkg/compiler/lib/src/dump_info.dart

Issue 2398133002: Include ClosureInfo in dump info. (Closed)
Patch Set: Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « DEPS ('k') | pkg/compiler/pubspec.yaml » ('j') | pkg/compiler/pubspec.yaml » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2a775a16522c4b3022c3ed335f969933b620ea75..e3ff91e3005823b50d8ce6cc83df675ed41c04bd 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -9,6 +9,7 @@ import 'dart:convert'
import 'package:dart2js_info/info.dart';
+import 'closure.dart';
import 'common/tasks.dart' show CompilerTask;
import 'common.dart';
import 'compiler.dart' show Compiler;
@@ -143,16 +144,15 @@ class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
}
}
- List<FunctionInfo> nestedClosures = <FunctionInfo>[];
- for (Element closure in element.nestedClosures) {
- Info child = this.process(closure);
- if (child != null) {
- ClassInfo parent = this.process(closure.enclosingElement);
- if (parent != null) {
- child.name = "${parent.name}.${child.name}";
- }
- nestedClosures.add(child);
- size += child.size;
+ List<ClosureInfo> nestedClosures = <ClosureInfo>[];
Siggi Cherem (dart-lang) 2016/10/06 17:58:09 the code here and in line 313 seem almost the same
Harry Terkelsen 2016/10/06 18:22:43 Done.
+ for (FunctionElement function in element.nestedClosures) {
+ assert(function is SynthesizedCallMethodElementX);
+ SynthesizedCallMethodElementX callMethod = function;
+ ClosureInfo closure = this.process(callMethod.enclosingClass);
+ if (closure != null) {
+ closure.parent = info;
+ nestedClosures.add(closure);
+ size += closure.size;
}
}
info.closures = nestedClosures;
@@ -184,20 +184,13 @@ class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
// them to a function, and by extension, this class. Process and add the
// sizes here.
if (member is MemberElement) {
- for (Element closure in member.nestedClosures) {
- FunctionInfo closureInfo = this.process(closure);
- if (closureInfo == null) continue;
-
- // TODO(sigmund): remove this legacy update on the name, represent the
- // information explicitly in the info format.
- // Look for the parent element of this closure might be the enclosing
- // class or an enclosing function.
- Element parent = closure.enclosingElement;
- ClassInfo parentInfo = this.process(parent);
- if (parentInfo != null) {
- closureInfo.name = "${parentInfo.name}.${closureInfo.name}";
+ for (Element function in member.nestedClosures) {
Siggi Cherem (dart-lang) 2016/10/06 17:58:09 we might be able to use the same function here I t
Harry Terkelsen 2016/10/06 18:22:43 I think we can just iterate over all closures in t
+ assert(function is SynthesizedCallMethodElementX);
+ SynthesizedCallMethodElementX callMethod = function;
+ ClosureInfo closure = this.process(callMethod.enclosingClass);
+ if (closure != null) {
+ size += closure.size;
}
- size += closureInfo.size;
}
}
});
@@ -215,6 +208,26 @@ class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
return classInfo;
}
+ ClosureInfo visitClosureClassElement(ClosureClassElement element, _) {
+ ClosureInfo closureInfo = new ClosureInfo(
+ name: element.name,
+ outputUnit: _unitInfoForElement(element),
+ size: compiler.dumpInfoTask.sizeOf(element));
+ _elementToInfo[element] = closureInfo;
+
+ ClosureClassMap closureMap =
+ compiler.closureToClassMapper.closureMappingCache[element.node];
+ assert(closureMap != null && closureMap.closureClassElement == element);
+
+ FunctionInfo functionInfo = this.process(closureMap.callElement);
+ if (functionInfo == null) return null;
Siggi Cherem (dart-lang) 2016/10/06 17:58:08 when can this be null?
Harry Terkelsen 2016/10/06 18:22:43 If the closure is not actually output in the code
+ closureInfo.function = functionInfo;
+ functionInfo.parent = closureInfo;
+
+ result.closures.add(closureInfo);
+ return closureInfo;
+ }
+
FunctionInfo visitFunctionElement(FunctionElement element, _) {
int size = compiler.dumpInfoTask.sizeOf(element);
// TODO(sigmund): consider adding a small info to represent unreachable
@@ -294,23 +307,22 @@ class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
outputUnit: _unitInfoForElement(element));
_elementToInfo[element] = info;
- List<FunctionInfo> nestedClosures = <FunctionInfo>[];
+ List<ClosureInfo> nestedClosures = <ClosureInfo>[];
if (element is MemberElement) {
MemberElement member = element as MemberElement;
- for (Element closure in member.nestedClosures) {
- Info child = this.process(closure);
- if (child != null) {
- BasicInfo parent = this.process(closure.enclosingElement);
- if (parent != null) {
- child.name = "${parent.name}.${child.name}";
- }
- nestedClosures.add(child);
- child.parent = parent;
- size += child.size;
+ for (Element function in member.nestedClosures) {
+ assert(function is SynthesizedCallMethodElementX);
+ SynthesizedCallMethodElementX callMethod = function;
+ ClosureInfo closure = this.process(callMethod.enclosingClass);
Siggi Cherem (dart-lang) 2016/10/06 17:58:09 is .enclosingClass the same as .enclosingElement (
Harry Terkelsen 2016/10/06 18:22:42 Done.
+ if (closure != null) {
+ closure.parent = info;
+ nestedClosures.add(closure);
+ size += closure.size;
}
}
}
info.closures = nestedClosures;
+
result.functions.add(info);
return info;
}
« no previous file with comments | « DEPS ('k') | pkg/compiler/pubspec.yaml » ('j') | pkg/compiler/pubspec.yaml » ('J')

Powered by Google App Engine
This is Rietveld 408576698