Files
sdk/pkg/vm/lib/metadata/bytecode.dart
T
Ryan Macnak 8e05cd278c [vm, bytecode] Emit bytecode without ASTs by default.
After d65a60db00, we don't need AST with the bytecode to initialize a kernel compiler since the kernel compiler will initialize from a separate file.

Remove duplicated BinaryCacheMetadataRepository.

Fix generating bytecode in non-incremental mode.

Change-Id: Ica7bfb5a2d86dcc224849a9934a7a4676b01f075
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119702
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-10-07 22:12:49 +00:00

71 lines
2.1 KiB
Dart

// Copyright (c) 2018, 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 vm.metadata.bytecode;
import 'package:kernel/ast.dart'
show BinarySink, BinarySource, MetadataRepository, Node, TreeNode;
import '../bytecode/bytecode_serialization.dart'
show BufferedWriter, BufferedReader, LinkWriter, LinkReader;
import '../bytecode/declarations.dart' show Component;
import 'dart:developer';
class BytecodeMetadata {
final Component component;
BytecodeMetadata(this.component);
void write(BufferedWriter writer) {
Timeline.timeSync("BytecodeMetadata.write", () {
component.write(writer);
});
}
factory BytecodeMetadata.read(BufferedReader reader) {
return Timeline.timeSync("BytecodeMetadata.read", () {
return new BytecodeMetadata(new Component.read(reader));
});
}
@override
String toString() => "\n"
"BytecodeMetadata {\n"
"$component\n"
"}\n";
}
/// Repository for [BytecodeMetadata].
class BytecodeMetadataRepository extends MetadataRepository<BytecodeMetadata> {
@override
final String tag = 'vm.bytecode';
@override
final Map<TreeNode, BytecodeMetadata> mapping =
<TreeNode, BytecodeMetadata>{};
@override
void writeToBinary(BytecodeMetadata metadata, Node node, BinarySink sink) {
final bytecodeComponent = metadata.component;
final linkWriter = new LinkWriter();
final writer = new BufferedWriter(
bytecodeComponent.version,
bytecodeComponent.stringTable,
bytecodeComponent.objectTable,
linkWriter,
baseOffset: sink.getBufferOffset());
metadata.write(writer);
sink.writeBytes(writer.takeBytes());
}
@override
BytecodeMetadata readFromBinary(Node node, BinarySource source) {
final linkReader = new LinkReader();
final reader = new BufferedReader(-1, null, null, linkReader, source.bytes,
baseOffset: source.currentOffset);
final bytecodeComponent = new Component.read(reader);
return new BytecodeMetadata(bytecodeComponent);
}
}