| 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 [Member]s that have been found. */ | 21 /** Cache of [MemberSet]s that have been resolved. */ |
| 22 Map<String, Member> _foundMembers; | 22 Map<String, MemberSet> _resolvedMembers; |
| 23 | 23 |
| 24 Type(String name): _foundMembers = {}, varStubs = {}, super(name, null); | 24 Type(String name): _resolvedMembers = {}, 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 |
| 206 void ensureSubtypeOf(Type other, SourceSpan span, [bool typeErrors=false]) { | 241 void ensureSubtypeOf(Type other, SourceSpan span, [bool typeErrors=false]) { |
| 207 if (!isSubtypeOf(other)) { | 242 if (!isSubtypeOf(other)) { |
| 208 var msg = 'type $name is not a subtype of ${other.name}'; | 243 var msg = 'type $name is not a subtype of ${other.name}'; |
| 209 if (typeErrors) { | 244 if (typeErrors) { |
| 210 world.error(msg, span); | 245 world.error(msg, span); |
| 211 } else { | 246 } else { |
| 212 world.warning(msg, span); | 247 world.warning(msg, span); |
| 213 } | 248 } |
| 214 } | 249 } |
| 215 } | 250 } |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 | 460 |
| 426 Map<String, MethodMember> get constructors() { | 461 Map<String, MethodMember> get constructors() { |
| 427 world.internalError('no constructors on type parameters yet'); | 462 world.internalError('no constructors on type parameters yet'); |
| 428 } | 463 } |
| 429 | 464 |
| 430 MethodMember getCallMethod() => extendsType.getCallMethod(); | 465 MethodMember getCallMethod() => extendsType.getCallMethod(); |
| 431 | 466 |
| 432 void genMethod(Member method) { | 467 void genMethod(Member method) { |
| 433 extendsType.genMethod(method); | 468 extendsType.genMethod(method); |
| 434 } | 469 } |
error: old chunk mismatch |
None
| OLD | NEW |