blob: d631b9758722432935603c33f08efed442f764d1 [file] [log] [blame]
// Copyright (c) 2022, 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.
import 'package:kernel/ast.dart' as ir;
import '../diagnostics/diagnostic_listener.dart';
import '../inferrer/abstract_value_strategy.dart';
import '../inferrer/types.dart';
import '../js_backend/inferred_data.dart';
import '../js_model/element_map_impl.dart';
import '../js_model/js_world.dart';
import '../js_model/locals.dart';
import '../options.dart';
import '../environment.dart';
import 'serialization.dart';
/// A data class holding some data [T] and the associated [DataSourceIndices].
class DataAndIndices<T> {
final T? data;
final DataSourceIndices? indices;
DataAndIndices(this.data, this.indices);
}
void serializeGlobalTypeInferenceResultsToSink(
GlobalTypeInferenceResults results, DataSinkWriter sink) {
final closedWorld = results.closedWorld;
GlobalLocalsMap globalLocalsMap = results.globalLocalsMap;
InferredData inferredData = results.inferredData;
globalLocalsMap.writeToDataSink(sink);
inferredData.writeToDataSink(sink);
results.writeToDataSink(sink, closedWorld.elementMap);
sink.close();
}
GlobalTypeInferenceResults deserializeGlobalTypeInferenceResultsFromSource(
CompilerOptions options,
DiagnosticReporter reporter,
Environment environment,
AbstractValueStrategy abstractValueStrategy,
ir.Component component,
JClosedWorld closedWorld,
DataSourceReader source) {
source.registerComponentLookup(ComponentLookup(component));
source.registerEntityLookup(ClosedEntityLookup(closedWorld.elementMap));
GlobalLocalsMap globalLocalsMap = GlobalLocalsMap.readFromDataSource(
closedWorld.closureDataLookup.getEnclosingMember, source);
InferredData inferredData =
InferredData.readFromDataSource(source, closedWorld);
return GlobalTypeInferenceResults.readFromDataSource(source,
closedWorld.elementMap, closedWorld, globalLocalsMap, inferredData);
}
void serializeClosedWorldToSink(JClosedWorld closedWorld, DataSinkWriter sink) {
closedWorld.writeToDataSink(sink);
sink.close();
}
JClosedWorld deserializeClosedWorldFromSource(
CompilerOptions options,
DiagnosticReporter reporter,
Environment environment,
AbstractValueStrategy abstractValueStrategy,
ir.Component component,
DataSourceReader source) {
return JClosedWorld.readFromDataSource(
options, reporter, environment, abstractValueStrategy, component, source);
}