| // Copyright (c) 2020, 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.loading_units; | |
| import 'package:kernel/ast.dart'; | |
| class LoadingUnit { | |
| final int id; | |
| final int parentId; | |
| final List<String> libraryUris; | |
| LoadingUnit(this.id, this.parentId, this.libraryUris); | |
| String toString() { | |
| var sb = new StringBuffer(); | |
| sb.writeln("LoadingUnit(id=$id, parent=${parentId},"); | |
| for (var uri in libraryUris) { | |
| sb.writeln(" $uri"); | |
| } | |
| sb.write(")"); | |
| return sb.toString(); | |
| } | |
| } | |
| class LoadingUnitsMetadata { | |
| final List<LoadingUnit> loadingUnits; | |
| LoadingUnitsMetadata(this.loadingUnits); | |
| String toString() { | |
| var sb = new StringBuffer(); | |
| sb.writeln("LoadingUnitsMetadata("); | |
| for (var unit in loadingUnits) { | |
| sb.writeln(unit.toString()); | |
| } | |
| sb.write(")"); | |
| return sb.toString(); | |
| } | |
| } | |
| /// Repository for [LoadingUnitsMetadata]. | |
| class LoadingUnitsMetadataRepository | |
| extends MetadataRepository<LoadingUnitsMetadata> { | |
| static final repositoryTag = 'vm.loading-units.metadata'; | |
| @override | |
| final String tag = repositoryTag; | |
| @override | |
| final Map<TreeNode, LoadingUnitsMetadata> mapping = | |
| <TreeNode, LoadingUnitsMetadata>{}; | |
| @override | |
| void writeToBinary( | |
| LoadingUnitsMetadata metadata, | |
| Node node, | |
| BinarySink sink, | |
| ) { | |
| sink.writeUInt30(metadata.loadingUnits.length); | |
| for (LoadingUnit unit in metadata.loadingUnits) { | |
| sink.writeUInt30(unit.id); | |
| sink.writeUInt30(unit.parentId); | |
| sink.writeUInt30(unit.libraryUris.length); | |
| for (String uri in unit.libraryUris) { | |
| sink.writeStringReference(uri); | |
| } | |
| } | |
| } | |
| @override | |
| LoadingUnitsMetadata readFromBinary(Node node, BinarySource source) { | |
| int length = source.readUInt30(); | |
| var units = <LoadingUnit>[]; | |
| for (int i = 0; i < length; i++) { | |
| int id = source.readUInt30(); | |
| int parentId = source.readUInt30(); | |
| var libraryUris = <String>[]; | |
| int length = source.readUInt30(); | |
| for (int i = 0; i < length; i++) { | |
| libraryUris.add(source.readStringReference()); | |
| } | |
| units.add(new LoadingUnit(id, parentId, libraryUris)); | |
| } | |
| return new LoadingUnitsMetadata(units); | |
| } | |
| } |