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

SamboyCoding / Cpp2IL / 15377127841

01 Jun 2025 04:27PM UTC coverage: 34.079% (+0.02%) from 34.056%
15377127841

Pull #461

github

web-flow
Merge e10c9aae2 into 84cff1948
Pull Request #461: Improve Il2CppType handling

1751 of 6534 branches covered (26.8%)

Branch coverage included in aggregate %.

2 of 7 new or added lines in 5 files covered. (28.57%)

21 existing lines in 1 file now uncovered.

4145 of 10767 relevant lines covered (38.5%)

183431.67 hits per line

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

25.7
/Cpp2IL.Core/Model/Contexts/SystemTypesContext.cs
1
using System;
2
using LibCpp2IL.BinaryStructures;
3

4
namespace Cpp2IL.Core.Model.Contexts;
5

6
public class SystemTypesContext
7
{
8
    private readonly ApplicationAnalysisContext _appContext;
9

10
    public TypeAnalysisContext SystemObjectType { get; }
12✔
11
    public TypeAnalysisContext SystemVoidType { get; }
6✔
12
    public TypeAnalysisContext SystemBooleanType { get; }
2✔
13
    public TypeAnalysisContext SystemCharType { get; }
2✔
14
    public TypeAnalysisContext SystemSByteType { get; }
2✔
15
    public TypeAnalysisContext SystemByteType { get; }
2✔
16
    public TypeAnalysisContext SystemInt16Type { get; }
2✔
17
    public TypeAnalysisContext SystemUInt16Type { get; }
2✔
18
    public TypeAnalysisContext SystemInt32Type { get; }
13✔
19
    public TypeAnalysisContext SystemUInt32Type { get; }
2✔
20
    public TypeAnalysisContext SystemInt64Type { get; }
2✔
21
    public TypeAnalysisContext SystemUInt64Type { get; }
2✔
22
    public TypeAnalysisContext SystemSingleType { get; }
2✔
23
    public TypeAnalysisContext SystemDoubleType { get; }
2✔
24
    public TypeAnalysisContext SystemIntPtrType { get; }
2✔
25
    public TypeAnalysisContext SystemUIntPtrType { get; }
2✔
26
    public TypeAnalysisContext SystemExceptionType { get; }
×
27
    public TypeAnalysisContext SystemStringType { get; }
4✔
28
    public TypeAnalysisContext SystemTypedReferenceType { get; }
2✔
29
    public TypeAnalysisContext SystemTypeType { get; }
×
30
    public TypeAnalysisContext SystemAttributeType { get; }
×
31
    public TypeAnalysisContext? UnmanagedCallersOnlyAttributeType { get; }
4,560✔
32

33
    public SystemTypesContext(ApplicationAnalysisContext appContext)
27✔
34
    {
35
        _appContext = appContext;
27✔
36

37
        var systemAssembly = _appContext.GetAssemblyByName("mscorlib") ?? throw new("Could not find system assembly");
27!
38

39
        SystemObjectType = systemAssembly.GetTypeByFullName("System.Object")!;
27✔
40
        SystemVoidType = systemAssembly.GetTypeByFullName("System.Void")!;
27✔
41

42
        SystemBooleanType = systemAssembly.GetTypeByFullName("System.Boolean")!;
27✔
43
        SystemCharType = systemAssembly.GetTypeByFullName("System.Char")!;
27✔
44

45
        SystemSByteType = systemAssembly.GetTypeByFullName("System.SByte")!;
27✔
46
        SystemByteType = systemAssembly.GetTypeByFullName("System.Byte")!;
27✔
47

48
        SystemInt16Type = systemAssembly.GetTypeByFullName("System.Int16")!;
27✔
49
        SystemUInt16Type = systemAssembly.GetTypeByFullName("System.UInt16")!;
27✔
50

51
        SystemInt32Type = systemAssembly.GetTypeByFullName("System.Int32")!;
27✔
52
        SystemUInt32Type = systemAssembly.GetTypeByFullName("System.UInt32")!;
27✔
53

54
        SystemInt64Type = systemAssembly.GetTypeByFullName("System.Int64")!;
27✔
55
        SystemUInt64Type = systemAssembly.GetTypeByFullName("System.UInt64")!;
27✔
56

57
        SystemSingleType = systemAssembly.GetTypeByFullName("System.Single")!;
27✔
58
        SystemDoubleType = systemAssembly.GetTypeByFullName("System.Double")!;
27✔
59

60
        SystemIntPtrType = systemAssembly.GetTypeByFullName("System.IntPtr")!;
27✔
61
        SystemUIntPtrType = systemAssembly.GetTypeByFullName("System.UIntPtr")!;
27✔
62

63
        SystemStringType = systemAssembly.GetTypeByFullName("System.String")!;
27✔
64
        SystemTypedReferenceType = systemAssembly.GetTypeByFullName("System.TypedReference")!;
27✔
65
        SystemTypeType = systemAssembly.GetTypeByFullName("System.Type")!;
27✔
66

67
        SystemExceptionType = systemAssembly.GetTypeByFullName("System.Exception")!;
27✔
68
        SystemAttributeType = systemAssembly.GetTypeByFullName("System.Attribute")!;
27✔
69
        
70
        UnmanagedCallersOnlyAttributeType = systemAssembly.GetTypeByFullName("System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute");
27✔
71
    }
27✔
72

73
    public bool TryGetIl2CppTypeEnum(TypeAnalysisContext context, out Il2CppTypeEnum value)
74
    {
75
        if (context == SystemBooleanType)
×
76
            value = Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN;
×
77
        else if (context == SystemCharType)
×
78
            value = Il2CppTypeEnum.IL2CPP_TYPE_CHAR;
×
79
        else if (context == SystemSByteType)
×
80
            value = Il2CppTypeEnum.IL2CPP_TYPE_I1;
×
81
        else if (context == SystemByteType)
×
82
            value = Il2CppTypeEnum.IL2CPP_TYPE_U1;
×
83
        else if (context == SystemInt16Type)
×
84
            value = Il2CppTypeEnum.IL2CPP_TYPE_I2;
×
85
        else if (context == SystemUInt16Type)
×
86
            value = Il2CppTypeEnum.IL2CPP_TYPE_U2;
×
87
        else if (context == SystemInt32Type)
×
88
            value = Il2CppTypeEnum.IL2CPP_TYPE_I4;
×
89
        else if (context == SystemUInt32Type)
×
90
            value = Il2CppTypeEnum.IL2CPP_TYPE_U4;
×
91
        else if (context == SystemInt64Type)
×
92
            value = Il2CppTypeEnum.IL2CPP_TYPE_I8;
×
93
        else if (context == SystemUInt64Type)
×
94
            value = Il2CppTypeEnum.IL2CPP_TYPE_U8;
×
95
        else if (context == SystemSingleType)
×
96
            value = Il2CppTypeEnum.IL2CPP_TYPE_R4;
×
97
        else if (context == SystemDoubleType)
×
98
            value = Il2CppTypeEnum.IL2CPP_TYPE_R8;
×
99
        else if (context == SystemIntPtrType)
×
100
            value = Il2CppTypeEnum.IL2CPP_TYPE_I;
×
101
        else if (context == SystemUIntPtrType)
×
102
            value = Il2CppTypeEnum.IL2CPP_TYPE_U;
×
103
        else if (context == SystemStringType)
×
104
            value = Il2CppTypeEnum.IL2CPP_TYPE_STRING;
×
105
        else if (context == SystemTypedReferenceType)
×
106
            value = Il2CppTypeEnum.IL2CPP_TYPE_TYPEDBYREF;
×
107
        else if (context == SystemObjectType)
×
108
            value = Il2CppTypeEnum.IL2CPP_TYPE_OBJECT;
×
109
        else if (context == SystemVoidType)
×
110
            value = Il2CppTypeEnum.IL2CPP_TYPE_VOID;
×
111
        else
112
        {
113
            value = default;
×
114
            return false;
×
115
        }
116
        return true;
×
117
    }
118

UNCOV
119
    public TypeAnalysisContext GetPrimitive(Il2CppTypeEnum type) => type switch
×
UNCOV
120
    {
×
UNCOV
121
        Il2CppTypeEnum.IL2CPP_TYPE_OBJECT => SystemObjectType,
×
UNCOV
122
        Il2CppTypeEnum.IL2CPP_TYPE_VOID => SystemVoidType,
×
UNCOV
123
        Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN => SystemBooleanType,
×
UNCOV
124
        Il2CppTypeEnum.IL2CPP_TYPE_CHAR => SystemCharType,
×
UNCOV
125
        Il2CppTypeEnum.IL2CPP_TYPE_I1 => SystemSByteType,
×
UNCOV
126
        Il2CppTypeEnum.IL2CPP_TYPE_U1 => SystemByteType,
×
UNCOV
127
        Il2CppTypeEnum.IL2CPP_TYPE_I2 => SystemInt16Type,
×
UNCOV
128
        Il2CppTypeEnum.IL2CPP_TYPE_U2 => SystemUInt16Type,
×
UNCOV
129
        Il2CppTypeEnum.IL2CPP_TYPE_I4 => SystemInt32Type,
×
UNCOV
130
        Il2CppTypeEnum.IL2CPP_TYPE_U4 => SystemUInt32Type,
×
UNCOV
131
        Il2CppTypeEnum.IL2CPP_TYPE_I => SystemIntPtrType,
×
UNCOV
132
        Il2CppTypeEnum.IL2CPP_TYPE_U => SystemUIntPtrType,
×
UNCOV
133
        Il2CppTypeEnum.IL2CPP_TYPE_I8 => SystemInt64Type,
×
UNCOV
134
        Il2CppTypeEnum.IL2CPP_TYPE_U8 => SystemUInt64Type,
×
UNCOV
135
        Il2CppTypeEnum.IL2CPP_TYPE_R4 => SystemSingleType,
×
UNCOV
136
        Il2CppTypeEnum.IL2CPP_TYPE_R8 => SystemDoubleType,
×
UNCOV
137
        Il2CppTypeEnum.IL2CPP_TYPE_STRING => SystemStringType,
×
UNCOV
138
        Il2CppTypeEnum.IL2CPP_TYPE_TYPEDBYREF => SystemTypedReferenceType,
×
139
        Il2CppTypeEnum.IL2CPP_TYPE_IL2CPP_TYPE_INDEX => SystemTypeType,
×
140
        _ => throw new ArgumentException("Type is not a primitive", nameof(type))
×
UNCOV
141
    };
×
142
}
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