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

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

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: 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;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 } 301 }
302 throw new SpannableAssertionFailure( 302 throw new SpannableAssertionFailure(
303 cls, "No super method member found for ${name} in $cls."); 303 cls, "No super method member found for ${name} in $cls.");
304 } 304 }
305 305
306 @override 306 @override
307 ConstructorEntity getConstructor(ir.Member node) => _getConstructor(node); 307 ConstructorEntity getConstructor(ir.Member node) => _getConstructor(node);
308 308
309 ConstructorEntity _getConstructor(ir.Member node); 309 ConstructorEntity _getConstructor(ir.Member node);
310 310
311 FunctionEntity getConstructorBody(ir.Constructor node) {
312 ConstructorEntity constructor = getConstructor(node);
313 return _getConstructorBody(node, constructor);
314 }
315
316 FunctionEntity _getConstructorBody(
317 ir.Constructor node, ConstructorEntity constructor);
318
311 ConstructorEntity getSuperConstructor( 319 ConstructorEntity getSuperConstructor(
312 ir.Constructor sourceNode, ir.Member targetNode) { 320 ir.Constructor sourceNode, ir.Member targetNode) {
313 ConstructorEntity source = getConstructor(sourceNode); 321 ConstructorEntity source = getConstructor(sourceNode);
314 ClassEntity sourceClass = source.enclosingClass; 322 ClassEntity sourceClass = source.enclosingClass;
315 ConstructorEntity target = getConstructor(targetNode); 323 ConstructorEntity target = getConstructor(targetNode);
316 ClassEntity targetClass = target.enclosingClass; 324 ClassEntity targetClass = target.enclosingClass;
317 IndexedClass superClass = _getSuperType(sourceClass)?.element; 325 IndexedClass superClass = _getSuperType(sourceClass)?.element;
318 if (superClass == targetClass) { 326 if (superClass == targetClass) {
319 return target; 327 return target;
320 } 328 }
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 } 453 }
446 } 454 }
447 455
448 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) { 456 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) {
449 ClassEnv env = _classEnvs[cls.classIndex]; 457 ClassEnv env = _classEnvs[cls.classIndex];
450 env.forEachConstructor((ir.Member member) { 458 env.forEachConstructor((ir.Member member) {
451 f(getConstructor(member)); 459 f(getConstructor(member));
452 }); 460 });
453 } 461 }
454 462
463 void _forEachConstructorBody(
464 IndexedClass cls, void f(ConstructorBodyEntity member)) {
465 ClassEnv env = _classEnvs[cls.classIndex];
466 env.forEachConstructor((ir.Member member) {
467 IndexedConstructor constructor = getConstructor(member);
468 ConstructorData data = _memberData[constructor.memberIndex];
469 if (data.constructorBody != null) {
470 f(data.constructorBody);
471 }
472 });
473 }
474
455 void _forEachClassMember( 475 void _forEachClassMember(
456 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) { 476 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
457 ClassEnv env = _classEnvs[cls.classIndex]; 477 ClassEnv env = _classEnvs[cls.classIndex];
458 env.forEachMember((ir.Member member) { 478 env.forEachMember((ir.Member member) {
459 f(cls, getMember(member)); 479 f(cls, getMember(member));
460 }); 480 });
461 ClassData data = _classData[cls.classIndex]; 481 ClassData data = _classData[cls.classIndex];
462 _ensureSupertypes(cls, data); 482 _ensureSupertypes(cls, data);
463 if (data.supertype != null) { 483 if (data.supertype != null) {
464 _forEachClassMember(data.supertype.element, f); 484 _forEachClassMember(data.supertype.element, f);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 // TODO(johnniwinther): Convert `node.location` to a [SourceSpan]. 661 // TODO(johnniwinther): Convert `node.location` to a [SourceSpan].
642 throw new SpannableAssertionFailure( 662 throw new SpannableAssertionFailure(
643 NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}."); 663 NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}.");
644 } 664 }
645 _memberData.add(new ConstructorData(node, functionNode)); 665 _memberData.add(new ConstructorData(node, functionNode));
646 _memberList.add(constructor); 666 _memberList.add(constructor);
647 return constructor; 667 return constructor;
648 }); 668 });
649 } 669 }
650 670
671 FunctionEntity _getConstructorBody(
672 ir.Constructor node, covariant IndexedConstructor constructor) {
673 ConstructorData data = _memberData[constructor.memberIndex];
674 if (data.constructorBody == null) {
675 data.constructorBody =
676 createConstructorBody(_memberList.length, constructor);
677 _memberList.add(data.constructorBody);
678 _memberData.add(new FunctionData(node, node.function));
679 }
680 return data.constructorBody;
681 }
682
651 FunctionEntity _getMethod(ir.Procedure node) { 683 FunctionEntity _getMethod(ir.Procedure node) {
652 return _methodMap.putIfAbsent(node, () { 684 return _methodMap.putIfAbsent(node, () {
653 int memberIndex = _memberData.length; 685 int memberIndex = _memberData.length;
654 LibraryEntity library; 686 LibraryEntity library;
655 ClassEntity enclosingClass; 687 ClassEntity enclosingClass;
656 if (node.enclosingClass != null) { 688 if (node.enclosingClass != null) {
657 enclosingClass = _getClass(node.enclosingClass); 689 enclosingClass = _getClass(node.enclosingClass);
658 library = enclosingClass.library; 690 library = enclosingClass.library;
659 } else { 691 } else {
660 library = _getLibrary(node.enclosingLibrary); 692 library = _getLibrary(node.enclosingLibrary);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 831
800 IndexedConstructor createFactoryConstructor( 832 IndexedConstructor createFactoryConstructor(
801 int memberIndex, 833 int memberIndex,
802 ClassEntity enclosingClass, 834 ClassEntity enclosingClass,
803 Name name, 835 Name name,
804 ParameterStructure parameterStructure, 836 ParameterStructure parameterStructure,
805 {bool isExternal, 837 {bool isExternal,
806 bool isConst, 838 bool isConst,
807 bool isFromEnvironmentConstructor}); 839 bool isFromEnvironmentConstructor});
808 840
841 ConstructorBodyEntity createConstructorBody(
842 int memberIndex, ConstructorEntity constructor);
843
809 IndexedFunction createGetter(int memberIndex, LibraryEntity library, 844 IndexedFunction createGetter(int memberIndex, LibraryEntity library,
810 ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker, 845 ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker,
811 {bool isStatic, bool isExternal, bool isAbstract}); 846 {bool isStatic, bool isExternal, bool isAbstract});
812 847
813 IndexedFunction createMethod( 848 IndexedFunction createMethod(
814 int memberIndex, 849 int memberIndex,
815 LibraryEntity library, 850 LibraryEntity library,
816 ClassEntity enclosingClass, 851 ClassEntity enclosingClass,
817 Name name, 852 Name name,
818 ParameterStructure parameterStructure, 853 ParameterStructure parameterStructure,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 {bool isExternal, 905 {bool isExternal,
871 bool isConst, 906 bool isConst,
872 bool isFromEnvironmentConstructor}) { 907 bool isFromEnvironmentConstructor}) {
873 return new KFactoryConstructor( 908 return new KFactoryConstructor(
874 memberIndex, enclosingClass, name, parameterStructure, 909 memberIndex, enclosingClass, name, parameterStructure,
875 isExternal: isExternal, 910 isExternal: isExternal,
876 isConst: isConst, 911 isConst: isConst,
877 isFromEnvironmentConstructor: isFromEnvironmentConstructor); 912 isFromEnvironmentConstructor: isFromEnvironmentConstructor);
878 } 913 }
879 914
915 @override
916 ConstructorBodyEntity createConstructorBody(
917 int memberIndex, ConstructorEntity constructor) {
918 return new KConstructorBody(memberIndex, constructor);
Siggi Cherem (dart-lang) 2017/07/07 20:00:25 I thought we didn't need to have one on the K mode
Johnni Winther 2017/07/10 14:11:33 Now, we don't. [getConstructorBody], [_getConstruc
919 }
920
880 IndexedFunction createGetter(int memberIndex, LibraryEntity library, 921 IndexedFunction createGetter(int memberIndex, LibraryEntity library,
881 ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker, 922 ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker,
882 {bool isStatic, bool isExternal, bool isAbstract}) { 923 {bool isStatic, bool isExternal, bool isAbstract}) {
883 return new KGetter(memberIndex, library, enclosingClass, name, asyncMarker, 924 return new KGetter(memberIndex, library, enclosingClass, name, asyncMarker,
884 isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract); 925 isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
885 } 926 }
886 927
887 IndexedFunction createMethod( 928 IndexedFunction createMethod(
888 int memberIndex, 929 int memberIndex,
889 LibraryEntity library, 930 LibraryEntity library,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 assert(value != null, 1035 assert(value != null,
995 failedAt(field, "Field $field doesn't have a constant initial value.")); 1036 failedAt(field, "Field $field doesn't have a constant initial value."));
996 return value; 1037 return value;
997 } 1038 }
998 1039
999 void forEachParameter(covariant IndexedFunction function, 1040 void forEachParameter(covariant IndexedFunction function,
1000 void f(DartType type, String name, ConstantValue defaultValue)) { 1041 void f(DartType type, String name, ConstantValue defaultValue)) {
1001 FunctionData data = _memberData[function.memberIndex]; 1042 FunctionData data = _memberData[function.memberIndex];
1002 data.forEachParameter(this, f); 1043 data.forEachParameter(this, f);
1003 } 1044 }
1045
1046 String getDeferredUri(ir.LibraryDependency node) {
1047 throw new UnimplementedError(
1048 'KernelToElementMapForBuildingFromBaseMixin.getDeferredUri');
1049 }
1004 } 1050 }
1005 1051
1006 /// Element builder used for creating elements and types corresponding to Kernel 1052 /// Element builder used for creating elements and types corresponding to Kernel
1007 /// IR nodes. 1053 /// IR nodes.
1008 // TODO(johnniwinther): Use this in the JsStrategy 1054 // TODO(johnniwinther): Use this in the JsStrategy
1009 class KernelToElementMapForBuildingImpl extends KernelToElementMapBase 1055 class KernelToElementMapForBuildingImpl extends KernelToElementMapBase
1010 with 1056 with
1011 KernelToElementMapForBuildingMixin, 1057 KernelToElementMapForBuildingMixin,
1012 KernelToElementMapForBuildingFromBaseMixin, 1058 KernelToElementMapForBuildingFromBaseMixin,
1013 ElementCreatorMixin, 1059 ElementCreatorMixin,
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 elementMap._forEachClassMember(cls, f); 1235 elementMap._forEachClassMember(cls, f);
1190 } 1236 }
1191 1237
1192 @override 1238 @override
1193 void forEachConstructor( 1239 void forEachConstructor(
1194 ClassEntity cls, void f(ConstructorEntity constructor)) { 1240 ClassEntity cls, void f(ConstructorEntity constructor)) {
1195 elementMap._forEachConstructor(cls, f); 1241 elementMap._forEachConstructor(cls, f);
1196 } 1242 }
1197 1243
1198 @override 1244 @override
1245 void forEachConstructorBody(
1246 ClassEntity cls, void f(ConstructorBodyEntity constructor)) {
1247 elementMap._forEachConstructorBody(cls, f);
1248 }
1249
1250 @override
1199 void forEachLibraryMember( 1251 void forEachLibraryMember(
1200 LibraryEntity library, void f(MemberEntity member)) { 1252 LibraryEntity library, void f(MemberEntity member)) {
1201 elementMap._forEachLibraryMember(library, f); 1253 elementMap._forEachLibraryMember(library, f);
1202 } 1254 }
1203 1255
1204 @override 1256 @override
1205 MemberEntity lookupLibraryMember(LibraryEntity library, String name, 1257 MemberEntity lookupLibraryMember(LibraryEntity library, String name,
1206 {bool setter: false, bool required: false}) { 1258 {bool setter: false, bool required: false}) {
1207 MemberEntity member = 1259 MemberEntity member =
1208 elementMap.lookupLibraryMember(library, name, setter: setter); 1260 elementMap.lookupLibraryMember(library, name, setter: setter);
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1821 @override 1873 @override
1822 ir.Member getMemberNode(MemberEntity member) { 1874 ir.Member getMemberNode(MemberEntity member) {
1823 return _getMemberNode(member); 1875 return _getMemberNode(member);
1824 } 1876 }
1825 1877
1826 @override 1878 @override
1827 ir.Class getClassNode(ClassEntity cls) { 1879 ir.Class getClassNode(ClassEntity cls) {
1828 return _getClassNode(cls); 1880 return _getClassNode(cls);
1829 } 1881 }
1830 } 1882 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698