Chromium Code Reviews| 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; |
| } |
| } |