Skip to content

Commit 6d02906

Browse files
authored
Change order of check for generic instance in dependency build (#213)
***NO_CI***
1 parent e5b5714 commit 6d02906

File tree

1 file changed

+43
-38
lines changed

1 file changed

+43
-38
lines changed

MetadataProcessor.Shared/nanoAssemblyBuilder.cs

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -631,15 +631,15 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
631631
{
632632
set.Add(fd.MetadataToken);
633633
}
634-
else if (fd.FieldType.IsValueType &&
635-
!fd.FieldType.IsPrimitive)
634+
else if (fd.FieldType is GenericInstanceType)
636635
{
637636
set.Add(fd.FieldType.MetadataToken);
637+
set.Add(fd.FieldType.GetElementType().MetadataToken);
638638
}
639-
else if (fd.FieldType is GenericInstanceType)
639+
else if (fd.FieldType.IsValueType &&
640+
!fd.FieldType.IsPrimitive)
640641
{
641642
set.Add(fd.FieldType.MetadataToken);
642-
set.Add(fd.FieldType.GetElementType().MetadataToken);
643643
}
644644
else if (fd.FieldType.IsArray)
645645
{
@@ -759,15 +759,15 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
759759
{
760760
set.Add(parameterType.MetadataToken);
761761
}
762-
else if (parameterType.IsValueType &&
763-
!parameterType.IsPrimitive)
762+
else if (parameterType is GenericInstanceType)
764763
{
765764
set.Add(parameterType.MetadataToken);
765+
set.Add(parameterType.GetElementType().MetadataToken);
766766
}
767-
else if (parameterType is GenericInstanceType)
767+
else if (parameterType.IsValueType &&
768+
!parameterType.IsPrimitive)
768769
{
769770
set.Add(parameterType.MetadataToken);
770-
set.Add(parameterType.GetElementType().MetadataToken);
771771
}
772772
else if (parameterType is GenericParameter)
773773
{
@@ -914,16 +914,16 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
914914
set.Add(elementType.MetadataToken);
915915
}
916916
}
917-
else if (returnType.MetadataType == MetadataType.Class
918-
|| (returnType.IsValueType && !returnType.IsPrimitive))
919-
{
920-
set.Add(returnType.MetadataToken);
921-
}
922917
else if (returnType is GenericInstanceType genericInstanceType)
923918
{
924919
set.Add(genericInstanceType.MetadataToken);
925920
set.Add(genericInstanceType.ElementType.MetadataToken);
926921
}
922+
else if (returnType.MetadataType == MetadataType.Class
923+
|| (returnType.IsValueType && !returnType.IsPrimitive))
924+
{
925+
set.Add(returnType.MetadataToken);
926+
}
927927

928928
// capture any *parameter* types
929929
foreach (ParameterDefinition p in genericInstanceMethod.Parameters)
@@ -951,16 +951,17 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
951951
set.Add(elementType.MetadataToken);
952952
}
953953
}
954-
else if (parameterType.MetadataType == MetadataType.Class
955-
|| (parameterType.IsValueType && !parameterType.IsPrimitive))
956-
{
957-
set.Add(parameterType.MetadataToken);
958-
}
959954
else if (parameterType is GenericInstanceType genericInstanceType)
960955
{
961956
set.Add(genericInstanceType.MetadataToken);
962957
set.Add(genericInstanceType.ElementType.MetadataToken);
963958
}
959+
else if (parameterType.MetadataType == MetadataType.Class
960+
|| (parameterType.IsValueType && !parameterType.IsPrimitive))
961+
{
962+
set.Add(parameterType.MetadataToken);
963+
}
964+
964965
}
965966

966967
// after handling a GenericInstanceMethod, OK skip the other branches
@@ -1000,16 +1001,17 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
10001001
set.Add(elementType.MetadataToken);
10011002
}
10021003
}
1003-
else if (returnType.MetadataType == MetadataType.Class
1004-
|| (returnType.IsValueType && !returnType.IsPrimitive))
1005-
{
1006-
set.Add(returnType.MetadataToken);
1007-
}
10081004
else if (returnType is GenericInstanceType gitRt)
10091005
{
10101006
set.Add(gitRt.MetadataToken);
10111007
set.Add(gitRt.ElementType.MetadataToken);
10121008
}
1009+
else if (returnType.MetadataType == MetadataType.Class
1010+
|| (returnType.IsValueType && !returnType.IsPrimitive))
1011+
{
1012+
set.Add(returnType.MetadataToken);
1013+
}
1014+
10131015

10141016
// capture any parameters
10151017
foreach (ParameterDefinition p in ((MethodReference)i.Operand).Parameters)
@@ -1027,16 +1029,17 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
10271029
set.Add(e.MetadataToken);
10281030
}
10291031
}
1030-
else if (typeReference.MetadataType == MetadataType.Class
1031-
|| (typeReference.IsValueType && !typeReference.IsPrimitive))
1032-
{
1033-
set.Add(typeReference.MetadataToken);
1034-
}
10351032
else if (typeReference is GenericInstanceType genericInstanceType)
10361033
{
10371034
set.Add(genericInstanceType.MetadataToken);
10381035
set.Add(genericInstanceType.ElementType.MetadataToken);
10391036
}
1037+
else if (typeReference.MetadataType == MetadataType.Class
1038+
|| (typeReference.IsValueType && !typeReference.IsPrimitive))
1039+
{
1040+
set.Add(typeReference.MetadataToken);
1041+
}
1042+
10401043
}
10411044
}
10421045
else if (i.Operand is MethodReference methodReference)
@@ -1201,16 +1204,17 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
12011204

12021205
set.Add(arr.ElementType.MetadataToken);
12031206
}
1204-
else if (ret.MetadataType == MetadataType.Class
1205-
|| (ret.IsValueType && !ret.IsPrimitive))
1206-
{
1207-
set.Add(ret.MetadataToken);
1208-
}
12091207
else if (ret is GenericInstanceType genericInstanceType)
12101208
{
12111209
set.Add(genericInstanceType.MetadataToken);
12121210
set.Add(genericInstanceType.ElementType.MetadataToken);
12131211
}
1212+
else if (ret.MetadataType == MetadataType.Class
1213+
|| (ret.IsValueType && !ret.IsPrimitive))
1214+
{
1215+
set.Add(ret.MetadataToken);
1216+
}
1217+
12141218

12151219
// pin each PARAMETER type as well
12161220
foreach (ParameterDefinition p in ms.Parameters)
@@ -1230,16 +1234,17 @@ private HashSet<MetadataToken> BuildDependencyList(MetadataToken token)
12301234

12311235
set.Add(ap.ElementType.MetadataToken);
12321236
}
1233-
else if (parameterType.MetadataType == MetadataType.Class
1234-
|| (parameterType.IsValueType && !parameterType.IsPrimitive))
1235-
{
1236-
set.Add(parameterType.MetadataToken);
1237-
}
12381237
else if (parameterType is GenericInstanceType genericInstanceType)
12391238
{
12401239
set.Add(genericInstanceType.MetadataToken);
12411240
set.Add(genericInstanceType.ElementType.MetadataToken);
12421241
}
1242+
else if (parameterType.MetadataType == MetadataType.Class
1243+
|| (parameterType.IsValueType && !parameterType.IsPrimitive))
1244+
{
1245+
set.Add(parameterType.MetadataToken);
1246+
}
1247+
12431248
}
12441249

12451250
// pin generic parameters, if any

0 commit comments

Comments
 (0)