| Index: tests/compiler/dart2js/serialization_helper.dart
|
| diff --git a/tests/compiler/dart2js/serialization_helper.dart b/tests/compiler/dart2js/serialization_helper.dart
|
| index c8632652030f0a97a4e3beca36193a0682ad3213..43b2217e0ab7e2331c5c60484b003b55a9510d62 100644
|
| --- a/tests/compiler/dart2js/serialization_helper.dart
|
| +++ b/tests/compiler/dart2js/serialization_helper.dart
|
| @@ -4,10 +4,12 @@
|
|
|
| library dart2js.serialization_helper;
|
|
|
| +import 'dart:io';
|
| import 'dart:async';
|
| import 'package:async_helper/async_helper.dart';
|
| import 'package:expect/expect.dart';
|
| import 'package:compiler/compiler_new.dart';
|
| +import 'package:compiler/src/common.dart';
|
| import 'package:compiler/src/commandline_options.dart';
|
| import 'package:compiler/src/common/backend_api.dart';
|
| import 'package:compiler/src/common/names.dart';
|
| @@ -29,17 +31,70 @@ import 'package:compiler/src/script.dart';
|
| import 'package:compiler/src/universe/world_impact.dart';
|
| import 'memory_compiler.dart';
|
|
|
| +class Arguments {
|
| + final String filename;
|
| + final bool loadSerializedData;
|
| + final bool saveSerializedData;
|
| + final String serializedDataFileName;
|
| + final bool verbose;
|
| +
|
| + const Arguments({
|
| + this.filename,
|
| + this.loadSerializedData: false,
|
| + this.saveSerializedData: false,
|
| + this.serializedDataFileName: 'out.data',
|
| + this.verbose: false});
|
| +
|
| + factory Arguments.from(List<String> arguments) {
|
| + String filename;
|
| + for (String arg in arguments) {
|
| + if (!arg.startsWith('-')) {
|
| + filename = arg;
|
| + }
|
| + }
|
| + bool verbose = arguments.contains('-v');
|
| + bool loadSerializedData = arguments.contains('-l');
|
| + bool saveSerializedData = arguments.contains('-s');
|
| + return new Arguments(
|
| + filename: filename,
|
| + verbose: verbose,
|
| + loadSerializedData: loadSerializedData,
|
| + saveSerializedData: saveSerializedData);
|
| + }
|
| +}
|
|
|
| -Future<String> serializeDartCore({bool serializeResolvedAst: false}) async {
|
| - Compiler compiler = compilerFor(
|
| - options: [Flags.analyzeAll]);
|
| - compiler.serialization.supportSerialization = true;
|
| - await compiler.run(Uris.dart_core);
|
| - return serialize(
|
| - compiler,
|
| - compiler.libraryLoader.libraries,
|
| - serializeResolvedAst: serializeResolvedAst)
|
| - .toText(const JsonSerializationEncoder());
|
| +
|
| +Future<String> serializeDartCore(
|
| + {Arguments arguments: const Arguments(),
|
| + bool serializeResolvedAst: false}) async {
|
| + print('------------------------------------------------------------------');
|
| + print('serialize dart:core');
|
| + print('------------------------------------------------------------------');
|
| + String serializedData;
|
| + if (arguments.loadSerializedData) {
|
| + File file = new File(arguments.serializedDataFileName);
|
| + if (file.existsSync()) {
|
| + print('Loading data from $file');
|
| + serializedData = file.readAsStringSync();
|
| + }
|
| + }
|
| + if (serializedData == null) {
|
| + Compiler compiler = compilerFor(
|
| + options: [Flags.analyzeAll]);
|
| + compiler.serialization.supportSerialization = true;
|
| + await compiler.run(Uris.dart_core);
|
| + serializedData = serialize(
|
| + compiler,
|
| + compiler.libraryLoader.libraries,
|
| + serializeResolvedAst: serializeResolvedAst)
|
| + .toText(const JsonSerializationEncoder());
|
| + if (arguments.saveSerializedData) {
|
| + File file = new File(arguments.serializedDataFileName);
|
| + print('Saving data to $file');
|
| + file.writeAsStringSync(serializedData);
|
| + }
|
| + }
|
| + return serializedData;
|
| }
|
|
|
| Serializer serialize(
|
| @@ -154,6 +209,14 @@ class _DeserializerSystem extends DeserializerSystem {
|
| }
|
|
|
| @override
|
| + bool hasResolvedAst(Element element) {
|
| + if (_resolvedAstDeserializer != null) {
|
| + return _resolvedAstDeserializer.hasResolvedAst(element);
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + @override
|
| ResolvedAst getResolvedAst(Element element) {
|
| if (_resolvedAstDeserializer != null) {
|
| return _resolvedAstDeserializer.getResolvedAst(element);
|
| @@ -192,7 +255,11 @@ class ResolvedAstSerializerPlugin extends SerializerPlugin {
|
|
|
| @override
|
| void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
|
| - if (element is MemberElement && resolution.hasResolvedAst(element)) {
|
| + assert(invariant(element, element.isDeclaration,
|
| + message: "Element $element must be the declaration"));
|
| + if (element is MemberElement) {
|
| + assert(invariant(element, resolution.hasResolvedAst(element),
|
| + message: "Element $element must have a resolved ast"));
|
| ResolvedAst resolvedAst = resolution.getResolvedAst(element);
|
| ObjectEncoder objectEncoder = createEncoder(RESOLVED_AST_TAG);
|
| new ResolvedAstSerializer(objectEncoder, resolvedAst).serialize();
|
| @@ -210,6 +277,11 @@ class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
|
|
|
| ResolvedAstDeserializerPlugin(this.parsing);
|
|
|
| + bool hasResolvedAst(Element element) {
|
| + return _resolvedAstMap.containsKey(element) ||
|
| + _decoderMap.containsKey(element);
|
| + }
|
| +
|
| ResolvedAst getResolvedAst(Element element) {
|
| ResolvedAst resolvedAst = _resolvedAstMap[element];
|
| if (resolvedAst == null) {
|
|
|