d5e2fcb430
This CL adds the work done at https://github.com/dart-lang/reify to SDK. The commit that is used for the merge is a2066a68374d49de92ff75f5e1ffc36335fd9451 (Nov 23, 2016). The code is adjusted to respect the changes of the kernel package in SDK since that commit. The reify transformation is run by specifying 'vmreify' target to 'dartk'. The transformation requires its runtime library to present in the program being transformed. The library is found in its default location in SDK checkout if 'dartk' is run from its default location in SDK checkout. To preserve the library in the output, TreeShaker is disabled in 'vmreify' target. The "golden" set of tests is also copied from 'dart-lang/reify' repository, and the appropriate test suite is defined for it. The bash script 'bin/reified_dart' from 'dart-lang/reify' is rewritten as Dart script 'pkg/kernel/bin/reified_dart.dart'. It requires path to 'dartk' and path to SDK. Those are taken from their default locations in SDK if 'reified_dart.dart' is run from its default location in SDK. The added files were formatted using 'dartfmt' with default settings. Additionally, the files were checked with 'dartanalyzer --strong'. The necessary changes were made to fix the error messages. There are some 'hint' and 'error' messages left for some .dart files from the added test cases, but they reflect intentional errors or conventions in those files. R=asgerf@google.com, karlklose@google.com Review-Url: https://codereview.chromium.org/2697873007 .
44 lines
1.7 KiB
Dart
44 lines
1.7 KiB
Dart
// 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) {}
|
|
}
|