Skip to content

Commit f246720

Browse files
authored
Fix bug in IsValueType (#476)
1 parent 033d8ba commit f246720

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,20 @@ public static ITypeInfoProvider GetSndnProviderForType(ApplicationAnalysisContex
340340
string ITypeInfoProvider.RewrittenTypeName => Name;
341341
string ITypeInfoProvider.TypeNamespace => Namespace;
342342
public virtual bool IsGenericInstance => false;
343-
public virtual bool IsValueType => Definition?.IsValueType ?? BaseType is { Namespace: "System", Name: "ValueType" };
343+
public virtual bool IsValueType
344+
{
345+
get
346+
{
347+
if (Definition is not null)
348+
return Definition.IsValueType;
349+
350+
if (BaseType is { Namespace: "System", Name: "ValueType" })
351+
return Namespace is not "System" || Name is not "Enum"; // Enum is a reference type
352+
353+
return IsEnumType;
354+
}
355+
}
356+
344357
public bool IsEnumType => Definition?.IsEnumType ?? BaseType is { Namespace: "System", Name: "Enum" };
345358
IEnumerable<ITypeInfoProvider> ITypeInfoProvider.GenericArgumentInfoProviders => [];
346359
IEnumerable<IFieldInfoProvider> ITypeInfoProvider.FieldInfoProviders => Fields;

0 commit comments

Comments
 (0)