Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MdConstant.cs
Go to the documentation of this file.
1namespace System.Reflection;
2
3internal static class MdConstant
4{
5 public unsafe static object GetValue(MetadataImport scope, int token, RuntimeTypeHandle fieldTypeHandle, bool raw)
6 {
7 long value;
8 int length;
9 CorElementType corElementType;
10 string defaultValue = scope.GetDefaultValue(token, out value, out length, out corElementType);
11 RuntimeType runtimeType = fieldTypeHandle.GetRuntimeType();
12 if (runtimeType.IsEnum && !raw)
13 {
14 long num = 0L;
15 switch (corElementType)
16 {
17 case CorElementType.ELEMENT_TYPE_VOID:
18 return DBNull.Value;
19 case CorElementType.ELEMENT_TYPE_CHAR:
20 num = *(ushort*)(&value);
21 break;
22 case CorElementType.ELEMENT_TYPE_I1:
23 num = *(sbyte*)(&value);
24 break;
25 case CorElementType.ELEMENT_TYPE_U1:
26 num = *(byte*)(&value);
27 break;
28 case CorElementType.ELEMENT_TYPE_I2:
29 num = *(short*)(&value);
30 break;
31 case CorElementType.ELEMENT_TYPE_U2:
32 num = *(ushort*)(&value);
33 break;
34 case CorElementType.ELEMENT_TYPE_I4:
35 num = *(int*)(&value);
36 break;
37 case CorElementType.ELEMENT_TYPE_U4:
38 num = (uint)(*(int*)(&value));
39 break;
40 case CorElementType.ELEMENT_TYPE_I8:
41 num = value;
42 break;
43 case CorElementType.ELEMENT_TYPE_U8:
44 num = value;
45 break;
46 case CorElementType.ELEMENT_TYPE_CLASS:
47 return null;
48 default:
50 }
51 return RuntimeType.CreateEnum(runtimeType, num);
52 }
53 if (runtimeType == typeof(DateTime))
54 {
55 long num2 = 0L;
56 switch (corElementType)
57 {
58 case CorElementType.ELEMENT_TYPE_VOID:
59 return DBNull.Value;
60 case CorElementType.ELEMENT_TYPE_I8:
61 num2 = value;
62 break;
63 case CorElementType.ELEMENT_TYPE_U8:
64 num2 = value;
65 break;
66 case CorElementType.ELEMENT_TYPE_CLASS:
67 return null;
68 default:
70 }
71 return new DateTime(num2);
72 }
73 return corElementType switch
74 {
75 CorElementType.ELEMENT_TYPE_VOID => DBNull.Value,
76 CorElementType.ELEMENT_TYPE_CHAR => *(char*)(&value),
77 CorElementType.ELEMENT_TYPE_I1 => *(sbyte*)(&value),
78 CorElementType.ELEMENT_TYPE_U1 => *(byte*)(&value),
79 CorElementType.ELEMENT_TYPE_I2 => *(short*)(&value),
80 CorElementType.ELEMENT_TYPE_U2 => *(ushort*)(&value),
81 CorElementType.ELEMENT_TYPE_I4 => *(int*)(&value),
82 CorElementType.ELEMENT_TYPE_U4 => *(uint*)(&value),
83 CorElementType.ELEMENT_TYPE_I8 => value,
84 CorElementType.ELEMENT_TYPE_U8 => (ulong)value,
85 CorElementType.ELEMENT_TYPE_BOOLEAN => *(int*)(&value) != 0,
86 CorElementType.ELEMENT_TYPE_R4 => *(float*)(&value),
87 CorElementType.ELEMENT_TYPE_R8 => *(double*)(&value),
88 CorElementType.ELEMENT_TYPE_STRING => defaultValue ?? string.Empty,
89 CorElementType.ELEMENT_TYPE_CLASS => null,
91 };
92 }
93}
static readonly DBNull Value
Definition DBNull.cs:8
static unsafe object GetValue(MetadataImport scope, int token, RuntimeTypeHandle fieldTypeHandle, bool raw)
Definition MdConstant.cs:5
static object CreateEnum(RuntimeType enumType, long value)
static string Arg_BadLiteralFormat
Definition SR.cs:84
Definition SR.cs:7
virtual bool IsEnum
Definition Type.cs:227
string GetDefaultValue(int mdToken, out long value, out int length, out CorElementType corElementType)