in src/Refasmer/Importer/SignatureImport.cs [21:47]
private class ImportingVisitor(
MetadataReader metadataReader,
MetadataImporter metadataImporter) : ISignatureVisitor<BlobHandle>
{
private BlobBuilder? _blobBuilder;
private BlobBuilder BlobBuilder =>
_blobBuilder ?? throw new InvalidOperationException("Blob builder is not defined yet.");
public void VisitReader(BlobReader reader)
{
_blobBuilder = new BlobBuilder(reader.Length);
}
public void WriteByte(byte @byte) => BlobBuilder.WriteByte(@byte);
public void WriteCompressedInteger(int integer) => BlobBuilder.WriteCompressedInteger(integer);
public void WriteCompressedSignedInteger(int integer) => BlobBuilder.WriteCompressedSignedInteger(integer);
public void VisitTypeHandle(EntityHandle srcHandle)
{
var dstHandle = metadataImporter.Import(srcHandle);
if (dstHandle.IsNil)
throw new UnknownTypeInSignature(srcHandle, $"Unknown type in signature: {metadataReader.ToString(srcHandle)}");
WriteCompressedInteger(CodedIndex.TypeDefOrRefOrSpec(dstHandle));
}
public BlobHandle GetResult() => metadataImporter._builder.GetOrAddBlob(BlobBuilder);
}