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

Side by Side Diff: pkg/compiler/lib/src/resolution/class_members.dart

Issue 2707933002: Tests for `void`.
Patch Set: More tests. Created 3 years, 10 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) 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 '../core_types.dart' show CommonElements;
10 import '../elements/resolution_types.dart'; 11 import '../elements/resolution_types.dart';
11 import '../elements/elements.dart' 12 import '../elements/elements.dart'
12 show 13 show
13 ClassElement, 14 ClassElement,
14 Element, 15 Element,
15 LibraryElement, 16 LibraryElement,
16 Member, 17 Member,
17 MemberElement, 18 MemberElement,
18 MemberSignature, 19 MemberSignature,
19 MixinApplicationElement, 20 MixinApplicationElement,
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 classMembers[name] = declared; 186 classMembers[name] = declared;
186 checkValidOverride(declared, inherited); 187 checkValidOverride(declared, inherited);
187 } 188 }
188 189
189 Name name = new Name(element.name, library); 190 Name name = new Name(element.name, library);
190 if (element.isField) { 191 if (element.isField) {
191 ResolutionDartType type = element.computeType(resolution); 192 ResolutionDartType type = element.computeType(resolution);
192 addDeclaredMember( 193 addDeclaredMember(
193 name, type, new ResolutionFunctionType.synthesized(type)); 194 name, type, new ResolutionFunctionType.synthesized(type));
194 if (!element.isConst && !element.isFinal) { 195 if (!element.isConst && !element.isFinal) {
196 // TODO(floitsch): would be nice to have the voidType directly
197 // on commonElements.
198 ClassElement objectClass = resolution.commonElements.objectClass;
199 ResolutionVoidType voidType = new ResolutionVoidType(objectClass);
195 addDeclaredMember( 200 addDeclaredMember(
196 name.setter, 201 name.setter,
197 type, 202 type,
198 new ResolutionFunctionType.synthesized( 203 new ResolutionFunctionType.synthesized(
199 const ResolutionVoidType(), <ResolutionDartType>[type])); 204 voidType, <ResolutionDartType>[type]));
200 } 205 }
201 } else if (element.isGetter) { 206 } else if (element.isGetter) {
202 ResolutionFunctionType functionType = element.computeType(resolution); 207 ResolutionFunctionType functionType = element.computeType(resolution);
203 ResolutionDartType type = functionType.returnType; 208 ResolutionDartType type = functionType.returnType;
204 addDeclaredMember(name, type, functionType); 209 addDeclaredMember(name, type, functionType);
205 } else if (element.isSetter) { 210 } else if (element.isSetter) {
206 ResolutionFunctionType functionType = element.computeType(resolution); 211 ResolutionFunctionType functionType = element.computeType(resolution);
207 ResolutionDartType type; 212 ResolutionDartType type;
208 if (!functionType.parameterTypes.isEmpty) { 213 if (!functionType.parameterTypes.isEmpty) {
209 type = functionType.parameterTypes.first; 214 type = functionType.parameterTypes.first;
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 } 856 }
852 } 857 }
853 } 858 }
854 859
855 /// If `true` interface members are the non-static class member. 860 /// If `true` interface members are the non-static class member.
856 bool get interfaceMembersAreClassMembers => _interfaceMembersAreClassMembers; 861 bool get interfaceMembersAreClassMembers => _interfaceMembersAreClassMembers;
857 862
858 Map<Name, Member> classMembers; 863 Map<Name, Member> classMembers;
859 Map<Name, MemberSignature> interfaceMembers; 864 Map<Name, MemberSignature> interfaceMembers;
860 865
866 CommonElements commonElements;
867
861 /// Creates the necessary maps and [MembersCreator] for compute members of 868 /// Creates the necessary maps and [MembersCreator] for compute members of
862 /// this class. 869 /// this class.
863 MembersCreator _prepareCreator(Resolution resolution) { 870 MembersCreator _prepareCreator(Resolution resolution) {
864 if (classMembers == null) { 871 if (classMembers == null) {
865 _computeInterfaceMembersAreClassMembers(resolution); 872 _computeInterfaceMembersAreClassMembers(resolution);
866 classMembers = new Map<Name, Member>(); 873 classMembers = new Map<Name, Member>();
867 if (!interfaceMembersAreClassMembers) { 874 if (!interfaceMembersAreClassMembers) {
868 interfaceMembers = new Map<Name, MemberSignature>(); 875 interfaceMembers = new Map<Name, MemberSignature>();
869 } 876 }
870 } 877 }
878 commonElements = resolution.commonElements;
871 return interfaceMembersAreClassMembers 879 return interfaceMembersAreClassMembers
872 ? new ClassMembersCreator( 880 ? new ClassMembersCreator(
873 resolution, this, computedMemberNames, classMembers) 881 resolution, this, computedMemberNames, classMembers)
874 : new InterfaceMembersCreator(resolution, this, computedMemberNames, 882 : new InterfaceMembersCreator(resolution, this, computedMemberNames,
875 classMembers, interfaceMembers); 883 classMembers, interfaceMembers);
876 } 884 }
877 885
878 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[]; 886 static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[];
879 887
880 /// Compute the members by the name [name] for this class. [names] collects 888 /// Compute the members by the name [name] for this class. [names] collects
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 message: "Members have not been fully computed for $this.")); 966 message: "Members have not been fully computed for $this."));
959 if (interfaceMembersAreClassMembers) { 967 if (interfaceMembersAreClassMembers) {
960 classMembers.forEach((_, member) { 968 classMembers.forEach((_, member) {
961 if (!member.isStatic) f(member); 969 if (!member.isStatic) f(member);
962 }); 970 });
963 } else { 971 } else {
964 interfaceMembers.forEach((_, member) => f(member)); 972 interfaceMembers.forEach((_, member) => f(member));
965 } 973 }
966 } 974 }
967 } 975 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698