| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
None
| OLD | NEW |