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

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2975433002: Assert that we don't mix K and J elements (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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
OLDNEW
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 library dart2js.kernel.element_map; 5 library dart2js.kernel.element_map;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
11 import '../common/resolution.dart'; 11 import '../common/resolution.dart';
12 import '../compile_time_constants.dart'; 12 import '../compile_time_constants.dart';
13 import '../constants/constant_system.dart'; 13 import '../constants/constant_system.dart';
14 import '../constants/constructors.dart'; 14 import '../constants/constructors.dart';
15 import '../constants/evaluation.dart'; 15 import '../constants/evaluation.dart';
16 import '../constants/expressions.dart'; 16 import '../constants/expressions.dart';
17 import '../constants/values.dart'; 17 import '../constants/values.dart';
18 import '../common_elements.dart'; 18 import '../common_elements.dart';
19 import '../elements/elements.dart'; 19 import '../elements/elements.dart';
20 import '../elements/entities.dart'; 20 import '../elements/entities.dart';
21 import '../elements/names.dart'; 21 import '../elements/names.dart';
22 import '../elements/types.dart'; 22 import '../elements/types.dart';
23 import '../environment.dart'; 23 import '../environment.dart';
24 import '../frontend_strategy.dart'; 24 import '../frontend_strategy.dart';
25 import '../js_backend/backend_usage.dart'; 25 import '../js_backend/backend_usage.dart';
26 import '../js_backend/constant_system_javascript.dart'; 26 import '../js_backend/constant_system_javascript.dart';
27 import '../js_backend/interceptor_data.dart'; 27 import '../js_backend/interceptor_data.dart';
28 import '../js_backend/native_data.dart'; 28 import '../js_backend/native_data.dart';
29 import '../js_backend/no_such_method_registry.dart'; 29 import '../js_backend/no_such_method_registry.dart';
30 import '../js_backend/runtime_types.dart';
30 import '../js_model/elements.dart'; 31 import '../js_model/elements.dart';
32 import '../native/enqueue.dart';
31 import '../native/native.dart' as native; 33 import '../native/native.dart' as native;
32 import '../native/resolver.dart'; 34 import '../native/resolver.dart';
33 import '../ordered_typeset.dart'; 35 import '../ordered_typeset.dart';
36 import '../options.dart';
34 import '../universe/class_set.dart'; 37 import '../universe/class_set.dart';
35 import '../universe/selector.dart'; 38 import '../universe/selector.dart';
36 import '../universe/world_builder.dart'; 39 import '../universe/world_builder.dart';
37 import '../world.dart'; 40 import '../world.dart';
38 import '../util/util.dart' show Link, LinkBuilder; 41 import '../util/util.dart' show Link, LinkBuilder;
39 import 'element_map.dart'; 42 import 'element_map.dart';
40 import 'element_map_mixins.dart'; 43 import 'element_map_mixins.dart';
41 import 'elements.dart'; 44 import 'elements.dart';
42 import 'env.dart'; 45 import 'env.dart';
43 import 'kelements.dart'; 46 import 'kelements.dart';
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 List<MemberData> _memberData = <MemberData>[]; 96 List<MemberData> _memberData = <MemberData>[];
94 97
95 KernelToElementMapBase(this.reporter, Environment environment) { 98 KernelToElementMapBase(this.reporter, Environment environment) {
96 _elementEnvironment = new KernelElementEnvironment(this); 99 _elementEnvironment = new KernelElementEnvironment(this);
97 _commonElements = new CommonElements(_elementEnvironment); 100 _commonElements = new CommonElements(_elementEnvironment);
98 _constantEnvironment = new KernelConstantEnvironment(this, environment); 101 _constantEnvironment = new KernelConstantEnvironment(this, environment);
99 _typeConverter = new DartTypeConverter(this); 102 _typeConverter = new DartTypeConverter(this);
100 _types = new _KernelDartTypes(this); 103 _types = new _KernelDartTypes(this);
101 } 104 }
102 105
106 bool checkFamily(Entity entity);
107
103 DartTypes get types => _types; 108 DartTypes get types => _types;
104 109
105 @override 110 @override
106 ElementEnvironment get elementEnvironment => _elementEnvironment; 111 ElementEnvironment get elementEnvironment => _elementEnvironment;
107 112
108 @override 113 @override
109 CommonElements get commonElements => _commonElements; 114 CommonElements get commonElements => _commonElements;
110 115
111 FunctionEntity get _mainFunction { 116 FunctionEntity get _mainFunction {
112 return _env.mainMethod != null ? _getMethod(_env.mainMethod) : null; 117 return _env.mainMethod != null ? _getMethod(_env.mainMethod) : null;
113 } 118 }
114 119
115 LibraryEntity get _mainLibrary { 120 LibraryEntity get _mainLibrary {
116 return _env.mainMethod != null 121 return _env.mainMethod != null
117 ? _getLibrary(_env.mainMethod.enclosingLibrary) 122 ? _getLibrary(_env.mainMethod.enclosingLibrary)
118 : null; 123 : null;
119 } 124 }
120 125
121 Iterable<LibraryEntity> get _libraries; 126 Iterable<LibraryEntity> get _libraries;
122 127
123 LibraryEntity lookupLibrary(Uri uri) { 128 LibraryEntity lookupLibrary(Uri uri) {
124 LibraryEnv libraryEnv = _env.lookupLibrary(uri); 129 LibraryEnv libraryEnv = _env.lookupLibrary(uri);
125 if (libraryEnv == null) return null; 130 if (libraryEnv == null) return null;
126 return _getLibrary(libraryEnv.library, libraryEnv); 131 return _getLibrary(libraryEnv.library, libraryEnv);
127 } 132 }
128 133
129 String _getLibraryName(IndexedLibrary library) { 134 String _getLibraryName(IndexedLibrary library) {
135 assert(checkFamily(library));
130 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 136 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
131 return libraryEnv.library.name ?? ''; 137 return libraryEnv.library.name ?? '';
132 } 138 }
133 139
134 MemberEntity lookupLibraryMember(IndexedLibrary library, String name, 140 MemberEntity lookupLibraryMember(IndexedLibrary library, String name,
135 {bool setter: false}) { 141 {bool setter: false}) {
142 assert(checkFamily(library));
136 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 143 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
137 ir.Member member = libraryEnv.lookupMember(name, setter: setter); 144 ir.Member member = libraryEnv.lookupMember(name, setter: setter);
138 return member != null ? getMember(member) : null; 145 return member != null ? getMember(member) : null;
139 } 146 }
140 147
141 void _forEachLibraryMember( 148 void _forEachLibraryMember(
142 IndexedLibrary library, void f(MemberEntity member)) { 149 IndexedLibrary library, void f(MemberEntity member)) {
150 assert(checkFamily(library));
143 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 151 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
144 libraryEnv.forEachMember((ir.Member node) { 152 libraryEnv.forEachMember((ir.Member node) {
145 f(getMember(node)); 153 f(getMember(node));
146 }); 154 });
147 } 155 }
148 156
149 ClassEntity lookupClass(IndexedLibrary library, String name) { 157 ClassEntity lookupClass(IndexedLibrary library, String name) {
158 assert(checkFamily(library));
150 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 159 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
151 ClassEnv classEnv = libraryEnv.lookupClass(name); 160 ClassEnv classEnv = libraryEnv.lookupClass(name);
152 if (classEnv != null) { 161 if (classEnv != null) {
153 return _getClass(classEnv.cls, classEnv); 162 return _getClass(classEnv.cls, classEnv);
154 } 163 }
155 return null; 164 return null;
156 } 165 }
157 166
158 void _forEachClass(IndexedLibrary library, void f(ClassEntity cls)) { 167 void _forEachClass(IndexedLibrary library, void f(ClassEntity cls)) {
168 assert(checkFamily(library));
159 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 169 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
160 libraryEnv.forEachClass((ClassEnv classEnv) { 170 libraryEnv.forEachClass((ClassEnv classEnv) {
161 if (!classEnv.isUnnamedMixinApplication) { 171 if (!classEnv.isUnnamedMixinApplication) {
162 f(_getClass(classEnv.cls, classEnv)); 172 f(_getClass(classEnv.cls, classEnv));
163 } 173 }
164 }); 174 });
165 } 175 }
166 176
167 MemberEntity lookupClassMember(IndexedClass cls, String name, 177 MemberEntity lookupClassMember(IndexedClass cls, String name,
168 {bool setter: false}) { 178 {bool setter: false}) {
179 assert(checkFamily(cls));
169 ClassEnv classEnv = _classEnvs[cls.classIndex]; 180 ClassEnv classEnv = _classEnvs[cls.classIndex];
170 ir.Member member = classEnv.lookupMember(name, setter: setter); 181 ir.Member member = classEnv.lookupMember(name, setter: setter);
171 return member != null ? getMember(member) : null; 182 return member != null ? getMember(member) : null;
172 } 183 }
173 184
174 ConstructorEntity lookupConstructor(IndexedClass cls, String name) { 185 ConstructorEntity lookupConstructor(IndexedClass cls, String name) {
186 assert(checkFamily(cls));
175 ClassEnv classEnv = _classEnvs[cls.classIndex]; 187 ClassEnv classEnv = _classEnvs[cls.classIndex];
176 ir.Member member = classEnv.lookupConstructor(name); 188 ir.Member member = classEnv.lookupConstructor(name);
177 return member != null ? getConstructor(member) : null; 189 return member != null ? getConstructor(member) : null;
178 } 190 }
179 191
180 @override 192 @override
181 InterfaceType createInterfaceType( 193 InterfaceType createInterfaceType(
182 ir.Class cls, List<ir.DartType> typeArguments) { 194 ir.Class cls, List<ir.DartType> typeArguments) {
183 return new InterfaceType(getClass(cls), getDartTypes(typeArguments)); 195 return new InterfaceType(getClass(cls), getDartTypes(typeArguments));
184 } 196 }
185 197
186 LibraryEntity getLibrary(ir.Library node) => _getLibrary(node); 198 LibraryEntity getLibrary(ir.Library node) => _getLibrary(node);
187 199
188 LibraryEntity _getLibrary(ir.Library node, [LibraryEnv libraryEnv]); 200 LibraryEntity _getLibrary(ir.Library node, [LibraryEnv libraryEnv]);
189 201
190 @override 202 @override
191 ClassEntity getClass(ir.Class node) => _getClass(node); 203 ClassEntity getClass(ir.Class node) => _getClass(node);
192 204
193 ClassEntity _getClass(ir.Class node, [ClassEnv classEnv]); 205 ClassEntity _getClass(ir.Class node, [ClassEnv classEnv]);
194 206
195 InterfaceType _getSuperType(IndexedClass cls) { 207 InterfaceType _getSuperType(IndexedClass cls) {
208 assert(checkFamily(cls));
196 ClassData data = _classData[cls.classIndex]; 209 ClassData data = _classData[cls.classIndex];
197 _ensureSupertypes(cls, data); 210 _ensureSupertypes(cls, data);
198 return data.supertype; 211 return data.supertype;
199 } 212 }
200 213
201 void _ensureThisAndRawType(ClassEntity cls, ClassData data) { 214 void _ensureThisAndRawType(ClassEntity cls, ClassData data) {
215 assert(checkFamily(cls));
202 if (data.thisType == null) { 216 if (data.thisType == null) {
203 ir.Class node = data.cls; 217 ir.Class node = data.cls;
204 // TODO(johnniwinther): Add the type argument to the list literal when we 218 // TODO(johnniwinther): Add the type argument to the list literal when we
205 // no longer use resolution types. 219 // no longer use resolution types.
206 if (node.typeParameters.isEmpty) { 220 if (node.typeParameters.isEmpty) {
207 data.thisType = 221 data.thisType =
208 data.rawType = new InterfaceType(cls, const/*<DartType>*/ []); 222 data.rawType = new InterfaceType(cls, const/*<DartType>*/ []);
209 } else { 223 } else {
210 data.thisType = new InterfaceType( 224 data.thisType = new InterfaceType(
211 cls, 225 cls,
212 new List/*<DartType>*/ .generate(node.typeParameters.length, 226 new List/*<DartType>*/ .generate(node.typeParameters.length,
213 (int index) { 227 (int index) {
214 return new TypeVariableType( 228 return new TypeVariableType(
215 _getTypeVariable(node.typeParameters[index])); 229 _getTypeVariable(node.typeParameters[index]));
216 })); 230 }));
217 data.rawType = new InterfaceType( 231 data.rawType = new InterfaceType(
218 cls, 232 cls,
219 new List/*<DartType>*/ .filled( 233 new List/*<DartType>*/ .filled(
220 node.typeParameters.length, const DynamicType())); 234 node.typeParameters.length, const DynamicType()));
221 } 235 }
222 } 236 }
223 } 237 }
224 238
225 TypeVariableEntity getTypeVariable(ir.TypeParameter node) => 239 TypeVariableEntity getTypeVariable(ir.TypeParameter node) =>
226 _getTypeVariable(node); 240 _getTypeVariable(node);
227 241
228 TypeVariableEntity _getTypeVariable(ir.TypeParameter node); 242 TypeVariableEntity _getTypeVariable(ir.TypeParameter node);
229 243
230 void _ensureSupertypes(ClassEntity cls, ClassData data) { 244 void _ensureSupertypes(ClassEntity cls, ClassData data) {
245 assert(checkFamily(cls));
231 if (data.orderedTypeSet == null) { 246 if (data.orderedTypeSet == null) {
232 _ensureThisAndRawType(cls, data); 247 _ensureThisAndRawType(cls, data);
233 248
234 ir.Class node = data.cls; 249 ir.Class node = data.cls;
235 250
236 if (node.supertype == null) { 251 if (node.supertype == null) {
237 data.orderedTypeSet = new OrderedTypeSet.singleton(data.thisType); 252 data.orderedTypeSet = new OrderedTypeSet.singleton(data.thisType);
238 data.isMixinApplication = false; 253 data.isMixinApplication = false;
239 data.interfaces = const <InterfaceType>[]; 254 data.interfaces = const <InterfaceType>[];
240 } else { 255 } else {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 {bool requireConstant: true}) { 404 {bool requireConstant: true}) {
390 return _constantEnvironment.getConstantValue(constant); 405 return _constantEnvironment.getConstantValue(constant);
391 } 406 }
392 407
393 DartType _substByContext(DartType type, InterfaceType context) { 408 DartType _substByContext(DartType type, InterfaceType context) {
394 return type.subst( 409 return type.subst(
395 context.typeArguments, _getThisType(context.element).typeArguments); 410 context.typeArguments, _getThisType(context.element).typeArguments);
396 } 411 }
397 412
398 InterfaceType _getThisType(IndexedClass cls) { 413 InterfaceType _getThisType(IndexedClass cls) {
414 assert(checkFamily(cls));
399 ClassData data = _classData[cls.classIndex]; 415 ClassData data = _classData[cls.classIndex];
400 _ensureThisAndRawType(cls, data); 416 _ensureThisAndRawType(cls, data);
401 return data.thisType; 417 return data.thisType;
402 } 418 }
403 419
404 InterfaceType _getRawType(IndexedClass cls) { 420 InterfaceType _getRawType(IndexedClass cls) {
421 assert(checkFamily(cls));
405 ClassData data = _classData[cls.classIndex]; 422 ClassData data = _classData[cls.classIndex];
406 _ensureThisAndRawType(cls, data); 423 _ensureThisAndRawType(cls, data);
407 return data.rawType; 424 return data.rawType;
408 } 425 }
409 426
410 FunctionType _getFunctionType(IndexedFunction function) { 427 FunctionType _getFunctionType(IndexedFunction function) {
428 assert(checkFamily(function));
411 FunctionData data = _memberData[function.memberIndex]; 429 FunctionData data = _memberData[function.memberIndex];
412 return data.getFunctionType(this); 430 return data.getFunctionType(this);
413 } 431 }
414 432
415 ClassEntity _getAppliedMixin(IndexedClass cls) { 433 ClassEntity _getAppliedMixin(IndexedClass cls) {
434 assert(checkFamily(cls));
416 ClassData data = _classData[cls.classIndex]; 435 ClassData data = _classData[cls.classIndex];
417 _ensureSupertypes(cls, data); 436 _ensureSupertypes(cls, data);
418 return data.mixedInType?.element; 437 return data.mixedInType?.element;
419 } 438 }
420 439
421 bool _isMixinApplication(IndexedClass cls) { 440 bool _isMixinApplication(IndexedClass cls) {
441 assert(checkFamily(cls));
422 ClassData data = _classData[cls.classIndex]; 442 ClassData data = _classData[cls.classIndex];
423 _ensureSupertypes(cls, data); 443 _ensureSupertypes(cls, data);
424 return data.isMixinApplication; 444 return data.isMixinApplication;
425 } 445 }
426 446
427 bool _isUnnamedMixinApplication(IndexedClass cls) { 447 bool _isUnnamedMixinApplication(IndexedClass cls) {
448 assert(checkFamily(cls));
428 ClassEnv env = _classEnvs[cls.classIndex]; 449 ClassEnv env = _classEnvs[cls.classIndex];
429 return env.isUnnamedMixinApplication; 450 return env.isUnnamedMixinApplication;
430 } 451 }
431 452
432 void _forEachSupertype(IndexedClass cls, void f(InterfaceType supertype)) { 453 void _forEachSupertype(IndexedClass cls, void f(InterfaceType supertype)) {
454 assert(checkFamily(cls));
433 ClassData data = _classData[cls.classIndex]; 455 ClassData data = _classData[cls.classIndex];
434 _ensureSupertypes(cls, data); 456 _ensureSupertypes(cls, data);
435 data.orderedTypeSet.supertypes.forEach(f); 457 data.orderedTypeSet.supertypes.forEach(f);
436 } 458 }
437 459
438 void _forEachMixin(IndexedClass cls, void f(ClassEntity mixin)) { 460 void _forEachMixin(IndexedClass cls, void f(ClassEntity mixin)) {
461 assert(checkFamily(cls));
439 while (cls != null) { 462 while (cls != null) {
440 ClassData data = _classData[cls.classIndex]; 463 ClassData data = _classData[cls.classIndex];
441 _ensureSupertypes(cls, data); 464 _ensureSupertypes(cls, data);
442 if (data.mixedInType != null) { 465 if (data.mixedInType != null) {
443 f(data.mixedInType.element); 466 f(data.mixedInType.element);
444 } 467 }
445 cls = data.supertype?.element; 468 cls = data.supertype?.element;
446 } 469 }
447 } 470 }
448 471
449 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) { 472 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) {
473 assert(checkFamily(cls));
450 ClassEnv env = _classEnvs[cls.classIndex]; 474 ClassEnv env = _classEnvs[cls.classIndex];
451 env.forEachConstructor((ir.Member member) { 475 env.forEachConstructor((ir.Member member) {
452 f(getConstructor(member)); 476 f(getConstructor(member));
453 }); 477 });
454 } 478 }
455 479
456 void _forEachClassMember( 480 void _forEachClassMember(
457 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) { 481 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
482 assert(checkFamily(cls));
458 ClassEnv env = _classEnvs[cls.classIndex]; 483 ClassEnv env = _classEnvs[cls.classIndex];
459 env.forEachMember((ir.Member member) { 484 env.forEachMember((ir.Member member) {
460 f(cls, getMember(member)); 485 f(cls, getMember(member));
461 }); 486 });
462 ClassData data = _classData[cls.classIndex]; 487 ClassData data = _classData[cls.classIndex];
463 _ensureSupertypes(cls, data); 488 _ensureSupertypes(cls, data);
464 if (data.supertype != null) { 489 if (data.supertype != null) {
465 _forEachClassMember(data.supertype.element, f); 490 _forEachClassMember(data.supertype.element, f);
466 } 491 }
467 } 492 }
468 493
469 ConstantConstructor _getConstructorConstant(IndexedConstructor constructor) { 494 ConstantConstructor _getConstructorConstant(IndexedConstructor constructor) {
495 assert(checkFamily(constructor));
470 ConstructorData data = _memberData[constructor.memberIndex]; 496 ConstructorData data = _memberData[constructor.memberIndex];
471 return data.getConstructorConstant(this, constructor); 497 return data.getConstructorConstant(this, constructor);
472 } 498 }
473 499
474 ConstantExpression _getFieldConstant(IndexedField field) { 500 ConstantExpression _getFieldConstant(IndexedField field) {
501 assert(checkFamily(field));
475 FieldData data = _memberData[field.memberIndex]; 502 FieldData data = _memberData[field.memberIndex];
476 return data.getFieldConstant(this, field); 503 return data.getFieldConstant(this, field);
477 } 504 }
478 505
479 InterfaceType _asInstanceOf(InterfaceType type, ClassEntity cls) { 506 InterfaceType _asInstanceOf(InterfaceType type, ClassEntity cls) {
507 assert(checkFamily(cls));
480 OrderedTypeSet orderedTypeSet = _getOrderedTypeSet(type.element); 508 OrderedTypeSet orderedTypeSet = _getOrderedTypeSet(type.element);
481 InterfaceType supertype = 509 InterfaceType supertype =
482 orderedTypeSet.asInstanceOf(cls, _getHierarchyDepth(cls)); 510 orderedTypeSet.asInstanceOf(cls, _getHierarchyDepth(cls));
483 if (supertype != null) { 511 if (supertype != null) {
484 supertype = _substByContext(supertype, type); 512 supertype = _substByContext(supertype, type);
485 } 513 }
486 return supertype; 514 return supertype;
487 } 515 }
488 516
489 OrderedTypeSet _getOrderedTypeSet(IndexedClass cls) { 517 OrderedTypeSet _getOrderedTypeSet(IndexedClass cls) {
518 assert(checkFamily(cls));
490 ClassData data = _classData[cls.classIndex]; 519 ClassData data = _classData[cls.classIndex];
491 _ensureSupertypes(cls, data); 520 _ensureSupertypes(cls, data);
492 return data.orderedTypeSet; 521 return data.orderedTypeSet;
493 } 522 }
494 523
495 int _getHierarchyDepth(IndexedClass cls) { 524 int _getHierarchyDepth(IndexedClass cls) {
525 assert(checkFamily(cls));
496 ClassData data = _classData[cls.classIndex]; 526 ClassData data = _classData[cls.classIndex];
497 _ensureSupertypes(cls, data); 527 _ensureSupertypes(cls, data);
498 return data.orderedTypeSet.maxDepth; 528 return data.orderedTypeSet.maxDepth;
499 } 529 }
500 530
501 Iterable<InterfaceType> _getInterfaces(IndexedClass cls) { 531 Iterable<InterfaceType> _getInterfaces(IndexedClass cls) {
532 assert(checkFamily(cls));
502 ClassData data = _classData[cls.classIndex]; 533 ClassData data = _classData[cls.classIndex];
503 _ensureSupertypes(cls, data); 534 _ensureSupertypes(cls, data);
504 return data.interfaces; 535 return data.interfaces;
505 } 536 }
506 537
507 Spannable _getSpannable(MemberEntity member, ir.Node node) { 538 Spannable _getSpannable(MemberEntity member, ir.Node node) {
508 return member; 539 return member;
509 } 540 }
510 541
511 ir.Member _getMemberNode(covariant IndexedMember member) { 542 ir.Member _getMemberNode(covariant IndexedMember member) {
543 assert(checkFamily(member));
512 return _memberData[member.memberIndex].node; 544 return _memberData[member.memberIndex].node;
513 } 545 }
514 546
515 ir.Class _getClassNode(covariant IndexedClass cls) { 547 ir.Class _getClassNode(covariant IndexedClass cls) {
548 assert(checkFamily(cls));
516 return _classEnvs[cls.classIndex].cls; 549 return _classEnvs[cls.classIndex].cls;
517 } 550 }
518 } 551 }
519 552
520 /// Mixin that implements the abstract methods in [KernelToElementMapBase] by 553 /// Mixin that implements the abstract methods in [KernelToElementMapBase] by
521 /// creating K-model elements. 554 /// creating K-model elements.
522 abstract class ElementCreatorMixin { 555 abstract class ElementCreatorMixin {
523 ProgramEnv get _env; 556 ProgramEnv get _env;
524 List<LibraryEntity> get _libraryList; 557 List<LibraryEntity> get _libraryList;
525 List<LibraryEnv> get _libraryEnvs; 558 List<LibraryEnv> get _libraryEnvs;
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 // [JsStrategy] is the default. 1006 // [JsStrategy] is the default.
974 class KernelToElementMapForImpactImpl2 extends KernelToElementMapBase 1007 class KernelToElementMapForImpactImpl2 extends KernelToElementMapBase
975 with 1008 with
976 KernelToElementMapForImpactMixin, 1009 KernelToElementMapForImpactMixin,
977 KernelToElementMapForImpactImpl, 1010 KernelToElementMapForImpactImpl,
978 ElementCreatorMixin, 1011 ElementCreatorMixin,
979 KElementCreatorMixin { 1012 KElementCreatorMixin {
980 KernelToElementMapForImpactImpl2( 1013 KernelToElementMapForImpactImpl2(
981 DiagnosticReporter reporter, Environment environment) 1014 DiagnosticReporter reporter, Environment environment)
982 : super(reporter, environment); 1015 : super(reporter, environment);
1016
1017 @override
1018 bool checkFamily(Entity entity) {
1019 assert(
1020 '$entity'.startsWith(kElementPrefix),
1021 failedAt(entity,
1022 "Unexpected entity $entity, expected family $kElementPrefix."));
1023 return true;
1024 }
983 } 1025 }
984 1026
985 abstract class KernelToElementMapForBuildingFromBaseMixin 1027 abstract class KernelToElementMapForBuildingFromBaseMixin
986 implements KernelToElementMapForBuilding, KernelToElementMapBase { 1028 implements KernelToElementMapForBuilding, KernelToElementMapBase {
987 @override 1029 @override
988 ConstantValue getFieldConstantValue(ir.Field field) { 1030 ConstantValue getFieldConstantValue(ir.Field field) {
989 // TODO(johnniwinther): Cache the result in [FieldData]. 1031 // TODO(johnniwinther): Cache the result in [FieldData].
990 return getConstantValue(field.initializer, 1032 return getConstantValue(field.initializer,
991 requireConstant: field.isConst, implicitNull: !field.isConst); 1033 requireConstant: field.isConst, implicitNull: !field.isConst);
992 } 1034 }
(...skipping 25 matching lines...) Expand all
1018 with 1060 with
1019 KernelToElementMapForBuildingMixin, 1061 KernelToElementMapForBuildingMixin,
1020 KernelToElementMapForBuildingFromBaseMixin, 1062 KernelToElementMapForBuildingFromBaseMixin,
1021 ElementCreatorMixin, 1063 ElementCreatorMixin,
1022 KElementCreatorMixin 1064 KElementCreatorMixin
1023 implements KernelToWorldBuilder { 1065 implements KernelToWorldBuilder {
1024 KernelToElementMapForBuildingImpl( 1066 KernelToElementMapForBuildingImpl(
1025 DiagnosticReporter reporter, Environment environment) 1067 DiagnosticReporter reporter, Environment environment)
1026 : super(reporter, environment); 1068 : super(reporter, environment);
1027 1069
1070 @override
1071 bool checkFamily(Entity entity) {
1072 assert(
1073 '$entity'.startsWith(kElementPrefix),
1074 failedAt(entity,
1075 "Unexpected entity $entity, expected family $kElementPrefix."));
1076 return true;
1077 }
1078
1028 ConstantEnvironment get constantEnvironment => _constantEnvironment; 1079 ConstantEnvironment get constantEnvironment => _constantEnvironment;
1029 1080
1030 ir.Library getKernelLibrary(KLibrary entity) => 1081 ir.Library getKernelLibrary(KLibrary entity) =>
1031 _libraryEnvs[entity.libraryIndex].library; 1082 _libraryEnvs[entity.libraryIndex].library;
1032 1083
1033 ir.Class getKernelClass(KClass entity) => _classEnvs[entity.classIndex].cls; 1084 ir.Class getKernelClass(KClass entity) => _classEnvs[entity.classIndex].cls;
1034 1085
1035 @override 1086 @override
1036 Spannable getSpannable(MemberEntity member, ir.Node node) { 1087 Spannable getSpannable(MemberEntity member, ir.Node node) {
1037 return _getSpannable(member, node); 1088 return _getSpannable(member, node);
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
1424 @override 1475 @override
1425 String readFromEnvironment(String name) { 1476 String readFromEnvironment(String name) {
1426 return _environment.valueOf(name); 1477 return _environment.valueOf(name);
1427 } 1478 }
1428 } 1479 }
1429 1480
1430 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase { 1481 class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase {
1431 final KernelToElementMapForImpactImpl elementMap; 1482 final KernelToElementMapForImpactImpl elementMap;
1432 1483
1433 KernelResolutionWorldBuilder( 1484 KernelResolutionWorldBuilder(
1485 CompilerOptions options,
1434 this.elementMap, 1486 this.elementMap,
1435 NativeBasicData nativeBasicData, 1487 NativeBasicData nativeBasicData,
1436 NativeDataBuilder nativeDataBuilder, 1488 NativeDataBuilder nativeDataBuilder,
1437 InterceptorDataBuilder interceptorDataBuilder, 1489 InterceptorDataBuilder interceptorDataBuilder,
1438 BackendUsageBuilder backendUsageBuilder, 1490 BackendUsageBuilder backendUsageBuilder,
1491 RuntimeTypesNeedBuilder rtiNeedBuilder,
1492 NativeResolutionEnqueuer nativeResolutionEnqueuer,
1439 SelectorConstraintsStrategy selectorConstraintsStrategy) 1493 SelectorConstraintsStrategy selectorConstraintsStrategy)
1440 : super( 1494 : super(
1495 options,
1441 elementMap.elementEnvironment, 1496 elementMap.elementEnvironment,
1442 elementMap.types, 1497 elementMap.types,
1443 elementMap.commonElements, 1498 elementMap.commonElements,
1444 elementMap._constantEnvironment.constantSystem, 1499 elementMap._constantEnvironment.constantSystem,
1445 nativeBasicData, 1500 nativeBasicData,
1446 nativeDataBuilder, 1501 nativeDataBuilder,
1447 interceptorDataBuilder, 1502 interceptorDataBuilder,
1448 backendUsageBuilder, 1503 backendUsageBuilder,
1504 rtiNeedBuilder,
1505 nativeResolutionEnqueuer,
1449 selectorConstraintsStrategy); 1506 selectorConstraintsStrategy);
1450 1507
1451 @override 1508 @override
1452 Iterable<InterfaceType> getSupertypes(ClassEntity cls) { 1509 Iterable<InterfaceType> getSupertypes(ClassEntity cls) {
1453 return elementMap._getOrderedTypeSet(cls).supertypes; 1510 return elementMap._getOrderedTypeSet(cls).supertypes;
1454 } 1511 }
1455 1512
1456 @override 1513 @override
1457 ClassEntity getSuperClass(ClassEntity cls) { 1514 ClassEntity getSuperClass(ClassEntity cls) {
1458 return elementMap._getSuperType(cls)?.element; 1515 return elementMap._getSuperType(cls)?.element;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 bool checkInvariants(ClassEntity cls, {bool mustBeInstantiated: true}) => 1597 bool checkInvariants(ClassEntity cls, {bool mustBeInstantiated: true}) =>
1541 true; 1598 true;
1542 1599
1543 @override 1600 @override
1544 bool checkClass(ClassEntity cls) => true; 1601 bool checkClass(ClassEntity cls) => true;
1545 1602
1546 @override 1603 @override
1547 bool checkEntity(Entity element) => true; 1604 bool checkEntity(Entity element) => true;
1548 } 1605 }
1549 1606
1550 class KernelClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin { 1607 class KernelClosedWorld extends ClosedWorldBase
1608 with KernelClosedWorldMixin, ClosedWorldRtiNeedMixin {
1551 final KernelToElementMapForImpactImpl elementMap; 1609 final KernelToElementMapForImpactImpl elementMap;
1552 1610
1553 KernelClosedWorld(this.elementMap, 1611 KernelClosedWorld(this.elementMap,
1554 {ElementEnvironment elementEnvironment, 1612 {CompilerOptions options,
1613 ElementEnvironment elementEnvironment,
1555 DartTypes dartTypes, 1614 DartTypes dartTypes,
1556 CommonElements commonElements, 1615 CommonElements commonElements,
1557 ConstantSystem constantSystem, 1616 ConstantSystem constantSystem,
1558 NativeData nativeData, 1617 NativeData nativeData,
1559 InterceptorData interceptorData, 1618 InterceptorData interceptorData,
1560 BackendUsage backendUsage, 1619 BackendUsage backendUsage,
1620 ResolutionWorldBuilder resolutionWorldBuilder,
1621 RuntimeTypesNeedBuilder rtiNeedBuilder,
1561 Set<ClassEntity> implementedClasses, 1622 Set<ClassEntity> implementedClasses,
1623 Iterable<ClassEntity> liveNativeClasses,
1562 Iterable<MemberEntity> liveInstanceMembers, 1624 Iterable<MemberEntity> liveInstanceMembers,
1563 Iterable<MemberEntity> assignedInstanceMembers, 1625 Iterable<MemberEntity> assignedInstanceMembers,
1564 Set<TypedefElement> allTypedefs, 1626 Set<TypedefElement> allTypedefs,
1565 Map<ClassEntity, Set<ClassEntity>> mixinUses, 1627 Map<ClassEntity, Set<ClassEntity>> mixinUses,
1566 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, 1628 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
1567 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, 1629 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
1568 Map<ClassEntity, ClassSet> classSets}) 1630 Map<ClassEntity, ClassSet> classSets})
1569 : super( 1631 : super(
1570 elementEnvironment, 1632 elementEnvironment,
1571 dartTypes, 1633 dartTypes,
1572 commonElements, 1634 commonElements,
1573 constantSystem, 1635 constantSystem,
1574 nativeData, 1636 nativeData,
1575 interceptorData, 1637 interceptorData,
1576 backendUsage, 1638 backendUsage,
1577 implementedClasses, 1639 implementedClasses,
1640 liveNativeClasses,
1578 liveInstanceMembers, 1641 liveInstanceMembers,
1579 assignedInstanceMembers, 1642 assignedInstanceMembers,
1580 allTypedefs, 1643 allTypedefs,
1581 mixinUses, 1644 mixinUses,
1582 typesImplementedBySubclasses, 1645 typesImplementedBySubclasses,
1583 classHierarchyNodes, 1646 classHierarchyNodes,
1584 classSets); 1647 classSets) {
1648 computeRtiNeed(resolutionWorldBuilder, rtiNeedBuilder,
1649 enableTypeAssertions: options.enableTypeAssertions);
1650 }
1585 1651
1586 @override 1652 @override
1587 void registerClosureClass(ClassElement cls) { 1653 void registerClosureClass(ClassElement cls) {
1588 throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); 1654 throw new UnimplementedError('KernelClosedWorld.registerClosureClass');
1589 } 1655 }
1590 } 1656 }
1591 1657
1592 // Interface for testing equivalence of Kernel-based entities. 1658 // Interface for testing equivalence of Kernel-based entities.
1593 class WorldDeconstructionForTesting { 1659 class WorldDeconstructionForTesting {
1594 final KernelToElementMapBase elementMap; 1660 final KernelToElementMapBase elementMap;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1776 _constructorMap[data.node] = newMember; 1842 _constructorMap[data.node] = newMember;
1777 } else { 1843 } else {
1778 _methodMap[data.node] = newMember; 1844 _methodMap[data.node] = newMember;
1779 } 1845 }
1780 } 1846 }
1781 for (int typeVariableIndex = 0; 1847 for (int typeVariableIndex = 0;
1782 typeVariableIndex < _elementMap._typeVariableList.length; 1848 typeVariableIndex < _elementMap._typeVariableList.length;
1783 typeVariableIndex++) {} 1849 typeVariableIndex++) {}
1784 } 1850 }
1785 1851
1852 @override
1853 bool checkFamily(Entity entity) {
1854 assert(
1855 '$entity'.startsWith(jsElementPrefix),
1856 failedAt(entity,
1857 "Unexpected entity $entity, expected family $jsElementPrefix."));
1858 return true;
1859 }
1860
1786 JsToFrontendMap get jsToFrontendMap => _jsToFrontendMap; 1861 JsToFrontendMap get jsToFrontendMap => _jsToFrontendMap;
1787 1862
1788 @override 1863 @override
1789 Spannable getSpannable(MemberEntity member, ir.Node node) { 1864 Spannable getSpannable(MemberEntity member, ir.Node node) {
1790 return _getSpannable(member, node); 1865 return _getSpannable(member, node);
1791 } 1866 }
1792 1867
1793 Iterable<LibraryEntity> get _libraries { 1868 Iterable<LibraryEntity> get _libraries {
1794 return _libraryMap.values; 1869 return _libraryMap.values;
1795 } 1870 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 @override 1914 @override
1840 ir.Member getMemberNode(MemberEntity member) { 1915 ir.Member getMemberNode(MemberEntity member) {
1841 return _getMemberNode(member); 1916 return _getMemberNode(member);
1842 } 1917 }
1843 1918
1844 @override 1919 @override
1845 ir.Class getClassNode(ClassEntity cls) { 1920 ir.Class getClassNode(ClassEntity cls) {
1846 return _getClassNode(cls); 1921 return _getClassNode(cls);
1847 } 1922 }
1848 } 1923 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/js_strategy.dart ('k') | pkg/compiler/lib/src/kernel/kelements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698