• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

SamboyCoding / Cpp2IL / 15953067190

29 Jun 2025 07:59AM UTC coverage: 34.317% (+0.009%) from 34.308%
15953067190

Pull #477

github

web-flow
Merge e3586a52f into 9ce22e911
Pull Request #477: ToTypeSignature performance improvement

1779 of 6564 branches covered (27.1%)

Branch coverage included in aggregate %.

5 of 6 new or added lines in 1 file covered. (83.33%)

4187 of 10821 relevant lines covered (38.69%)

183657.65 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

70.59
/Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs
1
using System;
2
using System.Linq;
3
using AsmResolver.DotNet;
4
using AsmResolver.DotNet.Signatures;
5
using Cpp2IL.Core.Model.Contexts;
6
using LibCpp2IL.BinaryStructures;
7

8
namespace Cpp2IL.Core.Utils.AsmResolver;
9

10
public static class ContextToTypeSignature
11
{
12
    private static TypeDefinition GetTypeDefinition(this TypeAnalysisContext context)
13
    {
14
        return context.GetExtraData<TypeDefinition>("AsmResolverType") ?? throw new($"AsmResolver type not found in type analysis context for {context.FullName}");
282,384!
15
    }
16

17
    public static TypeSignature ToTypeSignature(this TypeAnalysisContext context, ModuleDefinition parentModule) => context switch
317,394✔
18
    {
317,394✔
19
        ReferencedTypeAnalysisContext referencedTypeAnalysisContext => referencedTypeAnalysisContext.ToTypeSignature(parentModule),
35,010✔
20
        _ => parentModule.DefaultImporter.ImportType(context.GetTypeDefinition()).ToTypeSignature()
282,384✔
21
    };
317,394✔
22

23
    public static TypeSignature ToTypeSignature(this ReferencedTypeAnalysisContext context, ModuleDefinition parentModule) => context switch
35,010!
24
    {
35,010✔
25
        GenericParameterTypeAnalysisContext genericParameterTypeAnalysisContext => genericParameterTypeAnalysisContext.ToTypeSignature(parentModule),
7,515✔
26
        GenericInstanceTypeAnalysisContext genericInstanceTypeAnalysisContext => genericInstanceTypeAnalysisContext.ToTypeSignature(parentModule),
8,920✔
27
        WrappedTypeAnalysisContext wrappedTypeAnalysisContext => wrappedTypeAnalysisContext.ToTypeSignature(parentModule),
18,575✔
28
        SentinelTypeAnalysisContext => SentinelTypeSignature.Instance,
×
NEW
29
        _ => throw new ArgumentException($"Unknown referenced type context {context.GetType()}", nameof(context))
×
30
    };
35,010✔
31

32
    public static GenericInstanceTypeSignature ToTypeSignature(this GenericInstanceTypeAnalysisContext context, ModuleDefinition parentModule)
33
    {
34
        var genericType = context.GenericType.ToTypeSignature(parentModule).ToTypeDefOrRef();
8,920✔
35
        var genericArguments = context.GenericArguments.Select(a => a.ToTypeSignature(parentModule)).ToArray();
19,720✔
36

37
        return new GenericInstanceTypeSignature(genericType, context.IsValueType, genericArguments);
8,920✔
38
    }
39

40
    public static GenericParameterSignature ToTypeSignature(this GenericParameterTypeAnalysisContext context, ModuleDefinition parentModule)
41
    {
42
        return new GenericParameterSignature(parentModule, context.Type == Il2CppTypeEnum.IL2CPP_TYPE_VAR ? GenericParameterType.Type : GenericParameterType.Method, context.Index);
7,515✔
43
    }
44

45
    public static TypeSpecificationSignature ToTypeSignature(this WrappedTypeAnalysisContext context, ModuleDefinition parentModule) => context switch
18,575!
46
    {
18,575✔
47
        SzArrayTypeAnalysisContext szArrayTypeAnalysisContext => szArrayTypeAnalysisContext.ToTypeSignature(parentModule),
10,850✔
48
        PointerTypeAnalysisContext pointerTypeAnalysisContext => pointerTypeAnalysisContext.ToTypeSignature(parentModule),
2,300✔
49
        ByRefTypeAnalysisContext byReferenceTypeAnalysisContext => byReferenceTypeAnalysisContext.ToTypeSignature(parentModule),
5,420✔
50
        ArrayTypeAnalysisContext arrayTypeAnalysisContext => arrayTypeAnalysisContext.ToTypeSignature(parentModule),
5✔
51
        PinnedTypeAnalysisContext pinnedTypeAnalysisContext => pinnedTypeAnalysisContext.ToTypeSignature(parentModule),
×
52
        BoxedTypeAnalysisContext boxedTypeAnalysisContext => boxedTypeAnalysisContext.ToTypeSignature(parentModule),
×
53
        CustomModifierTypeAnalysisContext customModifierTypeAnalysisContext => customModifierTypeAnalysisContext.ToTypeSignature(parentModule),
×
54
        _ => throw new ArgumentException($"Unknown wrapped type context {context.GetType()}", nameof(context))
×
55
    };
18,575✔
56

57
    public static SzArrayTypeSignature ToTypeSignature(this SzArrayTypeAnalysisContext context, ModuleDefinition parentModule)
58
    {
59
        return context.ElementType.ToTypeSignature(parentModule).MakeSzArrayType();
10,850✔
60
    }
61

62
    public static PointerTypeSignature ToTypeSignature(this PointerTypeAnalysisContext context, ModuleDefinition parentModule)
63
    {
64
        return context.ElementType.ToTypeSignature(parentModule).MakePointerType();
2,300✔
65
    }
66

67
    public static ByReferenceTypeSignature ToTypeSignature(this ByRefTypeAnalysisContext context, ModuleDefinition parentModule)
68
    {
69
        return context.ElementType.ToTypeSignature(parentModule).MakeByReferenceType();
5,420✔
70
    }
71

72
    public static ArrayTypeSignature ToTypeSignature(this ArrayTypeAnalysisContext context, ModuleDefinition parentModule)
73
    {
74
        return context.ElementType.ToTypeSignature(parentModule).MakeArrayTypeWithLowerBounds(context.Rank);
5✔
75
    }
76

77
    public static PinnedTypeSignature ToTypeSignature(this PinnedTypeAnalysisContext context, ModuleDefinition parentModule)
78
    {
79
        return context.ElementType.ToTypeSignature(parentModule).MakePinnedType();
×
80
    }
81

82
    public static BoxedTypeSignature ToTypeSignature(this BoxedTypeAnalysisContext context, ModuleDefinition parentModule)
83
    {
84
        // https://github.com/Washi1337/AsmResolver/pull/629
85
        return new BoxedTypeSignature(context.ElementType.ToTypeSignature(parentModule));
×
86
    }
87

88
    public static CustomModifierTypeSignature ToTypeSignature(this CustomModifierTypeAnalysisContext context, ModuleDefinition parentModule)
89
    {
90
        return context.ElementType.ToTypeSignature(parentModule).MakeModifierType(context.ModifierType.ToTypeSignature(parentModule).ToTypeDefOrRef(), context.Required);
×
91
    }
92

93
    public static TypeSignature ToTypeSignature(this ParameterAnalysisContext context, ModuleDefinition parentModule)
94
    {
95
        return context.ParameterType.ToTypeSignature(parentModule);
155✔
96
    }
97

98
    public static TypeSignature ToTypeSignature(this FieldAnalysisContext context, ModuleDefinition parentModule)
99
    {
100
        return context.FieldType.ToTypeSignature(parentModule);
58,895✔
101
    }
102

103
    public static TypeSignature ToTypeSignature(this EventAnalysisContext context, ModuleDefinition parentModule)
104
    {
105
        return context.EventType.ToTypeSignature(parentModule);
75✔
106
    }
107

108
    public static TypeSignature ToTypeSignature(this PropertyAnalysisContext context, ModuleDefinition parentModule)
109
    {
110
        return context.PropertyType.ToTypeSignature(parentModule);
15,360✔
111
    }
112
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc