From 5864016e988ed0e4f17e6303741c88809f5463c6 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 5 Apr 2018 17:24:42 +0200 Subject: [PATCH] Add finish support for MarshalInfo in MetadataLoader --- ICSharpCode.Decompiler/TypeSystem/MetadataLoader.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.Decompiler/TypeSystem/MetadataLoader.cs b/ICSharpCode.Decompiler/TypeSystem/MetadataLoader.cs index 5d8c3615e..1d01fad00 100644 --- a/ICSharpCode.Decompiler/TypeSystem/MetadataLoader.cs +++ b/ICSharpCode.Decompiler/TypeSystem/MetadataLoader.cs @@ -613,7 +613,7 @@ namespace ICSharpCode.Decompiler.TypeSystem void AddMarshalInfo(BlobHandle marshalInfo, IList target) { if (marshalInfo.IsNil) return; - + target.Add(ConvertMarshalInfo(currentMetadata.GetBlobReader(marshalInfo))); } IUnresolvedAttribute ConvertMarshalInfo(System.Reflection.Metadata.BlobReader marshalInfo) @@ -627,9 +627,12 @@ namespace ICSharpCode.Decompiler.TypeSystem case 0x1e: // FixedArray if (!marshalInfo.TryReadCompressedInteger(out size)) size = 0; - type = marshalInfo.ReadByte(); - if (type != 0x66) // None - attr.AddNamedFieldArgument("ArraySubType", CreateSimpleConstantValue(unmanagedTypeTypeRef, type)); + attr.AddNamedFieldArgument("SizeConst", CreateSimpleConstantValue(KnownTypeReference.Int32, size)); + if (marshalInfo.RemainingBytes > 0) { + type = marshalInfo.ReadByte(); + if (type != 0x66) // None + attr.AddNamedFieldArgument("ArraySubType", CreateSimpleConstantValue(unmanagedTypeTypeRef, type)); + } break; case 0x1d: // SafeArray if (marshalInfo.RemainingBytes > 0) {