Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionEmitMemberAccessor.cs
Go to the documentation of this file.
5
7
9{
11 {
12 ConstructorInfo constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null);
13 if (type.IsAbstract)
14 {
15 return null;
16 }
17 if (constructor == null && !type.IsValueType)
18 {
19 return null;
20 }
22 ILGenerator iLGenerator = dynamicMethod.GetILGenerator();
23 if (constructor == null)
24 {
25 LocalBuilder local = iLGenerator.DeclareLocal(type);
30 }
31 else
32 {
34 }
37 }
38
43
45 {
46 Type declaringType = constructor.DeclaringType;
47 ParameterInfo[] parameters = constructor.GetParameters();
48 int num = parameters.Length;
49 if (num > 64)
50 {
51 return null;
52 }
54 ILGenerator iLGenerator = dynamicMethod.GetILGenerator();
55 for (int i = 0; i < num; i++)
56 {
57 Type parameterType = parameters[i].ParameterType;
62 }
65 return dynamicMethod;
66 }
67
68 public override JsonTypeInfo.ParameterizedConstructorDelegate<T, TArg0, TArg1, TArg2, TArg3> CreateParameterizedConstructor<T, TArg0, TArg1, TArg2, TArg3>(ConstructorInfo constructor)
69 {
70 return CreateDelegate<JsonTypeInfo.ParameterizedConstructorDelegate<T, TArg0, TArg1, TArg2, TArg3>>(CreateParameterizedConstructor(constructor, typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3)));
71 }
72
74 {
75 Type declaringType = constructor.DeclaringType;
76 ParameterInfo[] parameters = constructor.GetParameters();
77 int num = parameters.Length;
78 DynamicMethod dynamicMethod = new DynamicMethod(ConstructorInfo.ConstructorName, declaringType, new Type[4] { parameterType1, parameterType2, parameterType3, parameterType4 }, typeof(ReflectionEmitMemberAccessor).Module, skipVisibility: true);
79 ILGenerator iLGenerator = dynamicMethod.GetILGenerator();
80 for (int i = 0; i < num; i++)
81 {
83 iLGenerator2.Emit(i switch
84 {
85 0 => OpCodes.Ldarg_0,
86 1 => OpCodes.Ldarg_1,
87 2 => OpCodes.Ldarg_2,
88 3 => OpCodes.Ldarg_3,
89 _ => throw new InvalidOperationException(),
90 });
91 }
94 return dynamicMethod;
95 }
96
101
117
118 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
123
124 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
135
136 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
141
142 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
153
158
160 {
161 MethodInfo getMethod = propertyInfo.GetMethod;
162 Type declaringType = propertyInfo.DeclaringType;
163 Type propertyType = propertyInfo.PropertyType;
165 ILGenerator iLGenerator = dynamicMethod.GetILGenerator();
167 if (declaringType.IsValueType)
168 {
171 }
172 else
173 {
176 }
177 if (propertyType != runtimePropertyType && propertyType.IsValueType)
178 {
180 }
181 iLGenerator.Emit(OpCodes.Ret);
182 return dynamicMethod;
183 }
184
189
208
213
230
235
253
258
260 {
261 return new DynamicMethod(memberName + "Setter", typeof(void), new Type[2]
262 {
266 }
267
268 [return: NotNullIfNotNull("method")]
270 {
271 return (T)(method?.CreateDelegate(typeof(T)));
272 }
273}
static readonly string ConstructorName
static readonly OpCode Castclass
Definition OpCodes.cs:235
static readonly OpCode Unbox
Definition OpCodes.cs:241
static readonly OpCode Ldarg_2
Definition OpCodes.cs:13
static readonly OpCode Unbox_Any
Definition OpCodes.cs:329
static readonly OpCode Callvirt
Definition OpCodes.cs:225
static readonly OpCode Newobj
Definition OpCodes.cs:233
static readonly OpCode Initobj
Definition OpCodes.cs:441
static readonly OpCode Ldarg_3
Definition OpCodes.cs:15
static readonly OpCode Ldfld
Definition OpCodes.cs:245
static readonly OpCode Ldelem_Ref
Definition OpCodes.cs:307
static readonly OpCode Ldarg_1
Definition OpCodes.cs:11
static readonly OpCode Call
Definition OpCodes.cs:83
static readonly OpCode Ret
Definition OpCodes.cs:87
static readonly OpCode Ldloc
Definition OpCodes.cs:425
static readonly OpCode Box
Definition OpCodes.cs:279
static readonly OpCode Ldarg_0
Definition OpCodes.cs:9
static readonly OpCode Ldc_I4_S
Definition OpCodes.cs:67
static readonly OpCode Ldloca_S
Definition OpCodes.cs:41
static readonly OpCode Stfld
Definition OpCodes.cs:249
virtual ? MethodInfo GetMethod
virtual ? MethodInfo SetMethod
static DynamicMethod CreatePropertyGetter(PropertyInfo propertyInfo, Type runtimePropertyType)
override JsonTypeInfo.ParameterizedConstructorDelegate< T, TArg0, TArg1, TArg2, TArg3 > CreateParameterizedConstructor< T, TArg0, TArg1, TArg2, TArg3 >(ConstructorInfo constructor)
override Func< IEnumerable< KeyValuePair< TKey, TValue > >, TCollection > CreateImmutableDictionaryCreateRangeDelegate< TCollection, TKey, TValue >()
static DynamicMethod CreateImmutableEnumerableCreateRangeDelegate(Type collectionType, Type elementType, Type enumerableType)
override Action< object, TProperty > CreateFieldSetter< TProperty >(FieldInfo fieldInfo)
static DynamicMethod CreateParameterizedConstructor(ConstructorInfo constructor, Type parameterType1, Type parameterType2, Type parameterType3, Type parameterType4)
static DynamicMethod CreateParameterizedConstructor(ConstructorInfo constructor)
override Action< object, TProperty > CreatePropertySetter< TProperty >(PropertyInfo propertyInfo)
static DynamicMethod CreateImmutableDictionaryCreateRangeDelegate(Type collectionType, Type keyType, Type valueType, Type enumerableType)
static DynamicMethod CreateFieldSetter(FieldInfo fieldInfo, Type runtimeFieldType)
override Func< object, TProperty > CreatePropertyGetter< TProperty >(PropertyInfo propertyInfo)
static DynamicMethod CreateSetterMethod(string memberName, Type memberType)
override Func< object[], T > CreateParameterizedConstructor< T >(ConstructorInfo constructor)
override JsonTypeInfo.ConstructorDelegate CreateConstructor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type type)
static DynamicMethod CreateGetterMethod(string memberName, Type memberType)
override Func< IEnumerable< TElement >, TCollection > CreateImmutableEnumerableCreateRangeDelegate< TCollection, TElement >()
static DynamicMethod CreateAddMethodDelegate([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type collectionType)
override Func< object, TProperty > CreateFieldGetter< TProperty >(FieldInfo fieldInfo)
static DynamicMethod CreateFieldGetter(FieldInfo fieldInfo, Type runtimeFieldType)
static DynamicMethod CreatePropertySetter(PropertyInfo propertyInfo, Type runtimePropertyType)
static readonly Type[] EmptyTypes
Definition Type.cs:19
new Module Module
Definition Type.cs:51