Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ WriteHashtable()

string System.Xml.Serialization.XmlSerializationReaderILGen.WriteHashtable ( EnumMapping mapping,
string typeName,
out MethodBuilder get_TableName )
inlineprivate

Definition at line 835 of file XmlSerializationReaderILGen.cs.

836 {
837 get_TableName = null;
838 CodeIdentifier.CheckValidIdentifier(typeName);
839 string text = MakeUnique(mapping, typeName + "Values");
840 if (text == null)
841 {
842 return CodeIdentifier.GetCSharpName(typeName);
843 }
844 string fieldName = MakeUnique(mapping, "_" + text);
845 text = CodeIdentifier.GetCSharpName(text);
848 ilg = new CodeGenerator(typeBuilder);
849 ilg.BeginMethod(typeof(Hashtable), "get_" + text, Type.EmptyTypes, Array.Empty<string>(), MethodAttributes.Assembly | MethodAttributes.HideBySig | MethodAttributes.SpecialName);
850 ilg.Ldarg(0);
852 ilg.Load(null);
853 ilg.If(Cmp.EqualTo);
854 ConstructorInfo constructor = typeof(Hashtable).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
858 ConstantMapping[] constants = mapping.Constants;
859 MethodInfo method = typeof(Hashtable).GetMethod("Add", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
860 {
861 typeof(object),
862 typeof(object)
863 });
864 for (int i = 0; i < constants.Length; i++)
865 {
868 ilg.Ldc(Enum.ToObject(mapping.TypeDesc.Type, constants[i].Value));
869 ilg.ConvertValue(mapping.TypeDesc.Type, typeof(long));
870 ilg.ConvertValue(typeof(long), typeof(object));
871 ilg.Call(method);
872 }
873 ilg.Ldarg(0);
876 ilg.EndIf();
877 ilg.Ldarg(0);
880 propertyBuilder.SetGetMethod(get_TableName);
881 return text;
882 }
static int DefineProperty(QCallModule module, int tkParent, string name, PropertyAttributes attributes, byte[] signature, int sigLength)
static int DefineField(QCallModule module, int tkParent, string name, byte[] signature, int sigLength, FieldAttributes attributes)
void ConvertValue(Type source, Type target)
LocalBuilder DeclareLocal(Type type, string name)
void StoreMember(MemberInfo memberInfo)
void New(ConstructorInfo constructorInfo)
void BeginMethod(Type returnType, string methodName, Type[] argTypes, string[] argNames, MethodAttributes methodAttributes)
Type LoadMember(object obj, MemberInfo memberInfo)
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
void Ldloc(LocalBuilder localBuilder)

References System.Xml.Serialization.CodeGenerator.BeginMethod(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Serialization.CodeGenerator.ConvertValue(), System.Xml.Serialization.CodeGenerator.DeclareLocal(), System.Reflection.Emit.TypeBuilder.DefineField(), System.Reflection.Emit.TypeBuilder.DefineProperty(), System.Xml.Dictionary, System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.EndMethod(), System.Xml.Serialization.CodeIdentifier.GetCSharpName(), System.Xml.Serialization.XmlSerializationILGen.GetCSharpString(), System.Text.RegularExpressions.i, System.Xml.Serialization.CodeGenerator.If(), 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.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.CodeGenerator.LoadMember(), System.Xml.Serialization.XmlSerializationReaderILGen.MakeUnique(), System.Xml.Serialization.CodeGenerator.New(), System.Xml.Serialization.CodeGenerator.Stloc(), System.Xml.Serialization.CodeGenerator.StoreMember(), System.text, System.Enum.ToObject(), and System.Xml.Serialization.XmlSerializationILGen.typeBuilder.

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