34fb48bb8a
Migrates libraries dependent only on already migrated libraries. Change-Id: I0e85ee8dbc2afce031b92e0009e71c206a55af28 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/179502 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Jens Johansen <jensj@google.com>
112 lines
3.4 KiB
Dart
112 lines
3.4 KiB
Dart
// Copyright (c) 2018, 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.
|
|
|
|
// @dart = 2.9
|
|
|
|
import 'dart:io' show File;
|
|
|
|
import 'package:async_helper/async_helper.dart' show asyncTest;
|
|
|
|
import 'package:front_end/src/api_prototype/compiler_options.dart'
|
|
show CompilerOptions;
|
|
|
|
import 'package:front_end/src/api_prototype/kernel_generator.dart'
|
|
show kernelForModule;
|
|
|
|
import 'package:front_end/src/api_prototype/memory_file_system.dart'
|
|
show MemoryFileSystem;
|
|
|
|
import 'package:front_end/src/base/processed_options.dart'
|
|
show ProcessedOptions;
|
|
|
|
import 'package:front_end/src/compute_platform_binaries_location.dart'
|
|
show computePlatformBinariesLocation;
|
|
|
|
import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
|
|
|
|
import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
|
|
|
|
import 'package:front_end/src/fasta/kernel/verifier.dart' show verifyComponent;
|
|
|
|
import 'package:kernel/ast.dart' show Component;
|
|
|
|
const Map<String, String> files = const <String, String>{
|
|
"repro.dart": """
|
|
|
|
import 'lib.dart';
|
|
|
|
abstract class M<M_K, M_V> implements Map<M_K, Set<M_V>> {}
|
|
|
|
abstract class C<C_K, C_V> extends UnmodifiableMapView<C_K, Set<C_V>>
|
|
with M<C_K, C_V> {
|
|
C._() : super(null);
|
|
}
|
|
""",
|
|
"lib.dart": """abstract class MapView<K, V> {
|
|
const MapView(Map<K, V> map);
|
|
}
|
|
|
|
abstract class _UnmodifiableMapMixin<K, V> {}
|
|
|
|
abstract class UnmodifiableMapView<K, V> extends MapView<K, V>
|
|
with _UnmodifiableMapMixin<K, V> {
|
|
UnmodifiableMapView(Map<K, V> map) : super(map);
|
|
}""",
|
|
};
|
|
|
|
Future<void> test() async {
|
|
final String platformBaseName = "vm_platform_strong.dill";
|
|
final Uri base = Uri.parse("org-dartlang-test:///");
|
|
final Uri platformDill = base.resolve(platformBaseName);
|
|
final List<int> platformDillBytes = await new File.fromUri(
|
|
computePlatformBinariesLocation(forceBuildDir: true)
|
|
.resolve(platformBaseName))
|
|
.readAsBytes();
|
|
MemoryFileSystem fs = new MemoryFileSystem(base);
|
|
fs.entityForUri(platformDill).writeAsBytesSync(platformDillBytes);
|
|
fs
|
|
.entityForUri(base.resolve("lib.dart"))
|
|
.writeAsStringSync(files["lib.dart"]);
|
|
CompilerOptions options = new CompilerOptions()
|
|
..fileSystem = fs
|
|
..sdkSummary = platformDill;
|
|
|
|
Component component =
|
|
(await kernelForModule(<Uri>[base.resolve("lib.dart")], options))
|
|
.component;
|
|
|
|
fs = new MemoryFileSystem(base);
|
|
fs.entityForUri(platformDill).writeAsBytesSync(platformDillBytes);
|
|
fs
|
|
.entityForUri(base.resolve("lib.dart.dill"))
|
|
.writeAsBytesSync(serializeComponent(component));
|
|
fs
|
|
.entityForUri(base.resolve("repro.dart"))
|
|
.writeAsStringSync(files["repro.dart"]);
|
|
|
|
options = new CompilerOptions()
|
|
..fileSystem = fs
|
|
..additionalDills = <Uri>[base.resolve("lib.dart.dill")]
|
|
..sdkSummary = platformDill;
|
|
|
|
List<Uri> inputs = <Uri>[base.resolve("repro.dart")];
|
|
|
|
component = (await kernelForModule(inputs, options)).component;
|
|
|
|
List<Object> errors = await CompilerContext.runWithOptions(
|
|
new ProcessedOptions(options: options, inputs: inputs),
|
|
(_) => new Future<List<Object>>.value(
|
|
verifyComponent(component, skipPlatform: true)));
|
|
|
|
serializeComponent(component);
|
|
|
|
if (errors.isNotEmpty) {
|
|
throw "Verification failed";
|
|
}
|
|
}
|
|
|
|
main() {
|
|
asyncTest(test);
|
|
}
|