diff --git a/src/AsmResolver.DotNet/Signatures/BlobSerializationContext.cs b/src/AsmResolver.DotNet/Signatures/BlobSerializationContext.cs
index bbe68c8ee..d53819ff3 100644
--- a/src/AsmResolver.DotNet/Signatures/BlobSerializationContext.cs
+++ b/src/AsmResolver.DotNet/Signatures/BlobSerializationContext.cs
@@ -6,7 +6,7 @@ namespace AsmResolver.DotNet.Signatures
///
/// Describes a context in which a blob signature is to be serialized in.
///
- public class BlobSerializationContext
+ public readonly struct BlobSerializationContext
{
///
/// Creates a new instance of the class.
diff --git a/src/AsmResolver.DotNet/Signatures/BlobSignature.cs b/src/AsmResolver.DotNet/Signatures/BlobSignature.cs
index 17ac56302..d42c16bcd 100644
--- a/src/AsmResolver.DotNet/Signatures/BlobSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/BlobSignature.cs
@@ -8,7 +8,7 @@ public abstract class BlobSignature
///
/// Serializes the blob to an output stream.
///
- public abstract void Write(BlobSerializationContext context);
+ public abstract void Write(in BlobSerializationContext context);
///
/// Wraps the blob signature into a new stand-alone signature that can be referenced by a metadata token.
diff --git a/src/AsmResolver.DotNet/Signatures/CustomAttributeArgumentWriter.cs b/src/AsmResolver.DotNet/Signatures/CustomAttributeArgumentWriter.cs
index 71049ab4b..a0319b23d 100644
--- a/src/AsmResolver.DotNet/Signatures/CustomAttributeArgumentWriter.cs
+++ b/src/AsmResolver.DotNet/Signatures/CustomAttributeArgumentWriter.cs
@@ -7,13 +7,13 @@
namespace AsmResolver.DotNet.Signatures
{
- internal sealed class CustomAttributeArgumentWriter
+ internal readonly struct CustomAttributeArgumentWriter
{
private readonly BlobSerializationContext _context;
public CustomAttributeArgumentWriter(BlobSerializationContext context)
{
- _context = context ?? throw new ArgumentNullException(nameof(context));
+ _context = context;
}
public void WriteArgument(CustomAttributeArgument argument)
diff --git a/src/AsmResolver.DotNet/Signatures/CustomAttributeSignature.cs b/src/AsmResolver.DotNet/Signatures/CustomAttributeSignature.cs
index 3cb564c0c..8e645704a 100644
--- a/src/AsmResolver.DotNet/Signatures/CustomAttributeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/CustomAttributeSignature.cs
@@ -144,7 +144,7 @@ public override string ToString()
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteUInt16(CustomAttributeSignaturePrologue);
diff --git a/src/AsmResolver.DotNet/Signatures/DataBlobSignature.cs b/src/AsmResolver.DotNet/Signatures/DataBlobSignature.cs
index 062d07a0d..8dee782cd 100644
--- a/src/AsmResolver.DotNet/Signatures/DataBlobSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/DataBlobSignature.cs
@@ -65,7 +65,7 @@ public object InterpretData(ElementType elementType)
}
///
- public override void Write(BlobSerializationContext context) => context.Writer.WriteBytes(Data);
+ public override void Write(in BlobSerializationContext context) => context.Writer.WriteBytes(Data);
///
/// Create a from a value
diff --git a/src/AsmResolver.DotNet/Signatures/ExtendableBlobSignature.cs b/src/AsmResolver.DotNet/Signatures/ExtendableBlobSignature.cs
index d19e4f9ae..10256d7a2 100644
--- a/src/AsmResolver.DotNet/Signatures/ExtendableBlobSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/ExtendableBlobSignature.cs
@@ -17,7 +17,7 @@ public byte[]? ExtraData
}
///
- public sealed override void Write(BlobSerializationContext context)
+ public sealed override void Write(in BlobSerializationContext context)
{
WriteContents(context);
if (ExtraData is not null)
@@ -27,6 +27,6 @@ public sealed override void Write(BlobSerializationContext context)
///
/// Serializes the blob (without extra data) to an output stream.
///
- protected abstract void WriteContents(BlobSerializationContext context);
+ protected abstract void WriteContents(in BlobSerializationContext context);
}
}
diff --git a/src/AsmResolver.DotNet/Signatures/FieldSignature.cs b/src/AsmResolver.DotNet/Signatures/FieldSignature.cs
index 02b5495f4..f1d69e005 100644
--- a/src/AsmResolver.DotNet/Signatures/FieldSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/FieldSignature.cs
@@ -89,7 +89,7 @@ public FieldSignature InstantiateGenericTypes(GenericContext context) =>
GenericTypeActivator.Instance.InstantiateFieldSignature(this, context);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) Attributes);
FieldType.Write(context);
diff --git a/src/AsmResolver.DotNet/Signatures/GenericInstanceMethodSignature.cs b/src/AsmResolver.DotNet/Signatures/GenericInstanceMethodSignature.cs
index 291a07c25..33848a34d 100644
--- a/src/AsmResolver.DotNet/Signatures/GenericInstanceMethodSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/GenericInstanceMethodSignature.cs
@@ -93,7 +93,7 @@ public IList TypeArguments
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
writer.WriteByte((byte) Attributes);
diff --git a/src/AsmResolver.DotNet/Signatures/LocalVariablesSignature.cs b/src/AsmResolver.DotNet/Signatures/LocalVariablesSignature.cs
index 2376fd95c..165e68558 100644
--- a/src/AsmResolver.DotNet/Signatures/LocalVariablesSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/LocalVariablesSignature.cs
@@ -93,7 +93,7 @@ protected override CallingConventionSignature ImportWithInternal(ReferenceImport
ImportWith(importer);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/ComInterfaceMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/ComInterfaceMarshalDescriptor.cs
index c053be78c..96e60cbc5 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/ComInterfaceMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/ComInterfaceMarshalDescriptor.cs
@@ -58,7 +58,7 @@ public int? IidParameterIndex
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/CustomMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/CustomMarshalDescriptor.cs
index 4376c82de..cdea0bda6 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/CustomMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/CustomMarshalDescriptor.cs
@@ -87,7 +87,7 @@ public Utf8String? Cookie
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/FixedArrayMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/FixedArrayMarshalDescriptor.cs
index 6f9401a32..0e0e8cd98 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/FixedArrayMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/FixedArrayMarshalDescriptor.cs
@@ -76,7 +76,7 @@ public NativeType? ArrayElementType
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/FixedSysStringMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/FixedSysStringMarshalDescriptor.cs
index b41cd42cf..cbdf77aec 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/FixedSysStringMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/FixedSysStringMarshalDescriptor.cs
@@ -41,7 +41,7 @@ public int Size
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/LPArrayMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/LPArrayMarshalDescriptor.cs
index 58f98f65a..7346b3616 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/LPArrayMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/LPArrayMarshalDescriptor.cs
@@ -83,7 +83,7 @@ public LPArrayFlags? Flags
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/SafeArrayMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/SafeArrayMarshalDescriptor.cs
index 0b4323254..85e2e2a8f 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/SafeArrayMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/SafeArrayMarshalDescriptor.cs
@@ -135,7 +135,7 @@ public TypeSignature? UserDefinedSubType
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Marshal/SimpleMarshalDescriptor.cs b/src/AsmResolver.DotNet/Signatures/Marshal/SimpleMarshalDescriptor.cs
index 81b5a4d34..e4f282186 100644
--- a/src/AsmResolver.DotNet/Signatures/Marshal/SimpleMarshalDescriptor.cs
+++ b/src/AsmResolver.DotNet/Signatures/Marshal/SimpleMarshalDescriptor.cs
@@ -21,7 +21,7 @@ public override NativeType NativeType
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) NativeType);
}
diff --git a/src/AsmResolver.DotNet/Signatures/MethodSignature.cs b/src/AsmResolver.DotNet/Signatures/MethodSignature.cs
index 818452aa6..3600c6e32 100644
--- a/src/AsmResolver.DotNet/Signatures/MethodSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/MethodSignature.cs
@@ -201,7 +201,7 @@ public MethodSignature InstantiateGenericTypes(GenericContext context)
public FunctionPointerTypeSignature MakeFunctionPointerType() => new(this);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/PropertySignature.cs b/src/AsmResolver.DotNet/Signatures/PropertySignature.cs
index 5883cad30..15b01e0d1 100644
--- a/src/AsmResolver.DotNet/Signatures/PropertySignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/PropertySignature.cs
@@ -112,7 +112,7 @@ public PropertySignature InstantiateGenericTypes(GenericContext context)
=> GenericTypeActivator.Instance.InstantiatePropertySignature(this, context);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) Attributes);
WriteParametersAndReturnType(context);
diff --git a/src/AsmResolver.DotNet/Signatures/Security/PermissionSetSignature.cs b/src/AsmResolver.DotNet/Signatures/Security/PermissionSetSignature.cs
index 8ecf7e4f2..347365357 100644
--- a/src/AsmResolver.DotNet/Signatures/Security/PermissionSetSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Security/PermissionSetSignature.cs
@@ -38,7 +38,7 @@ public IList Attributes
} = new List();
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/SerializedCustomAttributeSignature.cs b/src/AsmResolver.DotNet/Signatures/SerializedCustomAttributeSignature.cs
index e1a6bc9de..3a841170a 100644
--- a/src/AsmResolver.DotNet/Signatures/SerializedCustomAttributeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/SerializedCustomAttributeSignature.cs
@@ -53,7 +53,7 @@ protected override void Initialize(
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
// If the arguments are not initialized yet, it means nobody accessed the fixed or named arguments of the
// signature. In such a case, we can safely assume nothing has changed to the signature.
diff --git a/src/AsmResolver.DotNet/Signatures/Types/ArrayTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/ArrayTypeSignature.cs
index e81140d88..081ec88e2 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/ArrayTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/ArrayTypeSignature.cs
@@ -201,7 +201,7 @@ public override TResult AcceptVisitor(ITypeSignatureVisitor
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
if (!Validate())
throw new InvalidOperationException();
diff --git a/src/AsmResolver.DotNet/Signatures/Types/CorLibTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/CorLibTypeSignature.cs
index ae2a6974c..9f77eaba4 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/CorLibTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/CorLibTypeSignature.cs
@@ -103,7 +103,7 @@ public override IResolutionScope? Scope
public override ITypeDefOrRef ToTypeDefOrRef() => Type;
///
- protected override void WriteContents(BlobSerializationContext context) =>
+ protected override void WriteContents(in BlobSerializationContext context) =>
context.Writer.WriteByte((byte) ElementType);
///
diff --git a/src/AsmResolver.DotNet/Signatures/Types/CustomModifierTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/CustomModifierTypeSignature.cs
index 64ec085e1..12b4554ad 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/CustomModifierTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/CustomModifierTypeSignature.cs
@@ -80,7 +80,7 @@ public override bool IsImportedInModule(ModuleDefinition module) =>
ModifierType.IsImportedInModule(module) && base.IsImportedInModule(module);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) ElementType);
WriteTypeDefOrRef(context, ModifierType, "Modifier type");
diff --git a/src/AsmResolver.DotNet/Signatures/Types/FunctionPointerTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/FunctionPointerTypeSignature.cs
index 1fe273fa5..b5ebe0c15 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/FunctionPointerTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/FunctionPointerTypeSignature.cs
@@ -53,7 +53,7 @@ public MethodSignature Signature
public override bool IsImportedInModule(ModuleDefinition module) => Signature.IsImportedInModule(module);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) ElementType);
Signature.Write(context);
diff --git a/src/AsmResolver.DotNet/Signatures/Types/GenericInstanceTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/GenericInstanceTypeSignature.cs
index 53a414283..33d588a03 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/GenericInstanceTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/GenericInstanceTypeSignature.cs
@@ -127,7 +127,7 @@ public override bool IsImportedInModule(ModuleDefinition module)
}
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
diff --git a/src/AsmResolver.DotNet/Signatures/Types/GenericParameterSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/GenericParameterSignature.cs
index 24f487016..f29083c29 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/GenericParameterSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/GenericParameterSignature.cs
@@ -90,7 +90,7 @@ public override IResolutionScope? Scope
public override ITypeDefOrRef? GetUnderlyingTypeDefOrRef() => null;
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
writer.WriteByte((byte) ElementType);
diff --git a/src/AsmResolver.DotNet/Signatures/Types/SentinelTypeSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/SentinelTypeSignature.cs
index 49e7faa18..cf0e8e976 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/SentinelTypeSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/SentinelTypeSignature.cs
@@ -37,7 +37,7 @@ public class SentinelTypeSignature : TypeSignature
public override bool IsImportedInModule(ModuleDefinition module) => true;
///
- protected override void WriteContents(BlobSerializationContext context) =>
+ protected override void WriteContents(in BlobSerializationContext context) =>
context.Writer.WriteByte((byte) ElementType);
///
diff --git a/src/AsmResolver.DotNet/Signatures/Types/TypeDefOrRefSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/TypeDefOrRefSignature.cs
index f617beb31..3fed04061 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/TypeDefOrRefSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/TypeDefOrRefSignature.cs
@@ -83,7 +83,7 @@ public override TResult AcceptVisitor(ITypeSignatureVisitor
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
var writer = context.Writer;
writer.WriteByte((byte) ElementType);
diff --git a/src/AsmResolver.DotNet/Signatures/Types/TypeSpecificationSignature.cs b/src/AsmResolver.DotNet/Signatures/Types/TypeSpecificationSignature.cs
index 412964357..81ced7a33 100644
--- a/src/AsmResolver.DotNet/Signatures/Types/TypeSpecificationSignature.cs
+++ b/src/AsmResolver.DotNet/Signatures/Types/TypeSpecificationSignature.cs
@@ -44,7 +44,7 @@ public TypeSignature BaseType
public override bool IsImportedInModule(ModuleDefinition module) => BaseType.IsImportedInModule(module);
///
- protected override void WriteContents(BlobSerializationContext context)
+ protected override void WriteContents(in BlobSerializationContext context)
{
context.Writer.WriteByte((byte) ElementType);
WriteBaseType(context);
diff --git a/test/AsmResolver.DotNet.Tests/ModuleDefinitionTest.cs b/test/AsmResolver.DotNet.Tests/ModuleDefinitionTest.cs
index cfae099e9..e6eed8351 100644
--- a/test/AsmResolver.DotNet.Tests/ModuleDefinitionTest.cs
+++ b/test/AsmResolver.DotNet.Tests/ModuleDefinitionTest.cs
@@ -4,14 +4,9 @@
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
-using AsmResolver.DotNet.Builder;
-using AsmResolver.DotNet.Cloning;
-using AsmResolver.DotNet.Serialized;
using AsmResolver.DotNet.Signatures;
using AsmResolver.DotNet.TestCases.NestedClasses;
using AsmResolver.IO;
-using AsmResolver.PE.DotNet.Builder;
-using AsmResolver.PE.DotNet.Metadata.Strings;
using AsmResolver.PE.DotNet.Metadata.Tables;
using AsmResolver.PE.Win32Resources;
using Xunit;