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

SamboyCoding / Cpp2IL / 15012587440

14 May 2025 04:55AM UTC coverage: 34.729% (-0.1%) from 34.826%
15012587440

Pull #452

github

web-flow
Merge 21c866c60 into e93c0fecc
Pull Request #452: Expand type system to support more types

1813 of 6508 branches covered (27.86%)

Branch coverage included in aggregate %.

22 of 83 new or added lines in 10 files covered. (26.51%)

4 existing lines in 3 files now uncovered.

4158 of 10685 relevant lines covered (38.91%)

160672.82 hits per line

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

47.49
/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; }
186,567✔
11
    public TypeAnalysisContext SystemVoidType { get; }
146,946✔
12
    public TypeAnalysisContext SystemBooleanType { get; }
57,631✔
13
    public TypeAnalysisContext SystemCharType { get; }
3,695✔
14
    public TypeAnalysisContext SystemSByteType { get; }
402✔
15
    public TypeAnalysisContext SystemByteType { get; }
3,958✔
16
    public TypeAnalysisContext SystemInt16Type { get; }
552✔
17
    public TypeAnalysisContext SystemUInt16Type { get; }
762✔
18
    public TypeAnalysisContext SystemInt32Type { get; }
159,671✔
19
    public TypeAnalysisContext SystemUInt32Type { get; }
2,023✔
20
    public TypeAnalysisContext SystemInt64Type { get; }
3,174✔
21
    public TypeAnalysisContext SystemUInt64Type { get; }
755✔
22
    public TypeAnalysisContext SystemSingleType { get; }
9,418✔
23
    public TypeAnalysisContext SystemDoubleType { get; }
797✔
24
    public TypeAnalysisContext SystemIntPtrType { get; }
19,065✔
25
    public TypeAnalysisContext SystemUIntPtrType { get; }
62✔
26
    public TypeAnalysisContext SystemExceptionType { get; }
×
27
    public TypeAnalysisContext SystemStringType { get; }
32,004✔
28
    public TypeAnalysisContext SystemTypedReferenceType { get; }
27✔
29
    public TypeAnalysisContext SystemTypeType { get; }
×
30
    public TypeAnalysisContext SystemAttributeType { get; }
×
31
    public TypeAnalysisContext? UnmanagedCallersOnlyAttributeType { get; }
4,560✔
32

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

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

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

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

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

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

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

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

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

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

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

67
        SystemExceptionType = systemAssembly.GetTypeByFullName("System.Exception")!;
22✔
68
        SystemAttributeType = systemAssembly.GetTypeByFullName("System.Attribute")!;
22✔
69
        
70
        UnmanagedCallersOnlyAttributeType = systemAssembly.GetTypeByFullName("System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute");
22✔
71
    }
22✔
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

119
    public TypeAnalysisContext GetPrimitive(Il2CppTypeEnum type) => type switch
627,458!
120
    {
627,458✔
121
        Il2CppTypeEnum.IL2CPP_TYPE_OBJECT => SystemObjectType,
186,560✔
122
        Il2CppTypeEnum.IL2CPP_TYPE_VOID => SystemVoidType,
146,940✔
123
        Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN => SystemBooleanType,
57,629✔
124
        Il2CppTypeEnum.IL2CPP_TYPE_CHAR => SystemCharType,
3,693✔
125
        Il2CppTypeEnum.IL2CPP_TYPE_I1 => SystemSByteType,
400✔
126
        Il2CppTypeEnum.IL2CPP_TYPE_U1 => SystemByteType,
3,956✔
127
        Il2CppTypeEnum.IL2CPP_TYPE_I2 => SystemInt16Type,
550✔
128
        Il2CppTypeEnum.IL2CPP_TYPE_U2 => SystemUInt16Type,
760✔
129
        Il2CppTypeEnum.IL2CPP_TYPE_I4 => SystemInt32Type,
159,665✔
130
        Il2CppTypeEnum.IL2CPP_TYPE_U4 => SystemUInt32Type,
2,021✔
131
        Il2CppTypeEnum.IL2CPP_TYPE_I => SystemIntPtrType,
19,063✔
132
        Il2CppTypeEnum.IL2CPP_TYPE_U => SystemUIntPtrType,
60✔
133
        Il2CppTypeEnum.IL2CPP_TYPE_I8 => SystemInt64Type,
3,172✔
134
        Il2CppTypeEnum.IL2CPP_TYPE_U8 => SystemUInt64Type,
753✔
135
        Il2CppTypeEnum.IL2CPP_TYPE_R4 => SystemSingleType,
9,416✔
136
        Il2CppTypeEnum.IL2CPP_TYPE_R8 => SystemDoubleType,
795✔
137
        Il2CppTypeEnum.IL2CPP_TYPE_STRING => SystemStringType,
32,000✔
138
        Il2CppTypeEnum.IL2CPP_TYPE_TYPEDBYREF => SystemTypedReferenceType,
25✔
NEW
139
        Il2CppTypeEnum.IL2CPP_TYPE_IL2CPP_TYPE_INDEX => SystemTypeType,
×
NEW
140
        _ => throw new ArgumentException("Type is not a primitive", nameof(type))
×
141
    };
627,458✔
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