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

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

Issue 1383503002: Add Resolution and Parsing interfaces for computeType, ensureResolved and parseNode. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Add TODOs. Created 5 years, 2 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/names.dart' show 7 import '../common/names.dart' show
8 Identifiers; 8 Identifiers;
9 import '../common/resolution.dart' show
10 Resolution;
9 import '../compiler.dart' show 11 import '../compiler.dart' show
10 Compiler; 12 Compiler;
11 import '../dart_types.dart'; 13 import '../dart_types.dart';
12 import '../diagnostics/diagnostic_listener.dart' show 14 import '../diagnostics/diagnostic_listener.dart' show
13 DiagnosticMessage; 15 DiagnosticMessage;
14 import '../diagnostics/invariant.dart' show 16 import '../diagnostics/invariant.dart' show
15 invariant; 17 invariant;
16 import '../diagnostics/messages.dart' show 18 import '../diagnostics/messages.dart' show
17 MessageKind; 19 MessageKind;
18 import '../elements/elements.dart' show 20 import '../elements/elements.dart' show
(...skipping 21 matching lines...) Expand all
40 new Map<dynamic, Set<MessageKind>>(); 42 new Map<dynamic, Set<MessageKind>>();
41 43
42 MembersCreator(Compiler this.compiler, 44 MembersCreator(Compiler this.compiler,
43 ClassElement this.cls, 45 ClassElement this.cls,
44 Iterable<String> this.computedMemberNames, 46 Iterable<String> this.computedMemberNames,
45 Map<Name, Member> this.classMembers) { 47 Map<Name, Member> this.classMembers) {
46 assert(invariant(cls, cls.isDeclaration, 48 assert(invariant(cls, cls.isDeclaration,
47 message: "Members may only be computed on declarations.")); 49 message: "Members may only be computed on declarations."));
48 } 50 }
49 51
52 Resolution get resolution => compiler.resolution;
53
50 void reportMessage(var marker, MessageKind kind, report()) { 54 void reportMessage(var marker, MessageKind kind, report()) {
51 Set<MessageKind> messages = 55 Set<MessageKind> messages =
52 reportedMessages.putIfAbsent(marker, 56 reportedMessages.putIfAbsent(marker,
53 () => new Set<MessageKind>()); 57 () => new Set<MessageKind>());
54 if (messages.add(kind)) { 58 if (messages.add(kind)) {
55 report(); 59 report();
56 } 60 }
57 } 61 }
58 62
59 bool shouldSkipMember(MemberSignature member) { 63 bool shouldSkipMember(MemberSignature member) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 declared = 191 declared =
188 new DeclaredMember(name, element, thisType, type, functionType); 192 new DeclaredMember(name, element, thisType, type, functionType);
189 } 193 }
190 declaredMembers[name] = declared; 194 declaredMembers[name] = declared;
191 classMembers[name] = declared; 195 classMembers[name] = declared;
192 checkValidOverride(declared, inherited); 196 checkValidOverride(declared, inherited);
193 } 197 }
194 198
195 Name name = new Name(element.name, library); 199 Name name = new Name(element.name, library);
196 if (element.isField) { 200 if (element.isField) {
197 DartType type = element.computeType(compiler); 201 DartType type = element.computeType(resolution);
198 addDeclaredMember(name, type, new FunctionType.synthesized(type)); 202 addDeclaredMember(name, type, new FunctionType.synthesized(type));
199 if (!element.isConst && !element.isFinal) { 203 if (!element.isConst && !element.isFinal) {
200 addDeclaredMember(name.setter, type, 204 addDeclaredMember(name.setter, type,
201 new FunctionType.synthesized( 205 new FunctionType.synthesized(
202 const VoidType(), 206 const VoidType(),
203 <DartType>[type])); 207 <DartType>[type]));
204 } 208 }
205 } else if (element.isGetter) { 209 } else if (element.isGetter) {
206 FunctionType functionType = element.computeType(compiler); 210 FunctionType functionType = element.computeType(resolution);
207 DartType type = functionType.returnType; 211 DartType type = functionType.returnType;
208 addDeclaredMember(name, type, functionType); 212 addDeclaredMember(name, type, functionType);
209 } else if (element.isSetter) { 213 } else if (element.isSetter) {
210 FunctionType functionType = element.computeType(compiler); 214 FunctionType functionType = element.computeType(resolution);
211 DartType type; 215 DartType type;
212 if (!functionType.parameterTypes.isEmpty) { 216 if (!functionType.parameterTypes.isEmpty) {
213 type = functionType.parameterTypes.first; 217 type = functionType.parameterTypes.first;
214 } else { 218 } else {
215 type = const DynamicType(); 219 type = const DynamicType();
216 } 220 }
217 name = name.setter; 221 name = name.setter;
218 addDeclaredMember(name, type, functionType); 222 addDeclaredMember(name, type, functionType);
219 } else { 223 } else {
220 assert(invariant(element, element.isFunction)); 224 assert(invariant(element, element.isFunction));
221 FunctionType type = element.computeType(compiler); 225 FunctionType type = element.computeType(resolution);
222 addDeclaredMember(name, type, type); 226 addDeclaredMember(name, type, type);
223 } 227 }
224 } 228 }
225 229
226 cls.forEachLocalMember(createMember); 230 cls.forEachLocalMember(createMember);
227 if (cls.isPatched) { 231 if (cls.isPatched) {
228 cls.implementation.forEachLocalMember((Element element) { 232 cls.implementation.forEachLocalMember((Element element) {
229 if (element.isDeclaration) { 233 if (element.isDeclaration) {
230 createMember(element); 234 createMember(element);
231 } 235 }
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 message: "Members have not been fully computed for $this.")); 949 message: "Members have not been fully computed for $this."));
946 if (interfaceMembersAreClassMembers) { 950 if (interfaceMembersAreClassMembers) {
947 classMembers.forEach((_, member) { 951 classMembers.forEach((_, member) {
948 if (!member.isStatic) f(member); 952 if (!member.isStatic) f(member);
949 }); 953 });
950 } else { 954 } else {
951 interfaceMembers.forEach((_, member) => f(member)); 955 interfaceMembers.forEach((_, member) => f(member));
952 } 956 }
953 } 957 }
954 } 958 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/class_hierarchy.dart ('k') | pkg/compiler/lib/src/resolution/constructors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698