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

SamboyCoding / Cpp2IL / 12223002682

08 Dec 2024 03:25PM UTC coverage: 28.369% (-0.002%) from 28.371%
12223002682

push

github

web-flow
Improve performance of `ToMethodDescriptor` (#379)

1265 of 6204 branches covered (20.39%)

Branch coverage included in aggregate %.

0 of 12 new or added lines in 1 file covered. (0.0%)

3383 of 10180 relevant lines covered (33.23%)

126051.56 hits per line

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

0.0
/Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs
1
using System.Linq;
2
using AsmResolver.DotNet;
3
using AsmResolver.DotNet.Signatures;
4
using Cpp2IL.Core.Model.Contexts;
5

6
namespace Cpp2IL.Core.Utils.AsmResolver;
7

8
public static class ContextToMethodDescriptor
9
{
10
    private static MethodDefinition GetMethodDefinition(this MethodAnalysisContext context)
11
    {
12
        return context.GetExtraData<MethodDefinition>("AsmResolverMethod") ?? throw new($"AsmResolver method not found in method analysis context for {context}");
×
13
    }
14

15
    private static MethodSignature ToMethodSignature(this MethodAnalysisContext context, ModuleDefinition parentModule)
16
    {
17
        var returnType = context.ReturnTypeContext.ToTypeSignature(parentModule);
×
18
        var parameters = context.Parameters.Select(p => p.ToTypeSignature(parentModule));
×
19

20
        var genericParameterCount = context.Definition?.GenericContainer?.genericParameterCount ?? 0;
×
21

22
        return context.IsStatic
×
23
            ? MethodSignature.CreateStatic(returnType, genericParameterCount, parameters)
×
24
            : MethodSignature.CreateInstance(returnType, genericParameterCount, parameters);
×
25
    }
26

27
    public static IMethodDescriptor ToMethodDescriptor(this MethodAnalysisContext context, ModuleDefinition parentModule)
28
    {
NEW
29
        return context is ConcreteGenericMethodAnalysisContext concreteMethod
×
NEW
30
            ? concreteMethod.ToMethodDescriptor(parentModule)
×
NEW
31
            : parentModule.DefaultImporter.ImportMethod(context.GetMethodDefinition());
×
32
    }
33

34
    public static IMethodDescriptor ToMethodDescriptor(this ConcreteGenericMethodAnalysisContext context, ModuleDefinition parentModule)
35
    {
NEW
36
        var memberReference = new MemberReference(
×
NEW
37
            context.DeclaringType?.ToTypeSignature(parentModule).ToTypeDefOrRef(),
×
NEW
38
            context.Name,
×
NEW
39
            context.BaseMethodContext.ToMethodSignature(parentModule));
×
40

NEW
41
        var methodGenericParameters = context.ResolveMethodGenericParameters();
×
NEW
42
        if (methodGenericParameters.Length == 0)
×
43
        {
NEW
44
            return parentModule.DefaultImporter.ImportMethod(memberReference);
×
45
        }
46
        else
47
        {
NEW
48
            var typeSignatures = methodGenericParameters.Select(p => p.ToTypeSignature(parentModule)).ToArray();
×
NEW
49
            return parentModule.DefaultImporter.ImportMethod(memberReference.MakeGenericInstanceMethod(typeSignatures));
×
50
        }
51
    }
52
}
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

© 2025 Coveralls, Inc