OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Entity model for elements derived from Kernel IR. | 5 /// Entity interfaces for modeling elements derived from Kernel IR. |
6 | 6 |
7 import '../elements/entities.dart'; | 7 import '../elements/entities.dart'; |
8 import '../elements/names.dart'; | |
9 import '../elements/types.dart'; | |
10 | 8 |
11 class KLibrary implements LibraryEntity { | 9 abstract class IndexedLibrary implements LibraryEntity { |
12 /// Library index used for fast lookup in [KernelWorldBuilder]. | 10 /// Library index used for fast lookup in [KernelToElementMapBase]. |
13 final int libraryIndex; | 11 int get libraryIndex; |
14 final String name; | |
15 final Uri canonicalUri; | |
16 | |
17 KLibrary(this.libraryIndex, this.name, this.canonicalUri); | |
18 | |
19 String toString() => 'library($name)'; | |
20 } | 12 } |
21 | 13 |
22 class KClass implements ClassEntity { | 14 abstract class IndexedClass implements ClassEntity { |
23 final KLibrary library; | 15 /// Class index used for fast lookup in [KernelToElementMapBase]. |
24 | 16 int get classIndex; |
25 /// Class index used for fast lookup in [KernelWorldBuilder]. | |
26 final int classIndex; | |
27 | |
28 final String name; | |
29 final bool isAbstract; | |
30 | |
31 KClass(this.library, this.classIndex, this.name, {this.isAbstract}); | |
32 | |
33 @override | |
34 bool get isClosure => false; | |
35 | |
36 String toString() => 'class($name)'; | |
37 } | 17 } |
38 | 18 |
39 abstract class KMember implements MemberEntity { | 19 abstract class IndexedMember implements MemberEntity { |
40 /// Member index used for fast lookup in [KernelWorldBuilder]. | 20 /// Member index used for fast lookup in [KernelToElementMapBase]. |
41 final int memberIndex; | 21 int get memberIndex; |
42 final KLibrary library; | |
43 final KClass enclosingClass; | |
44 final Name _name; | |
45 final bool _isStatic; | |
46 | |
47 KMember(this.memberIndex, this.library, this.enclosingClass, this._name, | |
48 {bool isStatic: false}) | |
49 : _isStatic = isStatic; | |
50 | |
51 String get name => _name.text; | |
52 | |
53 Name get memberName => _name; | |
54 | |
55 @override | |
56 bool get isAssignable => false; | |
57 | |
58 @override | |
59 bool get isConst => false; | |
60 | |
61 @override | |
62 bool get isAbstract => false; | |
63 | |
64 @override | |
65 bool get isSetter => false; | |
66 | |
67 @override | |
68 bool get isGetter => false; | |
69 | |
70 @override | |
71 bool get isFunction => false; | |
72 | |
73 @override | |
74 bool get isField => false; | |
75 | |
76 @override | |
77 bool get isConstructor => false; | |
78 | |
79 @override | |
80 bool get isInstanceMember => enclosingClass != null && !_isStatic; | |
81 | |
82 @override | |
83 bool get isStatic => enclosingClass != null && _isStatic; | |
84 | |
85 @override | |
86 bool get isTopLevel => enclosingClass == null; | |
87 | |
88 String get _kind; | |
89 | |
90 String toString() => | |
91 '$_kind(${enclosingClass != null ? '${enclosingClass.name}.' : ''}$name)'; | |
92 } | 22 } |
93 | 23 |
94 abstract class KFunction extends KMember implements FunctionEntity { | 24 abstract class IndexedFunction implements IndexedMember, FunctionEntity {} |
95 final ParameterStructure parameterStructure; | |
96 final bool isExternal; | |
97 final AsyncMarker asyncMarker; | |
98 | 25 |
99 KFunction(int memberIndex, KLibrary library, KClass enclosingClass, Name name, | 26 abstract class IndexedConstructor |
100 this.parameterStructure, this.asyncMarker, | 27 implements IndexedFunction, ConstructorEntity {} |
101 {bool isStatic: false, this.isExternal: false}) | |
102 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); | |
103 } | |
104 | 28 |
105 abstract class KConstructor extends KFunction implements ConstructorEntity { | 29 abstract class IndexedField implements IndexedMember, FieldEntity {} |
106 final bool isConst; | |
107 | |
108 KConstructor(int memberIndex, KClass enclosingClass, Name name, | |
109 ParameterStructure parameterStructure, {bool isExternal, this.isConst}) | |
110 : super(memberIndex, enclosingClass.library, enclosingClass, name, | |
111 parameterStructure, AsyncMarker.SYNC, | |
112 isExternal: isExternal); | |
113 | |
114 @override | |
115 bool get isConstructor => true; | |
116 | |
117 @override | |
118 bool get isInstanceMember => false; | |
119 | |
120 @override | |
121 bool get isStatic => false; | |
122 | |
123 @override | |
124 bool get isTopLevel => false; | |
125 | |
126 @override | |
127 bool get isFromEnvironmentConstructor => false; | |
128 | |
129 String get _kind => 'constructor'; | |
130 } | |
131 | |
132 class KGenerativeConstructor extends KConstructor { | |
133 KGenerativeConstructor(int constructorIndex, KClass enclosingClass, Name name, | |
134 ParameterStructure parameterStructure, {bool isExternal, bool isConst}) | |
135 : super(constructorIndex, enclosingClass, name, parameterStructure, | |
136 isExternal: isExternal, isConst: isConst); | |
137 | |
138 @override | |
139 bool get isFactoryConstructor => false; | |
140 | |
141 @override | |
142 bool get isGenerativeConstructor => true; | |
143 } | |
144 | |
145 class KFactoryConstructor extends KConstructor { | |
146 @override | |
147 final bool isFromEnvironmentConstructor; | |
148 | |
149 KFactoryConstructor(int memberIndex, KClass enclosingClass, Name name, | |
150 ParameterStructure parameterStructure, | |
151 {bool isExternal, bool isConst, this.isFromEnvironmentConstructor}) | |
152 : super(memberIndex, enclosingClass, name, parameterStructure, | |
153 isExternal: isExternal, isConst: isConst); | |
154 | |
155 @override | |
156 bool get isFactoryConstructor => true; | |
157 | |
158 @override | |
159 bool get isGenerativeConstructor => false; | |
160 } | |
161 | |
162 class KMethod extends KFunction { | |
163 final bool isAbstract; | |
164 | |
165 KMethod(int memberIndex, KLibrary library, KClass enclosingClass, Name name, | |
166 ParameterStructure parameterStructure, AsyncMarker asyncMarker, | |
167 {bool isStatic, bool isExternal, this.isAbstract}) | |
168 : super(memberIndex, library, enclosingClass, name, parameterStructure, | |
169 asyncMarker, | |
170 isStatic: isStatic, isExternal: isExternal); | |
171 | |
172 @override | |
173 bool get isFunction => true; | |
174 | |
175 String get _kind => 'method'; | |
176 } | |
177 | |
178 class KGetter extends KFunction { | |
179 final bool isAbstract; | |
180 | |
181 KGetter(int memberIndex, KLibrary library, KClass enclosingClass, Name name, | |
182 AsyncMarker asyncMarker, | |
183 {bool isStatic, bool isExternal, this.isAbstract}) | |
184 : super(memberIndex, library, enclosingClass, name, | |
185 const ParameterStructure.getter(), asyncMarker, | |
186 isStatic: isStatic, isExternal: isExternal); | |
187 | |
188 @override | |
189 bool get isGetter => true; | |
190 | |
191 String get _kind => 'getter'; | |
192 } | |
193 | |
194 class KSetter extends KFunction { | |
195 final bool isAbstract; | |
196 | |
197 KSetter(int memberIndex, KLibrary library, KClass enclosingClass, Name name, | |
198 {bool isStatic, bool isExternal, this.isAbstract}) | |
199 : super(memberIndex, library, enclosingClass, name, | |
200 const ParameterStructure.setter(), AsyncMarker.SYNC, | |
201 isStatic: isStatic, isExternal: isExternal); | |
202 | |
203 @override | |
204 bool get isAssignable => true; | |
205 | |
206 @override | |
207 bool get isSetter => true; | |
208 | |
209 String get _kind => 'setter'; | |
210 } | |
211 | |
212 class KField extends KMember implements FieldEntity { | |
213 final bool isAssignable; | |
214 final bool isConst; | |
215 | |
216 KField(int memberIndex, KLibrary library, KClass enclosingClass, Name name, | |
217 {bool isStatic, this.isAssignable, this.isConst}) | |
218 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); | |
219 | |
220 @override | |
221 bool get isField => true; | |
222 | |
223 String get _kind => 'field'; | |
224 } | |
225 | |
226 class KTypeVariable implements TypeVariableEntity { | |
227 final Entity typeDeclaration; | |
228 final String name; | |
229 final int index; | |
230 | |
231 KTypeVariable(this.typeDeclaration, this.name, this.index); | |
232 | |
233 String toString() => 'type_variable(${typeDeclaration.name}.$name)'; | |
234 } | |
235 | |
236 class KLocalFunction implements Local { | |
237 final String name; | |
238 final MemberEntity memberContext; | |
239 final Entity executableContext; | |
240 final FunctionType functionType; | |
241 | |
242 KLocalFunction( | |
243 this.name, this.memberContext, this.executableContext, this.functionType); | |
244 | |
245 String toString() => | |
246 'local_function(${memberContext.name}.${name ?? '<anonymous>'})'; | |
247 } | |
OLD | NEW |