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 model for elements derived from Kernel IR. |
6 | 6 |
7 import '../elements/elements.dart'; | 7 import '../elements/elements.dart'; |
8 import '../elements/entities.dart'; | 8 import '../elements/entities.dart'; |
9 | 9 |
10 class KLibrary implements LibraryEntity { | 10 class KLibrary implements LibraryEntity { |
11 /// Library index used for fast lookup in [KernelWorldBuilder]. | 11 /// Library index used for fast lookup in [KernelWorldBuilder]. |
12 final int libraryIndex; | 12 final int libraryIndex; |
13 final String name; | 13 final String name; |
| 14 final Uri canonicalUri; |
14 | 15 |
15 KLibrary(this.libraryIndex, this.name); | 16 KLibrary(this.libraryIndex, this.name, this.canonicalUri); |
16 | 17 |
17 String toString() => 'library($name)'; | 18 String toString() => 'library($name)'; |
18 } | 19 } |
19 | 20 |
20 class KClass implements ClassEntity { | 21 class KClass implements ClassEntity { |
21 final KLibrary library; | 22 final KLibrary library; |
22 | 23 |
23 /// Class index used for fast lookup in [KernelWorldBuilder]. | 24 /// Class index used for fast lookup in [KernelWorldBuilder]. |
24 final int classIndex; | 25 final int classIndex; |
25 final String name; | 26 final String name; |
26 | 27 |
27 KClass(this.library, this.classIndex, this.name); | 28 KClass(this.library, this.classIndex, this.name); |
28 | 29 |
29 @override | 30 @override |
30 bool get isClosure => false; | 31 bool get isClosure => false; |
31 | 32 |
32 String toString() => 'class($name)'; | 33 String toString() => 'class($name)'; |
33 } | 34 } |
34 | 35 |
35 abstract class KMember implements MemberEntity { | 36 abstract class KMember implements MemberEntity { |
| 37 /// Member index used for fast lookup in [KernelWorldBuilder]. |
| 38 final int memberIndex; |
36 final KLibrary library; | 39 final KLibrary library; |
37 final KClass enclosingClass; | 40 final KClass enclosingClass; |
38 final Name _name; | 41 final Name _name; |
39 final bool _isStatic; | 42 final bool _isStatic; |
40 | 43 |
41 KMember(this.library, this.enclosingClass, this._name, {bool isStatic: false}) | 44 KMember(this.memberIndex, this.library, this.enclosingClass, this._name, |
| 45 {bool isStatic: false}) |
42 : _isStatic = isStatic; | 46 : _isStatic = isStatic; |
43 | 47 |
44 String get name => _name.text; | 48 String get name => _name.text; |
45 | 49 |
46 @override | 50 @override |
47 bool get isAssignable => false; | 51 bool get isAssignable => false; |
48 | 52 |
49 @override | 53 @override |
| 54 bool get isConst => false; |
| 55 |
| 56 @override |
50 bool get isSetter => false; | 57 bool get isSetter => false; |
51 | 58 |
52 @override | 59 @override |
53 bool get isGetter => false; | 60 bool get isGetter => false; |
54 | 61 |
55 @override | 62 @override |
56 bool get isFunction => false; | 63 bool get isFunction => false; |
57 | 64 |
58 @override | 65 @override |
59 bool get isField => false; | 66 bool get isField => false; |
(...skipping 12 matching lines...) Expand all Loading... |
72 | 79 |
73 String get _kind; | 80 String get _kind; |
74 | 81 |
75 String toString() => | 82 String toString() => |
76 '$_kind(${enclosingClass != null ? '${enclosingClass.name}.' : ''}$name)'; | 83 '$_kind(${enclosingClass != null ? '${enclosingClass.name}.' : ''}$name)'; |
77 } | 84 } |
78 | 85 |
79 abstract class KFunction extends KMember implements FunctionEntity { | 86 abstract class KFunction extends KMember implements FunctionEntity { |
80 final bool isExternal; | 87 final bool isExternal; |
81 | 88 |
82 KFunction(KLibrary library, KClass enclosingClass, Name name, | 89 KFunction(int memberIndex, KLibrary library, KClass enclosingClass, Name name, |
83 {bool isStatic: false, this.isExternal: false}) | 90 {bool isStatic: false, this.isExternal: false}) |
84 : super(library, enclosingClass, name, isStatic: isStatic); | 91 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); |
85 } | 92 } |
86 | 93 |
87 abstract class KConstructor extends KFunction implements ConstructorEntity { | 94 abstract class KConstructor extends KFunction implements ConstructorEntity { |
88 /// Constructor index used for fast lookup in [KernelWorldBuilder]. | 95 final bool isConst; |
89 final int constructorIndex; | |
90 | 96 |
91 KConstructor(this.constructorIndex, KClass enclosingClass, Name name, | 97 KConstructor(int memberIndex, KClass enclosingClass, Name name, |
92 {bool isExternal}) | 98 {bool isExternal, this.isConst}) |
93 : super(enclosingClass.library, enclosingClass, name, | 99 : super(memberIndex, enclosingClass.library, enclosingClass, name, |
94 isExternal: isExternal); | 100 isExternal: isExternal); |
95 | 101 |
96 @override | 102 @override |
97 bool get isConstructor => true; | 103 bool get isConstructor => true; |
98 | 104 |
99 @override | 105 @override |
100 bool get isInstanceMember => false; | 106 bool get isInstanceMember => false; |
101 | 107 |
102 @override | 108 @override |
103 bool get isStatic => false; | 109 bool get isStatic => false; |
104 | 110 |
105 @override | 111 @override |
106 bool get isTopLevel => false; | 112 bool get isTopLevel => false; |
107 | 113 |
108 String get _kind => 'constructor'; | 114 String get _kind => 'constructor'; |
109 } | 115 } |
110 | 116 |
111 class KGenerativeConstructor extends KConstructor { | 117 class KGenerativeConstructor extends KConstructor { |
112 KGenerativeConstructor(int constructorIndex, KClass enclosingClass, Name name, | 118 KGenerativeConstructor(int constructorIndex, KClass enclosingClass, Name name, |
113 {bool isExternal}) | 119 {bool isExternal, bool isConst}) |
114 : super(constructorIndex, enclosingClass, name, isExternal: isExternal); | 120 : super(constructorIndex, enclosingClass, name, |
| 121 isExternal: isExternal, isConst: isConst); |
115 | 122 |
116 @override | 123 @override |
117 bool get isFactoryConstructor => false; | 124 bool get isFactoryConstructor => false; |
118 | 125 |
119 @override | 126 @override |
120 bool get isGenerativeConstructor => true; | 127 bool get isGenerativeConstructor => true; |
121 } | 128 } |
122 | 129 |
123 class KFactoryConstructor extends KConstructor { | 130 class KFactoryConstructor extends KConstructor { |
124 KFactoryConstructor(int constructorIndex, KClass enclosingClass, Name name, | 131 KFactoryConstructor(int memberIndex, KClass enclosingClass, Name name, |
125 {bool isExternal}) | 132 {bool isExternal, bool isConst}) |
126 : super(constructorIndex, enclosingClass, name, isExternal: isExternal); | 133 : super(memberIndex, enclosingClass, name, |
| 134 isExternal: isExternal, isConst: isConst); |
127 | 135 |
128 @override | 136 @override |
129 bool get isFactoryConstructor => true; | 137 bool get isFactoryConstructor => true; |
130 | 138 |
131 @override | 139 @override |
132 bool get isGenerativeConstructor => false; | 140 bool get isGenerativeConstructor => false; |
133 } | 141 } |
134 | 142 |
135 class KMethod extends KFunction { | 143 class KMethod extends KFunction { |
136 KMethod(KLibrary library, KClass enclosingClass, Name name, | 144 KMethod(int memberIndex, KLibrary library, KClass enclosingClass, Name name, |
137 {bool isStatic, bool isExternal}) | 145 {bool isStatic, bool isExternal}) |
138 : super(library, enclosingClass, name, | 146 : super(memberIndex, library, enclosingClass, name, |
139 isStatic: isStatic, isExternal: isExternal); | 147 isStatic: isStatic, isExternal: isExternal); |
140 | 148 |
141 @override | 149 @override |
142 bool get isFunction => true; | 150 bool get isFunction => true; |
143 | 151 |
144 String get _kind => 'method'; | 152 String get _kind => 'method'; |
145 } | 153 } |
146 | 154 |
147 class KGetter extends KFunction { | 155 class KGetter extends KFunction { |
148 KGetter(KLibrary library, KClass enclosingClass, Name name, | 156 KGetter(int memberIndex, KLibrary library, KClass enclosingClass, Name name, |
149 {bool isStatic, bool isExternal}) | 157 {bool isStatic, bool isExternal}) |
150 : super(library, enclosingClass, name, | 158 : super(memberIndex, library, enclosingClass, name, |
151 isStatic: isStatic, isExternal: isExternal); | 159 isStatic: isStatic, isExternal: isExternal); |
152 | 160 |
153 @override | 161 @override |
154 bool get isGetter => true; | 162 bool get isGetter => true; |
155 | 163 |
156 String get _kind => 'getter'; | 164 String get _kind => 'getter'; |
157 } | 165 } |
158 | 166 |
159 class KSetter extends KFunction { | 167 class KSetter extends KFunction { |
160 KSetter(KLibrary library, KClass enclosingClass, Name name, | 168 KSetter(int memberIndex, KLibrary library, KClass enclosingClass, Name name, |
161 {bool isStatic, bool isExternal}) | 169 {bool isStatic, bool isExternal}) |
162 : super(library, enclosingClass, name, | 170 : super(memberIndex, library, enclosingClass, name, |
163 isStatic: isStatic, isExternal: isExternal); | 171 isStatic: isStatic, isExternal: isExternal); |
164 | 172 |
165 @override | 173 @override |
166 bool get isAssignable => true; | 174 bool get isAssignable => true; |
167 | 175 |
168 @override | 176 @override |
169 bool get isSetter => true; | 177 bool get isSetter => true; |
170 | 178 |
171 String get _kind => 'setter'; | 179 String get _kind => 'setter'; |
172 } | 180 } |
173 | 181 |
174 class KField extends KMember implements FieldEntity { | 182 class KField extends KMember implements FieldEntity { |
175 /// Field index used for fast lookup in [KernelWorldBuilder]. | |
176 final int fieldIndex; | |
177 final bool isAssignable; | 183 final bool isAssignable; |
| 184 final bool isConst; |
178 | 185 |
179 KField(this.fieldIndex, KLibrary library, KClass enclosingClass, Name name, | 186 KField(int memberIndex, KLibrary library, KClass enclosingClass, Name name, |
180 {bool isStatic, this.isAssignable}) | 187 {bool isStatic, this.isAssignable, this.isConst}) |
181 : super(library, enclosingClass, name, isStatic: isStatic); | 188 : super(memberIndex, library, enclosingClass, name, isStatic: isStatic); |
182 | 189 |
183 @override | 190 @override |
184 bool get isField => true; | 191 bool get isField => true; |
185 | 192 |
186 String get _kind => 'field'; | 193 String get _kind => 'field'; |
187 } | 194 } |
188 | 195 |
189 class KTypeVariable implements TypeVariableEntity { | 196 class KTypeVariable implements TypeVariableEntity { |
190 final Entity typeDeclaration; | 197 final Entity typeDeclaration; |
191 final String name; | 198 final String name; |
192 final int index; | 199 final int index; |
193 | 200 |
194 KTypeVariable(this.typeDeclaration, this.name, this.index); | 201 KTypeVariable(this.typeDeclaration, this.name, this.index); |
195 | 202 |
196 String toString() => 'type_variable(${typeDeclaration.name}.$name)'; | 203 String toString() => 'type_variable(${typeDeclaration.name}.$name)'; |
197 } | 204 } |
198 | 205 |
199 class KLocalFunction implements Local { | 206 class KLocalFunction implements Local { |
200 final String name; | 207 final String name; |
201 final MemberEntity memberContext; | 208 final MemberEntity memberContext; |
202 final Entity executableContext; | 209 final Entity executableContext; |
203 | 210 |
204 KLocalFunction(this.name, this.memberContext, this.executableContext); | 211 KLocalFunction(this.name, this.memberContext, this.executableContext); |
205 | 212 |
206 String toString() => | 213 String toString() => |
207 'local_function(${memberContext.name}.${name ?? '<anonymous>'})'; | 214 'local_function(${memberContext.name}.${name ?? '<anonymous>'})'; |
208 } | 215 } |
OLD | NEW |