Skip to content

Commit d03ec7d

Browse files
committed
Fix name overrides for constructed types
* Ensure that DefaultName only calls DefaultName and DefaultFullName, not Name or FullName * Remove unnecessary ReferenceTypeAnalysisContext::ToString override * Seal Type and name properties * Use DefaultFullName and FullName for arguments of GenericInstanceTypeAnalysisContext to ensure expected output from its own DefaultFullName and FullName
1 parent 6af99f2 commit d03ec7d

13 files changed

Lines changed: 114 additions & 29 deletions

Cpp2IL.Core/Model/Contexts/ArrayTypeAnalysisContext.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using Cpp2IL.Core.Utils;
23
using LibCpp2IL.BinaryStructures;
34

@@ -11,9 +12,15 @@ public ArrayTypeAnalysisContext(Il2CppType rawType, AssemblyAnalysisContext refe
1112
{
1213
}
1314

14-
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_ARRAY;
15+
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_ARRAY;
1516

16-
public override string DefaultName => $"{ElementType.Name}[{Rank}]";
17+
public sealed override string DefaultName => $"{ElementType.DefaultName}[{Rank}]";
18+
19+
public sealed override string? OverrideName
20+
{
21+
get => $"{ElementType.Name}[{Rank}]";
22+
set => throw new NotSupportedException();
23+
}
1724

1825
public sealed override bool IsValueType => false;
1926

Cpp2IL.Core/Model/Contexts/BoxedTypeAnalysisContext.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ public BoxedTypeAnalysisContext(Il2CppType rawType, AssemblyAnalysisContext refe
1111
{
1212
}
1313

14-
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_BOXED;
14+
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_BOXED;
1515

16-
public override string DefaultName => ElementType.Name;
16+
public sealed override string DefaultName => ElementType.DefaultName;
17+
18+
public sealed override string? OverrideName
19+
{
20+
get => ElementType.OverrideName;
21+
set => ElementType.OverrideName = value;
22+
}
1723

1824
public sealed override bool IsValueType => false;
1925
}

Cpp2IL.Core/Model/Contexts/ByRefTypeAnalysisContext.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using LibCpp2IL.BinaryStructures;
23

34
namespace Cpp2IL.Core.Model.Contexts;
@@ -10,9 +11,15 @@ public ByRefTypeAnalysisContext(Il2CppType rawType, AssemblyAnalysisContext refe
1011
{
1112
}
1213

13-
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_BYREF;
14+
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_BYREF;
1415

15-
public override string DefaultName => $"{ElementType.Name}&";
16+
public sealed override string DefaultName => $"{ElementType.DefaultName}&";
17+
18+
public sealed override string? OverrideName
19+
{
20+
get => $"{ElementType.Name}&";
21+
set => throw new NotSupportedException();
22+
}
1623

1724
public sealed override bool IsValueType => false;
1825

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using LibCpp2IL.BinaryStructures;
23

34
namespace Cpp2IL.Core.Model.Contexts;
@@ -9,11 +10,19 @@ public class CustomModifierTypeAnalysisContext(TypeAnalysisContext elementType,
910

1011
public bool Required { get; } = required;
1112

12-
public override Il2CppTypeEnum Type => Required ? Il2CppTypeEnum.IL2CPP_TYPE_CMOD_REQD : Il2CppTypeEnum.IL2CPP_TYPE_CMOD_OPT;
13+
public sealed override Il2CppTypeEnum Type => Required ? Il2CppTypeEnum.IL2CPP_TYPE_CMOD_REQD : Il2CppTypeEnum.IL2CPP_TYPE_CMOD_OPT;
1314

14-
public override string DefaultName => Required
15-
? $"{ElementType.Name} modreq({ModifierType.Name})"
16-
: $"{ElementType.Name} modopt({ModifierType.Name})";
15+
public sealed override string DefaultName => Required
16+
? $"{ElementType.DefaultName} modreq({ModifierType.DefaultFullName})"
17+
: $"{ElementType.DefaultName} modopt({ModifierType.DefaultFullName})";
18+
19+
public sealed override string? OverrideName
20+
{
21+
get => Required
22+
? $"{ElementType.Name} modreq({ModifierType.FullName})"
23+
: $"{ElementType.Name} modopt({ModifierType.FullName})";
24+
set => throw new NotSupportedException();
25+
}
1726

1827
public sealed override bool IsValueType => ElementType.IsValueType;
1928
}

Cpp2IL.Core/Model/Contexts/GenericInstanceTypeAnalysisContext.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,27 @@ public class GenericInstanceTypeAnalysisContext : ReferencedTypeAnalysisContext
1515

1616
public List<TypeAnalysisContext> GenericArguments { get; } = [];
1717

18-
public override TypeAttributes DefaultAttributes => GenericType.DefaultAttributes;
18+
public sealed override TypeAttributes DefaultAttributes => GenericType.DefaultAttributes;
1919

20-
public override TypeAttributes? OverrideAttributes { get => GenericType.OverrideAttributes; set => GenericType.OverrideAttributes = value; }
20+
public sealed override TypeAttributes? OverrideAttributes { get => GenericType.OverrideAttributes; set => GenericType.OverrideAttributes = value; }
2121

22-
public override string DefaultName => $"{GenericType.Name}<{string.Join(", ", GenericArguments.Select(a => a.Name))}>";
22+
public sealed override string DefaultName => $"{GenericType.DefaultName}<{string.Join(", ", GenericArguments.Select(a => a.DefaultFullName))}>";
2323

24-
public override string DefaultNamespace => GenericType.Namespace;
24+
public sealed override string? OverrideName
25+
{
26+
get => $"{GenericType.Name}<{string.Join(", ", GenericArguments.Select(a => a.FullName))}>";
27+
set => throw new NotSupportedException();
28+
}
29+
30+
public sealed override string DefaultNamespace => GenericType.DefaultNamespace;
31+
32+
public sealed override string? OverrideNamespace
33+
{
34+
get => GenericType.OverrideNamespace;
35+
set => GenericType.OverrideNamespace = value;
36+
}
2537

26-
public override TypeAnalysisContext? DefaultBaseType { get; }
38+
public sealed override TypeAnalysisContext? DefaultBaseType { get; }
2739

2840
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST;
2941

Cpp2IL.Core/Model/Contexts/GenericParameterTypeAnalysisContext.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,17 @@ public class GenericParameterTypeAnalysisContext : ReferencedTypeAnalysisContext
1616

1717
public sealed override string DefaultNamespace => "";
1818

19+
public sealed override string? OverrideNamespace
20+
{
21+
get => null;
22+
set
23+
{
24+
}
25+
}
26+
1927
public int Index { get; }
2028

21-
public override Il2CppTypeEnum Type { get; }
29+
public sealed override Il2CppTypeEnum Type { get; }
2230

2331
public new GenericParameterAttributes DefaultAttributes { get; }
2432
public new GenericParameterAttributes? OverrideAttributes { get; set; }

Cpp2IL.Core/Model/Contexts/PinnedTypeAnalysisContext.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ public PinnedTypeAnalysisContext(Il2CppType rawType, AssemblyAnalysisContext ref
1111
{
1212
}
1313

14-
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_PINNED;
14+
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_PINNED;
1515

16-
public override string DefaultName => ElementType.Name;
16+
public sealed override string DefaultName => ElementType.DefaultName;
17+
18+
public sealed override string? OverrideName
19+
{
20+
get => ElementType.OverrideName;
21+
set => ElementType.OverrideName = value;
22+
}
1723

1824
public sealed override bool IsValueType => false;
1925
}

Cpp2IL.Core/Model/Contexts/PointerTypeAnalysisContext.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using Cpp2IL.Core.Utils;
23
using LibCpp2IL.BinaryStructures;
34

@@ -11,9 +12,15 @@ public PointerTypeAnalysisContext(Il2CppType rawType, AssemblyAnalysisContext re
1112
{
1213
}
1314

14-
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_PTR;
15+
public sealed override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_PTR;
1516

16-
public override string DefaultName => $"{ElementType.Name}*";
17+
public sealed override string DefaultName => $"{ElementType.DefaultName}*";
18+
19+
public sealed override string? OverrideName
20+
{
21+
get => $"{ElementType.Name}*";
22+
set => throw new NotSupportedException();
23+
}
1724

1825
public sealed override bool IsValueType => false;
1926
}

Cpp2IL.Core/Model/Contexts/ReferencedTypeAnalysisContext.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ public abstract class ReferencedTypeAnalysisContext(AssemblyAnalysisContext refe
1515

1616
public override AssemblyAnalysisContext CustomAttributeAssembly => DeclaringAssembly;
1717

18-
public override string ToString()
19-
{
20-
return DefaultName;
21-
}
22-
2318
public override string GetCSharpSourceString()
2419
{
2520
return Name;

Cpp2IL.Core/Model/Contexts/SentinelTypeAnalysisContext.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,20 @@ public sealed class SentinelTypeAnalysisContext(AssemblyAnalysisContext referenc
66
{
77
public override Il2CppTypeEnum Type => Il2CppTypeEnum.IL2CPP_TYPE_SENTINEL;
88
public override string DefaultName => "<<SENTINEL>>";
9+
public override string? OverrideName
10+
{
11+
get => null;
12+
set
13+
{
14+
}
15+
}
16+
public override string DefaultNamespace => "";
17+
public override string? OverrideNamespace
18+
{
19+
get => null;
20+
set
21+
{
22+
}
23+
}
924
public override bool IsValueType => false;
1025
}

0 commit comments

Comments
 (0)