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 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |