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

◆ WriteEnumAndArrayTypes()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteEnumAndArrayTypes ( )
inlineprivate

Definition at line 1008 of file XmlSerializationReaderILGen.cs.

1009 {
1010 TypeScope[] scopes = base.Scopes;
1011 foreach (TypeScope typeScope in scopes)
1012 {
1013 foreach (Mapping typeMapping in typeScope.TypeMappings)
1014 {
1015 if (typeMapping is EnumMapping)
1016 {
1017 EnumMapping enumMapping = (EnumMapping)typeMapping;
1018 ilg.InitElseIf();
1019 WriteQNameEqual("xsiType", enumMapping.TypeName, enumMapping.Namespace);
1020 ilg.AndIf();
1021 MethodInfo method = typeof(XmlSerializationReader).GetMethod("get_Reader", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1022 MethodInfo method2 = typeof(XmlReader).GetMethod("ReadStartElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1023 ilg.Ldarg(0);
1024 ilg.Call(method);
1025 ilg.Call(method2);
1028 MethodBuilder methodBuilder = EnsureMethodBuilder(typeBuilder, methodName, MethodAttributes.Private | MethodAttributes.HideBySig, enumMapping.TypeDesc.Type, new Type[1] { typeof(string) });
1029 MethodInfo method3 = typeof(XmlSerializationReader).GetMethod("CollapseWhitespace", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
1030 MethodInfo method4 = typeof(XmlReader).GetMethod("ReadContentAsString", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1031 ilg.Ldarg(0);
1032 ilg.Ldarg(0);
1033 ilg.Ldarg(0);
1034 ilg.Call(method);
1035 ilg.Call(method4);
1036 ilg.Call(method3);
1038 ilg.ConvertValue(methodBuilder.ReturnType, localBuilder.LocalType);
1040 MethodInfo method5 = typeof(XmlSerializationReader).GetMethod("ReadEndElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1041 ilg.Ldarg(0);
1042 ilg.Call(method5);
1046 }
1047 else
1048 {
1049 if (!(typeMapping is ArrayMapping))
1050 {
1051 continue;
1052 }
1053 ArrayMapping arrayMapping = (ArrayMapping)typeMapping;
1054 if (arrayMapping.TypeDesc.HasDefaultConstructor)
1055 {
1056 ilg.InitElseIf();
1057 WriteQNameEqual("xsiType", arrayMapping.TypeName, arrayMapping.Namespace);
1058 ilg.AndIf();
1059 ilg.EnterScope();
1060 MemberMapping memberMapping = new MemberMapping();
1063 string text = "a";
1064 string arrayName = "z";
1065 Member member = new Member(this, text, arrayName, 0, memberMapping);
1066 TypeDesc typeDesc = arrayMapping.TypeDesc;
1068 if (arrayMapping.TypeDesc.IsValueType)
1069 {
1070 base.RaCodeGen.ILGenForCreateInstance(ilg, typeDesc.Type, ctorInaccessible: false, cast: false);
1071 }
1072 else
1073 {
1074 ilg.Load(null);
1075 }
1077 WriteArray(member.Source, member.ArrayName, arrayMapping, readOnly: false, isNullable: false, -1, 0);
1081 ilg.ExitScope();
1082 }
1083 }
1084 }
1085 }
1086 }
void ConvertValue(Type source, Type target)
LocalBuilder DeclareLocal(Type type, string name)
LocalBuilder DeclareOrGetLocal(Type type, string name)
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
void Ldloc(LocalBuilder localBuilder)
MethodBuilder EnsureMethodBuilder(TypeBuilder typeBuilder, string methodName, MethodAttributes attributes, Type returnType, Type[] parameterTypes)
void WriteQNameEqual(string source, string name, string ns)
void WriteArray(string source, string arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex, int elementIndex)

References System.Xml.Serialization.CodeGenerator.AndIf(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.ArrayName, System.Xml.Serialization.CodeGenerator.Br(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.ConvertValue(), System.Xml.Serialization.CodeGenerator.DeclareLocal(), System.Xml.Serialization.CodeGenerator.DeclareOrGetLocal(), System.Xml.Dictionary, System.Type.EmptyTypes, System.Xml.Serialization.XmlSerializationILGen.EnsureMethodBuilder(), System.Xml.Serialization.CodeGenerator.EnterScope(), System.Xml.Serialization.CodeGenerator.ExitScope(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.InitElseIf(), System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.XmlSerializationILGen.ReferenceMapping(), System.Xml.Serialization.CodeGenerator.ReturnLabel, System.Xml.Serialization.CodeGenerator.ReturnLocal, System.Xml.Serialization.XmlSerializationReaderILGen.Member.Source, System.Xml.Serialization.CodeGenerator.Stloc(), System.text, System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.Xml.Serialization.XmlSerializationReaderILGen.WriteArray(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteQNameEqual().

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