blob: 717c3481b332e6c8eb3ff9ef74e57c75dd9afd75 [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 'dart:async' show Future;
import 'package:front_end/src/fasta/builder/library_builder.dart'
show LibraryBuilder;
import 'package:kernel/ast.dart' show Library;
import 'package:kernel/target/targets.dart' show Target;
import '../builder/class_builder.dart';
import '../problems.dart' show unsupported;
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;
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,
LibraryBuilder origin,
Library referencesFrom,
bool referenceIsPartOwner) {
assert(origin == null);
assert(referencesFrom == null);
DillLibraryBuilder libraryBuilder = libraryBuilders.remove(uri);
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);
}
void releaseAncillaryResources() {
libraryBuilders.clear();
}
}