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

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

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: Skip non-live constructor bodies 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
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/env.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 } 470 }
471 471
472 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) { 472 void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) {
473 assert(checkFamily(cls)); 473 assert(checkFamily(cls));
474 ClassEnv env = _classEnvs[cls.classIndex]; 474 ClassEnv env = _classEnvs[cls.classIndex];
475 env.forEachConstructor((ir.Member member) { 475 env.forEachConstructor((ir.Member member) {
476 f(getConstructor(member)); 476 f(getConstructor(member));
477 }); 477 });
478 } 478 }
479 479
480 void _forEachConstructorBody(
481 IndexedClass cls, void f(ConstructorBodyEntity member)) {
482 throw new UnsupportedError(
483 'KernelToElementMapBase._forEachConstructorBody');
484 }
485
480 void _forEachClassMember( 486 void _forEachClassMember(
481 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) { 487 IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
482 assert(checkFamily(cls)); 488 assert(checkFamily(cls));
483 ClassEnv env = _classEnvs[cls.classIndex]; 489 ClassEnv env = _classEnvs[cls.classIndex];
484 env.forEachMember((ir.Member member) { 490 env.forEachMember((ir.Member member) {
485 f(cls, getMember(member)); 491 f(cls, getMember(member));
486 }); 492 });
487 ClassData data = _classData[cls.classIndex]; 493 ClassData data = _classData[cls.classIndex];
488 _ensureSupertypes(cls, data); 494 _ensureSupertypes(cls, data);
489 if (data.supertype != null) { 495 if (data.supertype != null) {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 } 658 }
653 } 659 }
654 } 660 }
655 throw new UnsupportedError('Unsupported type parameter type node $node.'); 661 throw new UnsupportedError('Unsupported type parameter type node $node.');
656 }); 662 });
657 } 663 }
658 664
659 ConstructorEntity _getConstructor(ir.Member node) { 665 ConstructorEntity _getConstructor(ir.Member node) {
660 return _constructorMap.putIfAbsent(node, () { 666 return _constructorMap.putIfAbsent(node, () {
661 int memberIndex = _memberData.length; 667 int memberIndex = _memberData.length;
662 KConstructor constructor; 668 ConstructorEntity constructor;
663 KClass enclosingClass = _getClass(node.enclosingClass); 669 ClassEntity enclosingClass = _getClass(node.enclosingClass);
664 Name name = getName(node.name); 670 Name name = getName(node.name);
665 bool isExternal = node.isExternal; 671 bool isExternal = node.isExternal;
666 672
667 ir.FunctionNode functionNode; 673 ir.FunctionNode functionNode;
668 if (node is ir.Constructor) { 674 if (node is ir.Constructor) {
669 functionNode = node.function; 675 functionNode = node.function;
670 constructor = createGenerativeConstructor(memberIndex, enclosingClass, 676 constructor = createGenerativeConstructor(memberIndex, enclosingClass,
671 name, _getParameterStructure(functionNode), 677 name, _getParameterStructure(functionNode),
672 isExternal: isExternal, isConst: node.isConst); 678 isExternal: isExternal, isConst: node.isConst);
673 } else if (node is ir.Procedure) { 679 } else if (node is ir.Procedure) {
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 elementMap._forEachClassMember(cls, f); 1152 elementMap._forEachClassMember(cls, f);
1147 } 1153 }
1148 1154
1149 @override 1155 @override
1150 void forEachConstructor( 1156 void forEachConstructor(
1151 ClassEntity cls, void f(ConstructorEntity constructor)) { 1157 ClassEntity cls, void f(ConstructorEntity constructor)) {
1152 elementMap._forEachConstructor(cls, f); 1158 elementMap._forEachConstructor(cls, f);
1153 } 1159 }
1154 1160
1155 @override 1161 @override
1162 void forEachConstructorBody(
1163 ClassEntity cls, void f(ConstructorBodyEntity constructor)) {
1164 elementMap._forEachConstructorBody(cls, f);
1165 }
1166
1167 @override
1156 void forEachLibraryMember( 1168 void forEachLibraryMember(
1157 LibraryEntity library, void f(MemberEntity member)) { 1169 LibraryEntity library, void f(MemberEntity member)) {
1158 elementMap._forEachLibraryMember(library, f); 1170 elementMap._forEachLibraryMember(library, f);
1159 } 1171 }
1160 1172
1161 @override 1173 @override
1162 MemberEntity lookupLibraryMember(LibraryEntity library, String name, 1174 MemberEntity lookupLibraryMember(LibraryEntity library, String name,
1163 {bool setter: false, bool required: false}) { 1175 {bool setter: false, bool required: false}) {
1164 MemberEntity member = 1176 MemberEntity member =
1165 elementMap.lookupLibraryMember(library, name, setter: setter); 1177 elementMap.lookupLibraryMember(library, name, setter: setter);
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 return function; 1822 return function;
1811 }*/ 1823 }*/
1812 1824
1813 @override 1825 @override
1814 ConstructorEntity _getConstructor(ir.Member node) { 1826 ConstructorEntity _getConstructor(ir.Member node) {
1815 ConstructorEntity constructor = _constructorMap[node]; 1827 ConstructorEntity constructor = _constructorMap[node];
1816 assert(constructor != null, "No constructor entity for $node"); 1828 assert(constructor != null, "No constructor entity for $node");
1817 return constructor; 1829 return constructor;
1818 } 1830 }
1819 1831
1832 FunctionEntity getConstructorBody(ir.Constructor node) {
1833 ConstructorEntity constructor = getConstructor(node);
1834 return _getConstructorBody(node, constructor);
1835 }
1836
1837 FunctionEntity _getConstructorBody(
1838 ir.Constructor node, covariant IndexedConstructor constructor) {
1839 ConstructorData data = _memberData[constructor.memberIndex];
1840 if (data.constructorBody == null) {
1841 data.constructorBody =
1842 createConstructorBody(_memberList.length, constructor);
1843 _memberList.add(data.constructorBody);
1844 _memberData.add(new FunctionData(node, node.function));
1845 }
1846 return data.constructorBody;
1847 }
1848
1849 ConstructorBodyEntity createConstructorBody(
1850 int memberIndex, ConstructorEntity constructor);
1851
1820 @override 1852 @override
1821 ir.Member getMemberNode(MemberEntity member) { 1853 ir.Member getMemberNode(MemberEntity member) {
1822 return _getMemberNode(member); 1854 return _getMemberNode(member);
1823 } 1855 }
1824 1856
1825 @override 1857 @override
1826 ir.Class getClassNode(ClassEntity cls) { 1858 ir.Class getClassNode(ClassEntity cls) {
1827 return _getClassNode(cls); 1859 return _getClassNode(cls);
1828 } 1860 }
1829 1861
(...skipping 15 matching lines...) Expand all
1845 assert(value != null, 1877 assert(value != null,
1846 failedAt(field, "Field $field doesn't have a constant initial value.")); 1878 failedAt(field, "Field $field doesn't have a constant initial value."));
1847 return value; 1879 return value;
1848 } 1880 }
1849 1881
1850 void forEachParameter(covariant IndexedFunction function, 1882 void forEachParameter(covariant IndexedFunction function,
1851 void f(DartType type, String name, ConstantValue defaultValue)) { 1883 void f(DartType type, String name, ConstantValue defaultValue)) {
1852 FunctionData data = _memberData[function.memberIndex]; 1884 FunctionData data = _memberData[function.memberIndex];
1853 data.forEachParameter(this, f); 1885 data.forEachParameter(this, f);
1854 } 1886 }
1887
1888 void _forEachConstructorBody(
1889 IndexedClass cls, void f(ConstructorBodyEntity member)) {
1890 ClassEnv env = _classEnvs[cls.classIndex];
1891 env.forEachConstructor((ir.Member member) {
1892 IndexedConstructor constructor = _constructorMap[member];
1893 if (constructor == null) {
1894 // The constructor is not live.
1895 return;
1896 }
1897 ConstructorData data = _memberData[constructor.memberIndex];
1898 if (data.constructorBody != null) {
1899 f(data.constructorBody);
1900 }
1901 });
1902 }
1903
1904 String getDeferredUri(ir.LibraryDependency node) {
1905 throw new UnimplementedError('JsKernelToElementMap.getDeferredUri');
1906 }
1855 } 1907 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/env.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698