| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| library kernel.target.vmreify; |
| |
| import '../ast.dart' show Program; |
| import '../transformations/generic_types_reification.dart' as reify |
| show transformProgram; |
| |
| import 'targets.dart' show TargetFlags; |
| import 'vmcc.dart' as vmcc_target; |
| |
| /// Specializes the kernel IR to the Dart VM with reified generic types. |
| class VmGenericTypesReifiedTarget extends vmcc_target.VmClosureConvertedTarget { |
| VmGenericTypesReifiedTarget(TargetFlags flags) : super(flags); |
| |
| @override |
| String get name => "vmreify"; |
| |
| // This is the order that bootstrap libraries are loaded according to |
| // `runtime/vm/object_store.h`. |
| List<String> get extraRequiredLibraries { |
| return new List<String>.from(super.extraRequiredLibraries) |
| ..add("${flags.kernelRuntime.resolve('reify/types.dart')}") |
| ..add("${flags.kernelRuntime.resolve('reify/declarations.dart')}") |
| ..add("${flags.kernelRuntime.resolve('reify/interceptors.dart')}"); |
| } |
| |
| @override |
| void performGlobalTransformations(Program program) { |
| super.performGlobalTransformations(program); |
| // TODO(dmitryas) this transformation should be made modular |
| reify.transformProgram(program); |
| } |
| |
| // Disable tree shaking for Generic Types Reification. There are some runtime |
| // libraries that are required for the transformation and are shaken off, |
| // because they aren't invoked from the program being transformed prior to |
| // the transformation. |
| // TODO(dmitryas): remove this when the libraries are in dart:_internal |
| @override |
| void performTreeShaking(Program program) {} |
| |
| // Here we disable Erasure pass of VmTarget class. The information deleted by |
| // the Erasure pass is required for Generic Type Reification. Also, reify |
| // transformation also performs its own Erasure pass. |
| @override |
| void performErasure(Program program) {} |
| } |