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

Side by Side Diff: pkg/compiler/lib/src/native/enqueue.dart

Issue 2975433002: Assert that we don't mix K and J elements (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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
« no previous file with comments | « pkg/compiler/lib/src/native/behavior.dart ('k') | pkg/compiler/lib/src/native/resolver.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 import '../common_elements.dart' show CommonElements, ElementEnvironment; 5 import '../common_elements.dart' show CommonElements, ElementEnvironment;
6 import '../elements/entities.dart'; 6 import '../elements/entities.dart';
7 import '../elements/types.dart'; 7 import '../elements/types.dart';
8 import '../js_backend/backend_usage.dart' show BackendUsageBuilder; 8 import '../js_backend/backend_usage.dart' show BackendUsageBuilder;
9 import '../js_backend/native_data.dart' show NativeData; 9 import '../js_backend/native_data.dart' show NativeData;
10 import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter; 10 import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 CommonElements commonElements, 196 CommonElements commonElements,
197 DartTypes dartTypes, 197 DartTypes dartTypes,
198 this._backendUsageBuilder, 198 this._backendUsageBuilder,
199 this._nativeClassFinder) 199 this._nativeClassFinder)
200 : super(options, elementEnvironment, commonElements, dartTypes); 200 : super(options, elementEnvironment, commonElements, dartTypes);
201 201
202 Iterable<ClassEntity> get nativeClassesForTesting => _nativeClasses; 202 Iterable<ClassEntity> get nativeClassesForTesting => _nativeClasses;
203 203
204 Iterable<ClassEntity> get registeredClassesForTesting => _registeredClasses; 204 Iterable<ClassEntity> get registeredClassesForTesting => _registeredClasses;
205 205
206 Iterable<ClassEntity> get liveNativeClasses => _registeredClasses;
207
206 void _registerBackendUse(FunctionEntity element) { 208 void _registerBackendUse(FunctionEntity element) {
207 _backendUsageBuilder.registerBackendFunctionUse(element); 209 _backendUsageBuilder.registerBackendFunctionUse(element);
208 _backendUsageBuilder.registerGlobalFunctionDependency(element); 210 _backendUsageBuilder.registerGlobalFunctionDependency(element);
209 } 211 }
210 212
211 WorldImpact processNativeClasses(Iterable<LibraryEntity> libraries) { 213 WorldImpact processNativeClasses(Iterable<LibraryEntity> libraries) {
212 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl(); 214 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
213 Iterable<ClassEntity> nativeClasses = 215 Iterable<ClassEntity> nativeClasses =
214 _nativeClassFinder.computeNativeClasses(libraries); 216 _nativeClassFinder.computeNativeClasses(libraries);
215 _nativeClasses.addAll(nativeClasses); 217 _nativeClasses.addAll(nativeClasses);
216 _unusedClasses.addAll(nativeClasses); 218 _unusedClasses.addAll(nativeClasses);
217 if (!enableLiveTypeAnalysis) { 219 if (!enableLiveTypeAnalysis) {
218 _registerTypeUses(impactBuilder, _nativeClasses, 'forced'); 220 _registerTypeUses(impactBuilder, _nativeClasses, 'forced');
219 } 221 }
220 return impactBuilder; 222 return impactBuilder;
221 } 223 }
222 224
223 void logSummary(void log(String message)) { 225 void logSummary(void log(String message)) {
224 super.logSummary(log); 226 super.logSummary(log);
225 log('Resolved ${_registeredClasses.length} native elements used, ' 227 log('Resolved ${_registeredClasses.length} native elements used, '
226 '${_unusedClasses.length} native elements dead.'); 228 '${_unusedClasses.length} native elements dead.');
227 } 229 }
228 } 230 }
229 231
230 class NativeCodegenEnqueuer extends NativeEnqueuerBase { 232 class NativeCodegenEnqueuer extends NativeEnqueuerBase {
231 final CodeEmitterTask _emitter; 233 final CodeEmitterTask _emitter;
232 final NativeResolutionEnqueuer _resolutionEnqueuer; 234 final Iterable<ClassEntity> _nativeClasses;
233 final NativeData _nativeData; 235 final NativeData _nativeData;
234 236
235 final Set<ClassEntity> _doneAddSubtypes = new Set<ClassEntity>(); 237 final Set<ClassEntity> _doneAddSubtypes = new Set<ClassEntity>();
236 238
237 NativeCodegenEnqueuer( 239 NativeCodegenEnqueuer(
238 CompilerOptions options, 240 CompilerOptions options,
239 ElementEnvironment elementEnvironment, 241 ElementEnvironment elementEnvironment,
240 CommonElements commonElements, 242 CommonElements commonElements,
241 DartTypes dartTypes, 243 DartTypes dartTypes,
242 this._emitter, 244 this._emitter,
243 this._resolutionEnqueuer, 245 this._nativeClasses,
244 this._nativeData) 246 this._nativeData)
245 : super(options, elementEnvironment, commonElements, dartTypes); 247 : super(options, elementEnvironment, commonElements, dartTypes);
246 248
247 WorldImpact processNativeClasses(Iterable<LibraryEntity> libraries) { 249 WorldImpact processNativeClasses(Iterable<LibraryEntity> libraries) {
248 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl(); 250 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
249 _unusedClasses.addAll(_resolutionEnqueuer._nativeClasses); 251 _unusedClasses.addAll(_nativeClasses);
250 252
251 if (!enableLiveTypeAnalysis) { 253 if (!enableLiveTypeAnalysis) {
252 _registerTypeUses( 254 _registerTypeUses(impactBuilder, _nativeClasses, 'forced');
253 impactBuilder, _resolutionEnqueuer._nativeClasses, 'forced');
254 } 255 }
255 256
256 // HACK HACK - add all the resolved classes. 257 // HACK HACK - add all the resolved classes.
257 Set<ClassEntity> matchingClasses = new Set<ClassEntity>(); 258 Set<ClassEntity> matchingClasses = new Set<ClassEntity>();
258 for (ClassEntity classElement in _resolutionEnqueuer._registeredClasses) { 259 for (ClassEntity classElement in _nativeClasses) {
259 if (_unusedClasses.contains(classElement)) { 260 if (_unusedClasses.contains(classElement)) {
260 matchingClasses.add(classElement); 261 matchingClasses.add(classElement);
261 } 262 }
262 } 263 }
263 if (matchingClasses.isNotEmpty && _registeredClasses.isEmpty) { 264 if (matchingClasses.isNotEmpty && _registeredClasses.isEmpty) {
264 matchingClasses.addAll(_onFirstNativeClass(impactBuilder)); 265 matchingClasses.addAll(_onFirstNativeClass(impactBuilder));
265 } 266 }
266 _registerTypeUses(impactBuilder, matchingClasses, 'was resolved'); 267 _registerTypeUses(impactBuilder, matchingClasses, 'was resolved');
267 return impactBuilder; 268 return impactBuilder;
268 } 269 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 emitter.directSubtypes.putIfAbsent(superclass, () => <ClassEntity>[]); 308 emitter.directSubtypes.putIfAbsent(superclass, () => <ClassEntity>[]);
308 directSubtypes.add(cls); 309 directSubtypes.add(cls);
309 } 310 }
310 311
311 void logSummary(void log(String message)) { 312 void logSummary(void log(String message)) {
312 super.logSummary(log); 313 super.logSummary(log);
313 log('Compiled ${_registeredClasses.length} native classes, ' 314 log('Compiled ${_registeredClasses.length} native classes, '
314 '${_unusedClasses.length} native classes omitted.'); 315 '${_unusedClasses.length} native classes omitted.');
315 } 316 }
316 } 317 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/native/behavior.dart ('k') | pkg/compiler/lib/src/native/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698