| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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.resolution.compute_members; | 5 library dart2js.resolution.compute_members; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/names.dart' show Identifiers, Names; | 8 import '../common/names.dart' show Identifiers, Names; |
| 9 import '../common/resolution.dart' show Resolution; | 9 import '../common/resolution.dart' show Resolution; |
| 10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
| (...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 classMembers, interfaceMembers); | 869 classMembers, interfaceMembers); |
| 870 } | 870 } |
| 871 | 871 |
| 872 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[]; | 872 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[]; |
| 873 | 873 |
| 874 /// Compute the members by the name [name] for this class. [names] collects | 874 /// Compute the members by the name [name] for this class. [names] collects |
| 875 /// the set of possible variations of [name], including getter, setter and | 875 /// the set of possible variations of [name], including getter, setter and |
| 876 /// and private names. | 876 /// and private names. |
| 877 void computeClassMember( | 877 void computeClassMember( |
| 878 Resolution resolution, String name, Setlet<Name> names) { | 878 Resolution resolution, String name, Setlet<Name> names) { |
| 879 // TODO(johnniwinther): Should we assert that the class has been resolved |
| 880 // instead? |
| 881 ensureResolved(resolution); |
| 879 if (isMemberComputed(name)) return; | 882 if (isMemberComputed(name)) return; |
| 880 if (Name.isPrivateName(name)) { | 883 if (Name.isPrivateName(name)) { |
| 881 names | 884 names |
| 882 ..add(new Name(name, library)) | 885 ..add(new Name(name, library)) |
| 883 ..add(new Name(name, library, isSetter: true)); | 886 ..add(new Name(name, library, isSetter: true)); |
| 884 } | 887 } |
| 885 MembersCreator creator = _prepareCreator(resolution); | 888 MembersCreator creator = _prepareCreator(resolution); |
| 886 creator.computeMembersByName(name, names); | 889 creator.computeMembersByName(name, names); |
| 887 if (computedMemberNames == null) { | 890 if (computedMemberNames == null) { |
| 888 computedMemberNames = _EMPTY_MEMBERS_NAMES; | 891 computedMemberNames = _EMPTY_MEMBERS_NAMES; |
| 889 } | 892 } |
| 890 if (name != Identifiers.call) { | 893 if (name != Identifiers.call) { |
| 891 Setlet<String> set; | 894 Setlet<String> set; |
| 892 if (identical(computedMemberNames, _EMPTY_MEMBERS_NAMES)) { | 895 if (identical(computedMemberNames, _EMPTY_MEMBERS_NAMES)) { |
| 893 computedMemberNames = set = new Setlet<String>(); | 896 computedMemberNames = set = new Setlet<String>(); |
| 894 } else { | 897 } else { |
| 895 set = computedMemberNames; | 898 set = computedMemberNames; |
| 896 } | 899 } |
| 897 set.add(name); | 900 set.add(name); |
| 898 } | 901 } |
| 899 } | 902 } |
| 900 | 903 |
| 901 void computeAllClassMembers(Resolution resolution) { | 904 void computeAllClassMembers(Resolution resolution) { |
| 905 // TODO(johnniwinther): Should we assert that the class has been resolved |
| 906 // instead? |
| 907 ensureResolved(resolution); |
| 902 if (areAllMembersComputed()) return; | 908 if (areAllMembersComputed()) return; |
| 903 MembersCreator creator = _prepareCreator(resolution); | 909 MembersCreator creator = _prepareCreator(resolution); |
| 904 creator.computeAllMembers(); | 910 creator.computeAllMembers(); |
| 905 computedMemberNames = null; | 911 computedMemberNames = null; |
| 906 assert(invariant(this, areAllMembersComputed())); | 912 assert(invariant(this, areAllMembersComputed())); |
| 907 } | 913 } |
| 908 | 914 |
| 909 bool areAllMembersComputed() { | 915 bool areAllMembersComputed() { |
| 910 return computedMemberNames == null && classMembers != null; | 916 return computedMemberNames == null && classMembers != null; |
| 911 } | 917 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 message: "Members have not been fully computed for $this.")); | 952 message: "Members have not been fully computed for $this.")); |
| 947 if (interfaceMembersAreClassMembers) { | 953 if (interfaceMembersAreClassMembers) { |
| 948 classMembers.forEach((_, member) { | 954 classMembers.forEach((_, member) { |
| 949 if (!member.isStatic) f(member); | 955 if (!member.isStatic) f(member); |
| 950 }); | 956 }); |
| 951 } else { | 957 } else { |
| 952 interfaceMembers.forEach((_, member) => f(member)); | 958 interfaceMembers.forEach((_, member) => f(member)); |
| 953 } | 959 } |
| 954 } | 960 } |
| 955 } | 961 } |
| OLD | NEW |