// 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 serializationRoundTrip(List 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> { final BytesBuilder builder = new BytesBuilder(); @override void add(List data) { builder.add(data); } @override void close() {} }