Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: tests/compiler/dart2js/serialization/helper.dart

Issue 1975153002: Support (de)serialization from command-line (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js/serialization/helper.dart
diff --git a/tests/compiler/dart2js/serialization/helper.dart b/tests/compiler/dart2js/serialization/helper.dart
index a2f38ad8f67106af785813e87a5c269c503e83e5..4a344c077cd374e8f9d72c384d7c585c379303e8 100644
--- a/tests/compiler/dart2js/serialization/helper.dart
+++ b/tests/compiler/dart2js/serialization/helper.dart
@@ -22,6 +22,7 @@ import 'package:compiler/src/serialization/json_serializer.dart';
import 'package:compiler/src/serialization/modelz.dart';
import 'package:compiler/src/serialization/resolved_ast_serialization.dart';
import 'package:compiler/src/serialization/serialization.dart';
+import 'package:compiler/src/serialization/system.dart';
import 'package:compiler/src/serialization/task.dart';
import 'package:compiler/src/tokens/token.dart';
import 'package:compiler/src/universe/call_structure.dart';
@@ -88,10 +89,10 @@ Future<String> serializeDartCore(
options: [Flags.analyzeAll]);
compiler.serialization.supportSerialization = true;
await compiler.run(Uris.dart_core);
- serializedData = serialize(
- compiler,
- compiler.libraryLoader.libraries)
- .toText(const JsonSerializationEncoder());
+ BufferedEventSink sink = new BufferedEventSink();
+ compiler.serialization.serializeToSink(
+ sink, compiler.libraryLoader.libraries);
+ serializedData = sink.text;
if (arguments.saveSerializedData) {
File file = new File(arguments.serializedDataFileName);
print('Saving data to $file');
@@ -100,268 +101,3 @@ Future<String> serializeDartCore(
}
return serializedData;
}
-
-Serializer serialize(
- Compiler compiler,
- Iterable<LibraryElement> libraries) {
- assert(compiler.serialization.supportSerialization);
-
- Serializer serializer = new Serializer();
- SerializerPlugin backendSerializer =
- compiler.backend.serialization.serializer;
- serializer.plugins.add(backendSerializer);
- serializer.plugins.add(new ResolutionImpactSerializer(
- compiler.resolution, backendSerializer));
- serializer.plugins.add(new ResolvedAstSerializerPlugin(
- compiler.resolution, backendSerializer));
-
- for (LibraryElement library in libraries) {
- serializer.serialize(library);
- }
- return serializer;
-}
-
-void deserialize(Compiler compiler,
- String serializedData) {
- Deserializer deserializer = new Deserializer.fromText(
- new DeserializationContext(),
- serializedData,
- const JsonSerializationDecoder());
- deserializer.plugins.add(compiler.backend.serialization.deserializer);
- compiler.serialization.deserializer =
- new _DeserializerSystem(
- compiler,
- deserializer,
- compiler.backend.impactTransformer);
-}
-
-
-const String WORLD_IMPACT_TAG = 'worldImpact';
-
-class ResolutionImpactSerializer extends SerializerPlugin {
- final Resolution resolution;
- final SerializerPlugin nativeDataSerializer;
-
- ResolutionImpactSerializer(this.resolution, this.nativeDataSerializer);
-
- @override
- void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
- if (resolution.hasBeenResolved(element)) {
- ResolutionImpact impact = resolution.getResolutionImpact(element);
- ObjectEncoder encoder = createEncoder(WORLD_IMPACT_TAG);
- new ImpactSerializer(element, encoder, nativeDataSerializer)
- .serialize(impact);
- }
- }
-}
-
-class ResolutionImpactDeserializer extends DeserializerPlugin {
- Map<Element, ResolutionImpact> impactMap = <Element, ResolutionImpact>{};
- final DeserializerPlugin nativeDataDeserializer;
-
- ResolutionImpactDeserializer(this.nativeDataDeserializer);
-
- @override
- void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
- ObjectDecoder decoder = getDecoder(WORLD_IMPACT_TAG);
- if (decoder != null) {
- impactMap[element] =
- ImpactDeserializer.deserializeImpact(
- element, decoder, nativeDataDeserializer);
- }
- }
-}
-
-class _DeserializerSystem extends DeserializerSystem {
- final Compiler _compiler;
- final Deserializer _deserializer;
- final List<LibraryElement> deserializedLibraries = <LibraryElement>[];
- final ResolutionImpactDeserializer _resolutionImpactDeserializer;
- final ResolvedAstDeserializerPlugin _resolvedAstDeserializer;
- final ImpactTransformer _impactTransformer;
-
- factory _DeserializerSystem(
- Compiler compiler,
- Deserializer deserializer,
- ImpactTransformer impactTransformer) {
- List<DeserializerPlugin> plugins = <DeserializerPlugin>[];
- DeserializerPlugin backendDeserializer =
- compiler.backend.serialization.deserializer;
- deserializer.plugins.add(backendDeserializer);
- ResolutionImpactDeserializer resolutionImpactDeserializer =
- new ResolutionImpactDeserializer(backendDeserializer);
- deserializer.plugins.add(resolutionImpactDeserializer);
- ResolvedAstDeserializerPlugin resolvedAstDeserializer
- = new ResolvedAstDeserializerPlugin(
- compiler.parsingContext, backendDeserializer);
- deserializer.plugins.add(resolvedAstDeserializer);
- return new _DeserializerSystem._(
- compiler,
- deserializer,
- impactTransformer,
- resolutionImpactDeserializer,
- resolvedAstDeserializer);
- }
-
- _DeserializerSystem._(
- this._compiler,
- this._deserializer,
- this._impactTransformer,
- this._resolutionImpactDeserializer,
- this._resolvedAstDeserializer);
-
-
- @override
- Future<LibraryElement> readLibrary(Uri resolvedUri) {
- LibraryElement library = _deserializer.lookupLibrary(resolvedUri);
- if (library != null) {
- deserializedLibraries.add(library);
- return Future.forEach(library.compilationUnits,
- (CompilationUnitElement compilationUnit) {
- ScriptZ script = compilationUnit.script;
- return _compiler.readScript(script.readableUri)
- .then((Script newScript) {
- script.file = newScript.file;
- _resolvedAstDeserializer.sourceFiles[script.resourceUri] =
- newScript.file;
- });
- }).then((_) => library);
- }
- return new Future<LibraryElement>.value(library);
- }
-
- @override
- bool hasResolvedAst(ExecutableElement element) {
- return _resolvedAstDeserializer.hasResolvedAst(element);
- }
-
- @override
- ResolvedAst getResolvedAst(ExecutableElement element) {
- return _resolvedAstDeserializer.getResolvedAst(element);
- }
-
- @override
- bool hasResolutionImpact(Element element) {
- if (element.isConstructor &&
- element.enclosingClass.isUnnamedMixinApplication) {
- return true;
- }
- return _resolutionImpactDeserializer.impactMap.containsKey(element);
- }
-
- @override
- ResolutionImpact getResolutionImpact(Element element) {
- if (element.isConstructor &&
- element.enclosingClass.isUnnamedMixinApplication) {
- ClassElement superclass = element.enclosingClass.superclass;
- ConstructorElement superclassConstructor =
- superclass.lookupConstructor(element.name);
- assert(invariant(element, superclassConstructor != null,
- message: "Superclass constructor '${element.name}' called from "
- "${element} not found in ${superclass}."));
- // TODO(johnniwinther): Compute callStructure. Currently not used.
- CallStructure callStructure;
- return _resolutionImpactDeserializer.impactMap.putIfAbsent(element, () {
- return new DeserializedResolutionImpact(
- staticUses: <StaticUse>[new StaticUse.superConstructorInvoke(
- superclassConstructor, callStructure)]);
- });
- }
- return _resolutionImpactDeserializer.impactMap[element];
- }
-
- @override
- WorldImpact computeWorldImpact(Element element) {
- ResolutionImpact resolutionImpact = getResolutionImpact(element);
- assert(invariant(element, resolutionImpact != null,
- message: 'No impact found for $element (${element.library})'));
- return _impactTransformer.transformResolutionImpact(resolutionImpact);
- }
-
- @override
- bool isDeserialized(Element element) {
- return deserializedLibraries.contains(element.library);
- }
-}
-
-const String RESOLVED_AST_TAG = 'resolvedAst';
-
-class ResolvedAstSerializerPlugin extends SerializerPlugin {
- final Resolution resolution;
- final SerializerPlugin nativeDataSerializer;
-
- ResolvedAstSerializerPlugin(this.resolution, this.nativeDataSerializer);
-
- @override
- void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
- 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,
- nativeDataSerializer).serialize();
- }
- }
-}
-
-class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
- final ParsingContext parsingContext;
- final DeserializerPlugin nativeDataDeserializer;
- final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
-
- Map<ExecutableElement, ResolvedAst> _resolvedAstMap =
- <ExecutableElement, ResolvedAst>{};
- Map<MemberElement, ObjectDecoder> _decoderMap =
- <MemberElement, ObjectDecoder>{};
- Map<Uri, Token> beginTokenMap = <Uri, Token>{};
-
- ResolvedAstDeserializerPlugin(
- this.parsingContext, this.nativeDataDeserializer);
-
- bool hasResolvedAst(ExecutableElement element) {
- return _resolvedAstMap.containsKey(element) ||
- _decoderMap.containsKey(element.memberContext);
- }
-
- ResolvedAst getResolvedAst(ExecutableElement element) {
- ResolvedAst resolvedAst = _resolvedAstMap[element];
- if (resolvedAst == null) {
- ObjectDecoder decoder = _decoderMap[element.memberContext];
- if (decoder != null) {
- ResolvedAstDeserializer.deserialize(
- element.memberContext, decoder, parsingContext, findToken,
- nativeDataDeserializer,
- _resolvedAstMap);
- _decoderMap.remove(element);
- resolvedAst = _resolvedAstMap[element];
- }
- }
- return resolvedAst;
- }
-
- Token findToken(Uri uri, int offset) {
- Token beginToken = beginTokenMap.putIfAbsent(uri, () {
- SourceFile sourceFile = sourceFiles[uri];
- if (sourceFile == null) {
- throw 'No source file found for $uri in:\n '
- '${sourceFiles.keys.join('\n ')}';
- }
- return new Scanner(sourceFile).tokenize();
- });
- return ResolvedAstDeserializer.findTokenInStream(beginToken, offset);
- }
-
- @override
- void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
- ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG);
- if (decoder != null) {
- _decoderMap[element] = decoder;
- }
- }
-}
-

Powered by Google App Engine
This is Rietveld 408576698