| OLD | NEW |
| 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; |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 final BackendHelpers _helpers; | 339 final BackendHelpers _helpers; |
| 340 final BackendImpacts _impacts; | 340 final BackendImpacts _impacts; |
| 341 final CheckedModeHelpers _checkedModeHelpers; | 341 final CheckedModeHelpers _checkedModeHelpers; |
| 342 final NativeData _nativeData; | 342 final NativeData _nativeData; |
| 343 final RuntimeTypesNeed _rtiNeed; | 343 final RuntimeTypesNeed _rtiNeed; |
| 344 final NativeCodegenEnqueuer _nativeCodegenEnqueuer; | 344 final NativeCodegenEnqueuer _nativeCodegenEnqueuer; |
| 345 final Namer _namer; | 345 final Namer _namer; |
| 346 final MirrorsData _mirrorsData; | 346 final MirrorsData _mirrorsData; |
| 347 final OneShotInterceptorData _oneShotInterceptorData; | 347 final OneShotInterceptorData _oneShotInterceptorData; |
| 348 final LookupMapAnalysis _lookupMapAnalysis; | 348 final LookupMapAnalysis _lookupMapAnalysis; |
| 349 final CustomElementsCodegenAnalysis _customElementsCodegenAnalysis; | |
| 350 final RuntimeTypesChecksBuilder _rtiChecksBuilder; | 349 final RuntimeTypesChecksBuilder _rtiChecksBuilder; |
| 351 | 350 |
| 352 CodegenImpactTransformer( | 351 CodegenImpactTransformer( |
| 353 this._options, | 352 this._options, |
| 354 this._elementEnvironment, | 353 this._elementEnvironment, |
| 355 this._helpers, | 354 this._helpers, |
| 356 this._impacts, | 355 this._impacts, |
| 357 this._checkedModeHelpers, | 356 this._checkedModeHelpers, |
| 358 this._nativeData, | 357 this._nativeData, |
| 359 this._rtiNeed, | 358 this._rtiNeed, |
| 360 this._nativeCodegenEnqueuer, | 359 this._nativeCodegenEnqueuer, |
| 361 this._namer, | 360 this._namer, |
| 362 this._mirrorsData, | 361 this._mirrorsData, |
| 363 this._oneShotInterceptorData, | 362 this._oneShotInterceptorData, |
| 364 this._lookupMapAnalysis, | 363 this._lookupMapAnalysis, |
| 365 this._customElementsCodegenAnalysis, | |
| 366 this._rtiChecksBuilder); | 364 this._rtiChecksBuilder); |
| 367 | 365 |
| 368 void onIsCheckForCodegen( | 366 void onIsCheckForCodegen( |
| 369 ResolutionDartType type, TransformedWorldImpact transformed) { | 367 ResolutionDartType type, TransformedWorldImpact transformed) { |
| 370 if (type.isDynamic) return; | 368 if (type.isDynamic) return; |
| 371 type = type.unaliased; | 369 type = type.unaliased; |
| 372 _impacts.typeCheck.registerImpact(transformed, _elementEnvironment); | 370 _impacts.typeCheck.registerImpact(transformed, _elementEnvironment); |
| 373 | 371 |
| 374 bool inCheckedMode = _options.enableTypeAssertions; | 372 bool inCheckedMode = _options.enableTypeAssertions; |
| 375 // [registerIsCheck] is also called for checked mode checks, so we | 373 // [registerIsCheck] is also called for checked mode checks, so we |
| (...skipping 22 matching lines...) Expand all Loading... |
| 398 } | 396 } |
| 399 if (type is ResolutionInterfaceType && | 397 if (type is ResolutionInterfaceType && |
| 400 _nativeData.isNativeClass(type.element)) { | 398 _nativeData.isNativeClass(type.element)) { |
| 401 // We will neeed to add the "$is" and "$as" properties on the | 399 // We will neeed to add the "$is" and "$as" properties on the |
| 402 // JavaScript object prototype, so we make sure | 400 // JavaScript object prototype, so we make sure |
| 403 // [:defineProperty:] is compiled. | 401 // [:defineProperty:] is compiled. |
| 404 _impacts.nativeTypeCheck.registerImpact(transformed, _elementEnvironment); | 402 _impacts.nativeTypeCheck.registerImpact(transformed, _elementEnvironment); |
| 405 } | 403 } |
| 406 } | 404 } |
| 407 | 405 |
| 408 @override | |
| 409 WorldImpact transformCodegenImpact(CodegenImpact impact) { | 406 WorldImpact transformCodegenImpact(CodegenImpact impact) { |
| 410 TransformedWorldImpact transformed = new TransformedWorldImpact(impact); | 407 TransformedWorldImpact transformed = new TransformedWorldImpact(impact); |
| 411 | 408 |
| 412 for (TypeUse typeUse in impact.typeUses) { | 409 for (TypeUse typeUse in impact.typeUses) { |
| 413 ResolutionDartType type = typeUse.type; | 410 ResolutionDartType type = typeUse.type; |
| 414 switch (typeUse.kind) { | 411 switch (typeUse.kind) { |
| 415 case TypeUseKind.INSTANTIATION: | 412 case TypeUseKind.INSTANTIATION: |
| 416 _lookupMapAnalysis.registerInstantiatedType(type); | 413 _lookupMapAnalysis.registerInstantiatedType(type); |
| 417 break; | 414 break; |
| 418 case TypeUseKind.IS_CHECK: | 415 case TypeUseKind.IS_CHECK: |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 classes, _namer); | 451 classes, _namer); |
| 455 } | 452 } |
| 456 | 453 |
| 457 if (impact.usesInterceptor) { | 454 if (impact.usesInterceptor) { |
| 458 if (_nativeCodegenEnqueuer.hasInstantiatedNativeClasses) { | 455 if (_nativeCodegenEnqueuer.hasInstantiatedNativeClasses) { |
| 459 _impacts.interceptorUse | 456 _impacts.interceptorUse |
| 460 .registerImpact(transformed, _elementEnvironment); | 457 .registerImpact(transformed, _elementEnvironment); |
| 461 } | 458 } |
| 462 } | 459 } |
| 463 | 460 |
| 464 for (ClassElement element in impact.typeConstants) { | |
| 465 _customElementsCodegenAnalysis.registerTypeConstant(element); | |
| 466 _lookupMapAnalysis.registerTypeConstant(element); | |
| 467 } | |
| 468 | |
| 469 for (FunctionElement element in impact.asyncMarkers) { | 461 for (FunctionElement element in impact.asyncMarkers) { |
| 470 switch (element.asyncMarker) { | 462 switch (element.asyncMarker) { |
| 471 case AsyncMarker.ASYNC: | 463 case AsyncMarker.ASYNC: |
| 472 _impacts.asyncBody.registerImpact(transformed, _elementEnvironment); | 464 _impacts.asyncBody.registerImpact(transformed, _elementEnvironment); |
| 473 break; | 465 break; |
| 474 case AsyncMarker.SYNC_STAR: | 466 case AsyncMarker.SYNC_STAR: |
| 475 _impacts.syncStarBody | 467 _impacts.syncStarBody |
| 476 .registerImpact(transformed, _elementEnvironment); | 468 .registerImpact(transformed, _elementEnvironment); |
| 477 break; | 469 break; |
| 478 case AsyncMarker.ASYNC_STAR: | 470 case AsyncMarker.ASYNC_STAR: |
| 479 _impacts.asyncStarBody | 471 _impacts.asyncStarBody |
| 480 .registerImpact(transformed, _elementEnvironment); | 472 .registerImpact(transformed, _elementEnvironment); |
| 481 break; | 473 break; |
| 482 } | 474 } |
| 483 } | 475 } |
| 484 | 476 |
| 485 // TODO(johnniwinther): Remove eager registration. | 477 // TODO(johnniwinther): Remove eager registration. |
| 486 return transformed; | 478 return transformed; |
| 487 } | 479 } |
| 488 } | 480 } |
| OLD | NEW |