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

Side by Side Diff: pkg/kernel/lib/src/incremental_class_hierarchy.dart

Issue 2922533002: Start implementing IncrementalClassHierarchy. (Closed)
Patch Set: Fixes for review comments. Created 3 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/kernel/test/class_hierarchy_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 library kernel.incremental_class_hierarchy;
5
6 import 'dart:math';
7
8 import 'package:kernel/ast.dart';
9 import 'package:kernel/class_hierarchy.dart';
10
11 /// Lazy and incremental implementation of [ClassHierarchy].
12 class IncrementalClassHierarchy implements ClassHierarchy {
13 /// The mapping from [Class]es to the corresponding [_ClassInfo]s.
14 /// It is filled lazily as the client requests information about classes.
ahe 2017/06/02 11:34:48 What are your plans for the incremental part of th
scheglov 2017/06/02 15:36:07 I think we can use single instance of IncrementalC
ahe 2017/06/02 15:43:46 Thank you for explaining.
15 final Map<Class, _ClassInfo> _info = {};
16
17 @override
18 Iterable<Class> get classes {
19 // TODO(scheglov): implement classes
20 throw new UnimplementedError();
21 }
22
23 @override
24 void forEachOverridePair(Class class_,
25 callback(Member declaredMember, Member interfaceMember, bool isSetter)) {
26 // TODO(scheglov): implement forEachOverridePair
27 throw new UnimplementedError();
28 }
29
30 @override
31 Supertype getClassAsInstanceOf(Class class_, Class superclass) {
32 // TODO(scheglov): implement getClassAsInstanceOf
33 throw new UnimplementedError();
34 }
35
36 @override
37 int getClassDepth(Class node) {
38 var info = _getInfo(node);
39 if (info.depth < 0) {
40 int superDepth = -1;
41 if (node.supertype != null) {
42 superDepth = max(superDepth, getClassDepth(node.supertype.classNode));
ahe 2017/06/02 11:34:48 Any concerns about recursion here?
Paul Berry 2017/06/02 12:25:48 FWIW the topological sort in ClosedWorldClassHiera
ahe 2017/06/02 12:29:03 This situation might be slightly different. Howeve
43 }
44 if (node.mixedInType != null) {
45 superDepth = max(superDepth, getClassDepth(node.mixedInType.classNode));
46 }
47 for (var supertype in node.implementedTypes) {
48 superDepth = max(superDepth, getClassDepth(supertype.classNode));
49 }
50 info.depth = superDepth + 1;
51 }
52
53 return info.depth;
54 }
55
56 @override
57 InterfaceType getClassicLeastUpperBound(
58 InterfaceType type1, InterfaceType type2) {
59 // TODO(scheglov): implement getClassicLeastUpperBound
60 throw new UnimplementedError();
61 }
62
63 @override
64 int getClassIndex(Class class_) {
65 // TODO(scheglov): implement getClassIndex
66 throw new UnimplementedError();
67 }
68
69 @override
70 Member getDispatchTarget(Class class_, Name name, {bool setter: false}) {
71 // TODO(scheglov): implement getDispatchTarget
72 throw new UnimplementedError();
73 }
74
75 @override
76 Member getInterfaceMember(Class class_, Name name, {bool setter: false}) {
77 // TODO(scheglov): implement getInterfaceMember
78 throw new UnimplementedError();
79 }
80
81 @override
82 List<Class> getRankedSuperclasses(Class class_) {
83 // TODO(scheglov): implement getRankedSuperclasses
84 throw new UnimplementedError();
85 }
86
87 @override
88 InterfaceType getTypeAsInstanceOf(InterfaceType type, Class superclass) {
89 // TODO(scheglov): implement getTypeAsInstanceOf
90 throw new UnimplementedError();
91 }
92
93 @override
94 bool hasProperSubtypes(Class class_) {
95 // TODO(scheglov): implement hasProperSubtypes
96 throw new UnimplementedError();
97 }
98
99 /// Return the [_ClassInfo] for the [node].
100 _ClassInfo _getInfo(Class node) {
101 return _info.putIfAbsent(node, () => new _ClassInfo(node));
102 }
103 }
104
105 /// Information about a [Class].
106 class _ClassInfo {
107 final Class node;
108
109 /// The number of steps in the longest inheritance path from the class
110 /// to [Object], or -1 if the depth has not been computed yet.
111 int depth = -1;
112
113 _ClassInfo(this.node);
114 }
OLDNEW
« no previous file with comments | « no previous file | pkg/kernel/test/class_hierarchy_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698