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

Side by Side Diff: frog/type.dart

Issue 9222001: cleanup resolveMember and get/set (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: prereview Created 8 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « frog/tests/frog/frog.status ('k') | frog/value.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
None
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 class Type extends Element { 5 class Type extends Element {
6 bool isTested = false; 6 bool isTested = false;
7 bool isChecked = false; 7 bool isChecked = false;
8 bool isWritten = false; 8 bool isWritten = false;
9 9
10 /** 10 /**
11 * For core types (int, String, etc) this is the generated type assertion 11 * For core types (int, String, etc) this is the generated type assertion
12 * function (uses JS "typeof"). This field is null for all other types. 12 * function (uses JS "typeof"). This field is null for all other types.
13 */ 13 */
14 String typeCheckCode; 14 String typeCheckCode;
15 15
16 Member _typeMember; 16 Member _typeMember;
17 17
18 /** Stubs used to call into this method dynamically. */ 18 /** Stubs used to call into this method dynamically. */
19 Map<String, VarMember> varStubs; 19 Map<String, VarMember> varStubs;
20 20
21 /** Cache of [MemberSet]s that have been resolved. */ 21 /** Cache of [Member]s that have been found. */
22 Map<String, MemberSet> _resolvedMembers; 22 Map<String, Member> _foundMembers;
23 23
24 Type(String name): _resolvedMembers = {}, varStubs = {}, super(name, null); 24 Type(String name): _foundMembers = {}, varStubs = {}, super(name, null);
25 25
26 void markUsed() {} 26 void markUsed() {}
27 abstract void genMethod(Member method); 27 abstract void genMethod(Member method);
28 28
29 TypeMember get typeMember() { 29 TypeMember get typeMember() {
30 if (_typeMember == null) { 30 if (_typeMember == null) {
31 _typeMember = new TypeMember(this); 31 _typeMember = new TypeMember(this);
32 } 32 }
33 return _typeMember; 33 return _typeMember;
34 } 34 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 var ret = i.getMember(memberName); 196 var ret = i.getMember(memberName);
197 if (ret != null) { 197 if (ret != null) {
198 return ret; 198 return ret;
199 } 199 }
200 } 200 }
201 } 201 }
202 return world.objectType.getMember(memberName); 202 return world.objectType.getMember(memberName);
203 } 203 }
204 } 204 }
205 205
206 MemberSet resolveMember(String memberName) {
207 MemberSet ret = _resolvedMembers[memberName];
208 if (ret != null) return ret;
209
210 Member member = getMember(memberName);
211 if (member == null) {
212 // TODO(jimhug): Check for members on subtypes given dart's dynamism.
213 return null;
214 }
215
216 // TODO(jimhug): Move this adding subtypes logic to MemberSet?
217 ret = new MemberSet(member);
218 _resolvedMembers[memberName] = ret;
219 if (member.isStatic) {
220 return ret;
221 } else {
222 for (var t in subtypes) {
223 if (!isClass && t.isClass) {
224 // If this is an interface, the actual implementation may
225 // come from a class that does not implement this interface.
226 // TODO(vsm): Use a more efficient lookup strategy.
227 // TODO(jimhug): This is made uglier by need to avoid dups.
228 final m = t.getMember(memberName);
229 if (m != null && ret.members.indexOf(m) == -1) {
230 ret.add(m);
231 }
232 } else {
233 final m = t.members[memberName];
234 if (m != null) ret.add(m);
235 }
236 }
237 return ret;
238 }
239 }
240
241 void ensureSubtypeOf(Type other, SourceSpan span, [bool typeErrors=false]) { 206 void ensureSubtypeOf(Type other, SourceSpan span, [bool typeErrors=false]) {
242 if (!isSubtypeOf(other)) { 207 if (!isSubtypeOf(other)) {
243 var msg = 'type $name is not a subtype of ${other.name}'; 208 var msg = 'type $name is not a subtype of ${other.name}';
244 if (typeErrors) { 209 if (typeErrors) {
245 world.error(msg, span); 210 world.error(msg, span);
246 } else { 211 } else {
247 world.warning(msg, span); 212 world.warning(msg, span);
248 } 213 }
249 } 214 }
250 } 215 }
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 425
461 Map<String, MethodMember> get constructors() { 426 Map<String, MethodMember> get constructors() {
462 world.internalError('no constructors on type parameters yet'); 427 world.internalError('no constructors on type parameters yet');
463 } 428 }
464 429
465 MethodMember getCallMethod() => extendsType.getCallMethod(); 430 MethodMember getCallMethod() => extendsType.getCallMethod();
466 431
467 void genMethod(Member method) { 432 void genMethod(Member method) {
468 extendsType.genMethod(method); 433 extendsType.genMethod(method);
469 } 434 }

error: old chunk mismatch

OLDNEW
« no previous file with comments | « frog/tests/frog/frog.status ('k') | frog/value.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698