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

Unified Diff: pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart

Issue 2999513003: Extract sorting method from AstInferrerEngine. (Closed)
Patch Set: Fix Created 3 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
diff --git a/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
index 0c0e24217f0b4ec0fdea8ff548c7fb7c54729a8e..106063cb8e867fa22ecef17162f0724b0b3c5b0b 100644
--- a/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
@@ -12,7 +12,6 @@ import '../elements/entities.dart';
import '../resolution/tree_elements.dart';
import '../tree/nodes.dart' as ast;
import '../types/types.dart';
-import '../util/util.dart';
import '../world.dart';
import 'builder.dart';
import 'builder_kernel.dart';
@@ -29,22 +28,15 @@ class AstInferrerEngine extends InferrerEngineImpl<ast.Node> {
GlobalTypeInferenceElementData<ast.Node> createElementData() =>
new AstGlobalTypeInferenceElementData();
- void analyzeAllElements() {
- sortResolvedAsts().forEach((ResolvedAst resolvedAst) {
- if (compiler.shouldPrintProgress) {
- reporter.log('Added $addedInGraph elements in inferencing graph.');
- compiler.progress.reset();
- }
- // This also forces the creation of the [ElementTypeInformation] to ensure
- // it is in the graph.
- MemberElement member = resolvedAst.element;
- ast.Node body;
- if (resolvedAst.kind == ResolvedAstKind.PARSED) {
- body = resolvedAst.body;
- }
- types.withMember(member, () => analyze(member, body, null));
- });
- reporter.log('Added $addedInGraph elements in inferencing graph.');
+ int computeMemberSize(MemberEntity member) => resolvedAstBucket(member);
+
+ ast.Node computeMemberBody(covariant MemberElement member) {
+ ResolvedAst resolvedAst = member.resolvedAst;
+ ast.Node body;
+ if (resolvedAst.kind == ResolvedAstKind.PARSED) {
+ body = resolvedAst.body;
+ }
+ return body;
}
void forEachParameter(
@@ -103,44 +95,20 @@ class AstInferrerEngine extends InferrerEngineImpl<ast.Node> {
return null;
}
- // Sorts the resolved elements by size. We do this for this inferrer
- // to get the same results for [ListTracer] compared to the
- // [SimpleTypesInferrer].
- Iterable<ResolvedAst> sortResolvedAsts() {
- int max = 0;
- Map<int, Setlet<ResolvedAst>> methodSizes = <int, Setlet<ResolvedAst>>{};
- compiler.enqueuer.resolution.processedEntities.forEach((_element) {
- MemberElement element = _element;
- ResolvedAst resolvedAst = element.resolvedAst;
- element = element.implementation;
- if (element.impliesType) return;
- assert(
- element.isField ||
- element.isFunction ||
- element.isConstructor ||
- element.isGetter ||
- element.isSetter,
- failedAt(element, 'Unexpected element kind: ${element.kind}'));
- if (element.isAbstract) return;
- // Put the other operators in buckets by length, later to be added in
- // length order.
- int length = 0;
- if (resolvedAst.kind == ResolvedAstKind.PARSED) {
- TreeElementMapping mapping = resolvedAst.elements;
- length = mapping.getSelectorCount();
- }
- max = length > max ? length : max;
- Setlet<ResolvedAst> set =
- methodSizes.putIfAbsent(length, () => new Setlet<ResolvedAst>());
- set.add(resolvedAst);
- });
-
- List<ResolvedAst> result = <ResolvedAst>[];
- for (int i = 0; i <= max; i++) {
- Setlet<ResolvedAst> set = methodSizes[i];
- if (set != null) result.addAll(set);
+ /// Computes a 'size' of [_element] based on the number of selectors in the
+ /// associated [TreeElements]. This is used for sorting member for the type
+ /// inference work-queue.
+ // TODO(johnniwinther): This is brittle and cannot be translated in the
+ // kernel based inference. Find a more stable a reproducable size measure.
+ static int resolvedAstBucket(_element) {
Siggi Cherem (dart-lang) 2017/08/08 00:30:46 rename to resolveAstApproxSize?
Johnni Winther 2017/08/09 08:10:45 Done.
+ MemberElement element = _element;
+ ResolvedAst resolvedAst = element.resolvedAst;
+ element = element.implementation;
+ if (resolvedAst.kind == ResolvedAstKind.PARSED) {
+ TreeElementMapping mapping = resolvedAst.elements;
+ return mapping.getSelectorCount();
}
- return result;
+ return 0;
}
}
« no previous file with comments | « no previous file | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698