blob: f9c24fd31acb91c014e155b81f85d5ad680cb9cf [file] [log] [blame]
// Copyright (c) 2016, 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 fasta.dill_target;
import 'package:kernel/ast.dart' show Library;
import 'package:kernel/target/targets.dart' show Target;
import '../builder/class_builder.dart';
import '../builder/library_builder.dart' show LibraryBuilder;
import '../problems.dart' show unsupported;
import '../source/source_library_builder.dart' show LanguageVersion;
import '../target_implementation.dart' show TargetImplementation;
import '../ticker.dart' show Ticker;
import '../uri_translator.dart' show UriTranslator;
import 'dill_library_builder.dart' show DillLibraryBuilder;
import 'dill_loader.dart' show DillLoader;
class DillTarget extends TargetImplementation {
final Map<Uri, DillLibraryBuilder> libraryBuilders =
<Uri, DillLibraryBuilder>{};
bool isLoaded = false;
late final DillLoader loader;
DillTarget(Ticker ticker, UriTranslator uriTranslator, Target backendTarget)
: super(ticker, uriTranslator, backendTarget) {
loader = new DillLoader(this);
}
@override
void addSourceInformation(
Uri importUri, Uri fileUri, List<int> lineStarts, List<int> sourceCode) {
unsupported("addSourceInformation", -1, null);
}
@override
Future<Null> buildComponent() {
return new Future<Null>.sync(() => unsupported("buildComponent", -1, null));
}
@override
Future<Null> buildOutlines({bool suppressFinalizationErrors: false}) async {
if (loader.libraries.isNotEmpty) {
await loader.buildOutlines();
loader.finalizeExports(
suppressFinalizationErrors: suppressFinalizationErrors);
}
isLoaded = true;
}
@override
DillLibraryBuilder createLibraryBuilder(
Uri uri,
Uri fileUri,
Uri? packageUri,
LanguageVersion packageLanguageVersion,
LibraryBuilder? origin,
Library? referencesFrom,
bool? referenceIsPartOwner) {
assert(origin == null);
assert(referencesFrom == null);
DillLibraryBuilder libraryBuilder =
libraryBuilders.remove(uri) as DillLibraryBuilder;
// ignore: unnecessary_null_comparison
assert(libraryBuilder != null, "No library found for $uri.");
return libraryBuilder;
}
@override
void breakCycle(ClassBuilder cls) {}
void addLibrary(Library library) {
libraryBuilders[library.importUri] =
new DillLibraryBuilder(library, loader);
}
@override
void releaseAncillaryResources() {
libraryBuilders.clear();
}
}