Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WriteEnumMethod()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteEnumMethod ( EnumMapping mapping)
inlineprivate

Definition at line 885 of file XmlSerializationReaderILGen.cs.

886 {
888 if (mapping.IsFlags)
889 {
891 }
892 base.MethodNames.TryGetValue(mapping, out var value);
893 string cSharpName = mapping.TypeDesc.CSharpName;
894 List<Type> list = new List<Type>();
896 Type type = mapping.TypeDesc.Type;
897 Type underlyingType = Enum.GetUnderlyingType(type);
898 list.Add(typeof(string));
899 list2.Add("s");
900 ilg = new CodeGenerator(typeBuilder);
901 ilg.BeginMethod(type, GetMethodBuilder(value), list.ToArray(), list2.ToArray(), MethodAttributes.Private | MethodAttributes.HideBySig);
902 ConstantMapping[] constants = mapping.Constants;
903 if (mapping.IsFlags)
904 {
905 MethodInfo method = typeof(XmlSerializationReader).GetMethod("ToEnum", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, new Type[3]
906 {
907 typeof(string),
908 typeof(Hashtable),
909 typeof(string)
910 });
911 ilg.Ldarg("s");
912 ilg.Ldarg(0);
915 ilg.Call(method);
916 if (underlyingType != typeof(long))
917 {
919 }
922 }
923 else
924 {
930 ilg.Ldarg("s");
935 foreach (ConstantMapping constantMapping in constants)
936 {
937 CodeIdentifier.CheckValidIdentifier(constantMapping.Name);
938 if (hashSet.Add(constantMapping.XmlName))
939 {
943 MethodInfo method2 = typeof(string).GetMethod("op_Equality", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
944 {
945 typeof(string),
946 typeof(string)
947 });
951 list4.Add(Enum.ToObject(mapping.TypeDesc.Type, constantMapping.Value));
952 }
953 }
954 ilg.Br(label);
955 for (int j = 0; j < list3.Count; j++)
956 {
958 ilg.Ldc(list4[j]);
961 }
962 MethodInfo method3 = typeof(XmlSerializationReader).GetMethod("CreateUnknownConstantException", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
963 {
964 typeof(string),
965 typeof(Type)
966 });
968 ilg.Ldarg(0);
969 ilg.Ldarg("s");
970 ilg.Ldc(mapping.TypeDesc.Type);
972 ilg.Throw();
974 }
977 ilg.EndMethod();
978 }
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
void Add(TKey key, TValue value)
void ConvertValue(Type source, Type target)
void BeginMethod(Type returnType, string methodName, Type[] argTypes, string[] argNames, MethodAttributes methodAttributes)
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
void Ldloc(LocalBuilder localBuilder)
MethodBuilderInfo GetMethodBuilder(string methodName)
string WriteHashtable(EnumMapping mapping, string typeName, out MethodBuilder get_TableName)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Serialization.CodeGenerator.BeginMethod(), System.Xml.Serialization.CodeGenerator.Br(), System.Xml.Serialization.CodeGenerator.Brfalse(), System.Xml.Serialization.CodeGenerator.Brtrue(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Serialization.CodeGenerator.ConvertValue(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Serialization.CodeGenerator.DefineLabel(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.EndMethod(), System.Xml.Serialization.XmlSerializationILGen.GetCSharpString(), System.Xml.Serialization.XmlSerializationILGen.GetMethodBuilder(), System.Xml.Serialization.CodeGenerator.GetTempLocal(), System.Enum.GetUnderlyingType(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Ldstr(), System.list, System.Xml.Serialization.CodeGenerator.MarkLabel(), System.Xml.Serialization.CodeGenerator.ReturnLabel, System.Xml.Serialization.CodeGenerator.ReturnLocal, System.Xml.Serialization.CodeGenerator.Stloc(), System.Xml.Serialization.CodeGenerator.Throw(), System.Enum.ToObject(), System.Collections.Generic.Dictionary< TKey, TValue >.TryGetValue(), System.type, System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.value, and System.Xml.Serialization.XmlSerializationReaderILGen.WriteHashtable().

Referenced by System.Xml.Serialization.XmlSerializationReaderILGen.GenerateMethod().