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

Side by Side Diff: pkg/compiler/lib/src/js_backend/impact_transformer.dart

Issue 2814453005: Merge CommonElements and BackendHelpers! (Closed)
Patch Set: comments and re-merge, take two Created 3 years, 8 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
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 js_backend.backend.impact_transformer; 5 library js_backend.backend.impact_transformer;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common_elements.dart'; 8 import '../common_elements.dart';
9 import '../common/backend_api.dart' show ImpactTransformer; 9 import '../common/backend_api.dart' show ImpactTransformer;
10 import '../common/codegen.dart' show CodegenImpact; 10 import '../common/codegen.dart' show CodegenImpact;
11 import '../common/resolution.dart' show ResolutionImpact; 11 import '../common/resolution.dart' show ResolutionImpact;
12 import '../constants/expressions.dart'; 12 import '../constants/expressions.dart';
13 import '../common_elements.dart' show ElementEnvironment; 13 import '../common_elements.dart' show ElementEnvironment;
14 import '../elements/elements.dart' show AsyncMarker; 14 import '../elements/elements.dart' show AsyncMarker;
15 import '../elements/entities.dart'; 15 import '../elements/entities.dart';
16 import '../elements/resolution_types.dart' show Types; 16 import '../elements/resolution_types.dart' show Types;
17 import '../elements/types.dart'; 17 import '../elements/types.dart';
18 import '../native/enqueue.dart'; 18 import '../native/enqueue.dart';
19 import '../native/native.dart' as native; 19 import '../native/native.dart' as native;
20 import '../options.dart'; 20 import '../options.dart';
21 import '../universe/feature.dart'; 21 import '../universe/feature.dart';
22 import '../universe/use.dart' 22 import '../universe/use.dart'
23 show StaticUse, StaticUseKind, TypeUse, TypeUseKind; 23 show StaticUse, StaticUseKind, TypeUse, TypeUseKind;
24 import '../universe/world_impact.dart' show TransformedWorldImpact, WorldImpact; 24 import '../universe/world_impact.dart' show TransformedWorldImpact, WorldImpact;
25 import '../util/util.dart'; 25 import '../util/util.dart';
26 import 'backend.dart'; 26 import 'backend.dart';
27 import 'backend_helpers.dart';
28 import 'backend_impact.dart'; 27 import 'backend_impact.dart';
29 import 'backend_usage.dart'; 28 import 'backend_usage.dart';
30 import 'checked_mode_helpers.dart'; 29 import 'checked_mode_helpers.dart';
31 import 'custom_elements_analysis.dart'; 30 import 'custom_elements_analysis.dart';
32 import 'interceptor_data.dart'; 31 import 'interceptor_data.dart';
33 import 'lookup_map_analysis.dart'; 32 import 'lookup_map_analysis.dart';
34 import 'mirrors_data.dart'; 33 import 'mirrors_data.dart';
35 import 'namer.dart'; 34 import 'namer.dart';
36 import 'native_data.dart'; 35 import 'native_data.dart';
37 36
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 } 327 }
329 if (type is InterfaceType && _nativeBasicData.isNativeClass(type.element)) { 328 if (type is InterfaceType && _nativeBasicData.isNativeClass(type.element)) {
330 registerImpact(_impacts.nativeTypeCheck); 329 registerImpact(_impacts.nativeTypeCheck);
331 } 330 }
332 } 331 }
333 } 332 }
334 333
335 class CodegenImpactTransformer { 334 class CodegenImpactTransformer {
336 final CompilerOptions _options; 335 final CompilerOptions _options;
337 final ElementEnvironment _elementEnvironment; 336 final ElementEnvironment _elementEnvironment;
338 final BackendHelpers _helpers; 337 final CommonElements _commonElements;
339 final BackendImpacts _impacts; 338 final BackendImpacts _impacts;
340 final CheckedModeHelpers _checkedModeHelpers; 339 final CheckedModeHelpers _checkedModeHelpers;
341 final NativeData _nativeData; 340 final NativeData _nativeData;
342 final BackendUsage _backendUsage; 341 final BackendUsage _backendUsage;
343 final RuntimeTypesNeed _rtiNeed; 342 final RuntimeTypesNeed _rtiNeed;
344 final NativeCodegenEnqueuer _nativeCodegenEnqueuer; 343 final NativeCodegenEnqueuer _nativeCodegenEnqueuer;
345 final Namer _namer; 344 final Namer _namer;
346 final OneShotInterceptorData _oneShotInterceptorData; 345 final OneShotInterceptorData _oneShotInterceptorData;
347 final LookupMapAnalysis _lookupMapAnalysis; 346 final LookupMapAnalysis _lookupMapAnalysis;
348 final RuntimeTypesChecksBuilder _rtiChecksBuilder; 347 final RuntimeTypesChecksBuilder _rtiChecksBuilder;
349 348
350 CodegenImpactTransformer( 349 CodegenImpactTransformer(
351 this._options, 350 this._options,
352 this._elementEnvironment, 351 this._elementEnvironment,
353 this._helpers, 352 this._commonElements,
354 this._impacts, 353 this._impacts,
355 this._checkedModeHelpers, 354 this._checkedModeHelpers,
356 this._nativeData, 355 this._nativeData,
357 this._backendUsage, 356 this._backendUsage,
358 this._rtiNeed, 357 this._rtiNeed,
359 this._nativeCodegenEnqueuer, 358 this._nativeCodegenEnqueuer,
360 this._namer, 359 this._namer,
361 this._oneShotInterceptorData, 360 this._oneShotInterceptorData,
362 this._lookupMapAnalysis, 361 this._lookupMapAnalysis,
363 this._rtiChecksBuilder); 362 this._rtiChecksBuilder);
364 363
365 void onIsCheckForCodegen(DartType type, TransformedWorldImpact transformed) { 364 void onIsCheckForCodegen(DartType type, TransformedWorldImpact transformed) {
366 if (type.isDynamic) return; 365 if (type.isDynamic) return;
367 type = type.unaliased; 366 type = type.unaliased;
368 _impacts.typeCheck.registerImpact(transformed, _elementEnvironment); 367 _impacts.typeCheck.registerImpact(transformed, _elementEnvironment);
369 368
370 bool inCheckedMode = _options.enableTypeAssertions; 369 bool inCheckedMode = _options.enableTypeAssertions;
371 // [registerIsCheck] is also called for checked mode checks, so we 370 // [registerIsCheck] is also called for checked mode checks, so we
372 // need to register checked mode helpers. 371 // need to register checked mode helpers.
373 if (inCheckedMode) { 372 if (inCheckedMode) {
374 // All helpers are added to resolution queue in enqueueHelpers. These 373 // All helpers are added to resolution queue in enqueueHelpers. These
375 // calls to [enqueue] with the resolution enqueuer serve as assertions 374 // calls to [enqueue] with the resolution enqueuer serve as assertions
376 // that the helper was in fact added. 375 // that the helper was in fact added.
377 // TODO(13155): Find a way to enqueue helpers lazily. 376 // TODO(13155): Find a way to enqueue helpers lazily.
378 CheckedModeHelper helper = 377 CheckedModeHelper helper =
379 _checkedModeHelpers.getCheckedModeHelper(type, typeCast: false); 378 _checkedModeHelpers.getCheckedModeHelper(type, typeCast: false);
380 if (helper != null) { 379 if (helper != null) {
381 StaticUse staticUse = helper.getStaticUse(_helpers); 380 StaticUse staticUse = helper.getStaticUse(_commonElements);
382 transformed.registerStaticUse(staticUse); 381 transformed.registerStaticUse(staticUse);
383 } 382 }
384 // We also need the native variant of the check (for DOM types). 383 // We also need the native variant of the check (for DOM types).
385 helper = 384 helper =
386 _checkedModeHelpers.getNativeCheckedModeHelper(type, typeCast: false); 385 _checkedModeHelpers.getNativeCheckedModeHelper(type, typeCast: false);
387 if (helper != null) { 386 if (helper != null) {
388 StaticUse staticUse = helper.getStaticUse(_helpers); 387 StaticUse staticUse = helper.getStaticUse(_commonElements);
389 transformed.registerStaticUse(staticUse); 388 transformed.registerStaticUse(staticUse);
390 } 389 }
391 } 390 }
392 if (!type.treatAsRaw || type.containsTypeVariables) { 391 if (!type.treatAsRaw || type.containsTypeVariables) {
393 _impacts.genericIsCheck.registerImpact(transformed, _elementEnvironment); 392 _impacts.genericIsCheck.registerImpact(transformed, _elementEnvironment);
394 } 393 }
395 if (type is InterfaceType && _nativeData.isNativeClass(type.element)) { 394 if (type is InterfaceType && _nativeData.isNativeClass(type.element)) {
396 // We will neeed to add the "$is" and "$as" properties on the 395 // We will neeed to add the "$is" and "$as" properties on the
397 // JavaScript object prototype, so we make sure 396 // JavaScript object prototype, so we make sure
398 // [:defineProperty:] is compiled. 397 // [:defineProperty:] is compiled.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 _impacts.asyncStarBody 466 _impacts.asyncStarBody
468 .registerImpact(transformed, _elementEnvironment); 467 .registerImpact(transformed, _elementEnvironment);
469 break; 468 break;
470 } 469 }
471 } 470 }
472 471
473 // TODO(johnniwinther): Remove eager registration. 472 // TODO(johnniwinther): Remove eager registration.
474 return transformed; 473 return transformed;
475 } 474 }
476 } 475 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/frequency_namer.dart ('k') | pkg/compiler/lib/src/js_backend/interceptor_data.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698