eb956a2516
Fasta can generate synthetic libraries. Previously we didn't include them when serializing, but that leaves references in the binary to libraries that doesn't exist which isn't ideal. This change includes them, and adds a flag to kernel Libraries such that we know they are synthetic. Change-Id: Ied25a21cd1f384d318347021bc7ec18dae3a4e05 Reviewed-on: https://dart-review.googlesource.com/c/91722 Commit-Queue: Jens Johansen <jensj@google.com> Reviewed-by: Peter von der Ahé <ahe@google.com>
35 lines
1.1 KiB
Dart
35 lines
1.1 KiB
Dart
// Copyright (c) 2019, 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 'dart:io' show BytesBuilder;
|
|
|
|
import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
|
|
import 'package:kernel/kernel.dart';
|
|
export 'package:kernel/kernel.dart';
|
|
|
|
Library libRoundTrip(Library lib) {
|
|
return serializationRoundTrip([lib])[0];
|
|
}
|
|
|
|
List<Library> serializationRoundTrip(List<Library> libraries) {
|
|
Component c = new Component(libraries: libraries);
|
|
ByteSink byteSink = new ByteSink();
|
|
BinaryPrinter printer = new BinaryPrinter(byteSink);
|
|
printer.writeComponentFile(c);
|
|
List<int> bytes = byteSink.builder.takeBytes();
|
|
Component c2 = loadComponentFromBytes(bytes);
|
|
return c2.libraries;
|
|
}
|
|
|
|
/// A [Sink] that directly writes data into a byte builder.
|
|
class ByteSink implements Sink<List<int>> {
|
|
final BytesBuilder builder = new BytesBuilder();
|
|
|
|
void add(List<int> data) {
|
|
builder.add(data);
|
|
}
|
|
|
|
void close() {}
|
|
}
|