| 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 |