OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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.js_emitter.type_test_registry; | 5 library dart2js.js_emitter.type_test_registry; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../common_elements.dart'; | 8 import '../common_elements.dart'; |
9 import '../elements/elements.dart' show ClassElement, MethodElement; | 9 import '../elements/elements.dart' show ClassElement, MethodElement; |
10 import '../elements/entities.dart'; | 10 import '../elements/entities.dart'; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 | 160 |
161 bool canBeReified(MemberEntity element) { | 161 bool canBeReified(MemberEntity element) { |
162 return (canTearOff(element) || | 162 return (canTearOff(element) || |
163 mirrorsData.isMemberAccessibleByReflection(element)); | 163 mirrorsData.isMemberAccessibleByReflection(element)); |
164 } | 164 } |
165 | 165 |
166 // Find all types referenced from the types of elements that can be | 166 // Find all types referenced from the types of elements that can be |
167 // reflected on 'as functions'. | 167 // reflected on 'as functions'. |
168 liveMembers.where((MemberEntity element) { | 168 liveMembers.where((MemberEntity element) { |
169 return canBeReflectedAsFunction(element) && canBeReified(element); | 169 return canBeReflectedAsFunction(element) && canBeReified(element); |
170 }).forEach((MethodElement function) { | 170 }).forEach((_function) { |
| 171 MethodElement function = _function; |
171 FunctionType type = function.type; | 172 FunctionType type = function.type; |
172 for (ClassEntity cls in _rtiChecks.getReferencedClasses(type)) { | 173 for (ClassEntity cls in _rtiChecks.getReferencedClasses(type)) { |
173 while (cls != null) { | 174 while (cls != null) { |
174 _rtiNeededClasses.add(cls); | 175 _rtiNeededClasses.add(cls); |
175 cls = _elementEnvironment.getSuperClass(cls); | 176 cls = _elementEnvironment.getSuperClass(cls); |
176 } | 177 } |
177 } | 178 } |
178 }); | 179 }); |
179 } | 180 } |
180 | 181 |
181 void computeRequiredTypeChecks(RuntimeTypesChecksBuilder rtiChecksBuilder) { | 182 void computeRequiredTypeChecks(RuntimeTypesChecksBuilder rtiChecksBuilder) { |
182 assert(checkedClasses == null && checkedFunctionTypes == null); | 183 assert(checkedClasses == null && checkedFunctionTypes == null); |
183 | 184 |
184 rtiChecksBuilder.registerImplicitChecks( | 185 rtiChecksBuilder.registerImplicitChecks( |
185 _codegenWorldBuilder, classesUsingTypeVariableTests); | 186 _codegenWorldBuilder, classesUsingTypeVariableTests); |
186 _rtiChecks = rtiChecksBuilder.computeRequiredChecks(_codegenWorldBuilder); | 187 _rtiChecks = rtiChecksBuilder.computeRequiredChecks(_codegenWorldBuilder); |
187 | 188 |
188 checkedClasses = new Set<ClassElement>(); | 189 checkedClasses = new Set<ClassElement>(); |
189 checkedFunctionTypes = new Set<ResolutionFunctionType>(); | 190 checkedFunctionTypes = new Set<ResolutionFunctionType>(); |
190 _codegenWorldBuilder.isChecks.forEach((ResolutionDartType t) { | 191 _codegenWorldBuilder.isChecks.forEach((_t) { |
| 192 ResolutionDartType t = _t; |
191 if (t is ResolutionInterfaceType) { | 193 if (t is ResolutionInterfaceType) { |
192 checkedClasses.add(t.element); | 194 checkedClasses.add(t.element); |
193 } else if (t is ResolutionFunctionType) { | 195 } else if (t is ResolutionFunctionType) { |
194 checkedFunctionTypes.add(t); | 196 checkedFunctionTypes.add(t); |
195 } | 197 } |
196 }); | 198 }); |
197 } | 199 } |
198 } | 200 } |
OLD | NEW |