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

◆ WriteMemberEnd() [2/2]

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberEnd ( Member[] members,
bool soapRefs )
inlineprivate

Definition at line 2179 of file XmlSerializationReaderILGen.cs.

2180 {
2181 foreach (Member member in members)
2182 {
2183 if (!member.IsArrayLike)
2184 {
2185 continue;
2186 }
2187 TypeDesc typeDesc = member.Mapping.TypeDesc;
2188 if (typeDesc.IsArray)
2189 {
2190 WriteSourceBegin(member.Source);
2191 string arrayName = member.ArrayName;
2192 string name = "c" + arrayName;
2193 MethodInfo method = typeof(XmlSerializationReader).GetMethod("ShrinkArray", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[4]
2194 {
2195 typeof(Array),
2196 typeof(int),
2197 typeof(Type),
2198 typeof(bool)
2199 });
2200 ilg.Ldarg(0);
2203 ilg.Ldc(typeDesc.ArrayElementTypeDesc.Type);
2204 ilg.Ldc(member.IsNullable);
2205 ilg.Call(method);
2206 ilg.ConvertValue(method.ReturnType, typeDesc.Type);
2207 WriteSourceEnd(member.Source, typeDesc.Type);
2208 if (member.Mapping.ChoiceIdentifier != null)
2209 {
2210 WriteSourceBegin(member.ChoiceSource);
2211 arrayName = member.ChoiceArrayName;
2212 name = "c" + arrayName;
2213 ilg.Ldarg(0);
2216 ilg.Ldc(member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.Type);
2217 ilg.Ldc(member.IsNullable);
2218 ilg.Call(method);
2219 ilg.ConvertValue(method.ReturnType, member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.Type.MakeArrayType());
2220 WriteSourceEnd(member.ChoiceSource, member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.Type.MakeArrayType());
2221 }
2222 }
2223 else if (typeDesc.IsValueType)
2224 {
2225 LocalBuilder local = ilg.GetLocal(member.ArrayName);
2226 WriteSourceBegin(member.Source);
2227 ilg.Ldloc(local);
2228 WriteSourceEnd(member.Source, local.LocalType);
2229 }
2230 }
2231 }
void ConvertValue(Type source, Type target)
void Call(MethodInfo methodInfo)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)

References System.Xml.Serialization.XmlSerializationReaderILGen.Member.ArrayName, System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.ChoiceArrayName, System.Xml.Serialization.AccessorMapping.ChoiceIdentifier, System.Xml.Serialization.XmlSerializationReaderILGen.Member.ChoiceSource, System.Xml.Serialization.CodeGenerator.ConvertValue(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.XmlSerializationReaderILGen.Member.IsArrayLike, System.Xml.Serialization.XmlSerializationReaderILGen.Member.IsNullable, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Type.MakeArrayType(), System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.XmlSerializationReaderILGen.Member.Mapping, System.Text.RegularExpressions.name, System.Xml.Serialization.XmlSerializationReaderILGen.Member.Source, System.Xml.Serialization.TypeDesc.Type, System.Xml.Serialization.AccessorMapping.TypeDesc, System.Xml.Serialization.TypeMapping.TypeDesc, System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceBegin(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceEnd().