| // 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:typed_data' show BytesBuilder, Uint8List; | |
| 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) | |
| ..setMainMethodAndMode(null, false); | |
| Uint8List bytes = serializeComponent(c); | |
| Component c2 = loadComponentFromBytes(bytes); | |
| return c2.libraries; | |
| } | |
| Uint8List serializeComponent(Component c) { | |
| ByteSink byteSink = new ByteSink(); | |
| BinaryPrinter printer = new BinaryPrinter(byteSink); | |
| printer.writeComponentFile(c); | |
| return byteSink.builder.takeBytes(); | |
| } | |
| /// A [Sink] that directly writes data into a byte builder. | |
| class ByteSink implements Sink<List<int>> { | |
| final BytesBuilder builder = new BytesBuilder(); | |
| @override | |
| void add(List<int> data) { | |
| builder.add(data); | |
| } | |
| @override | |
| void close() {} | |
| } |