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

◆ WriteArrayItems()

void System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayItems ( ElementAccessor[] elements,
TextAccessor text,
ChoiceIdentifierAccessor choice,
TypeDesc arrayTypeDesc,
string arrayName,
string choiceName )
inlineprivate

Definition at line 1251 of file XmlSerializationWriterILGen.cs.

1252 {
1253 TypeDesc arrayElementTypeDesc = arrayTypeDesc.ArrayElementTypeDesc;
1254 if (arrayTypeDesc.IsEnumerable)
1255 {
1259 if (arrayTypeDesc.IsPrivateImplementation)
1260 {
1262 method = typeFromHandle.GetMethod("GetEnumerator", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1264 }
1265 else if (arrayTypeDesc.IsGenericInterface)
1266 {
1267 Type type = typeof(IEnumerable<>).MakeGenericType(arrayElementTypeDesc.Type);
1268 method = type.GetMethod("GetEnumerator", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1270 }
1271 else
1272 {
1273 method = arrayTypeDesc.Type.GetMethod("GetEnumerator", Type.EmptyTypes);
1274 }
1275 ilg.Call(method);
1279 ilg.Load(null);
1280 ilg.If(Cmp.NotEqualTo);
1281 ilg.WhileBegin();
1282 string arrayName2 = arrayName.Replace(arrayTypeDesc.Name, "") + "a" + arrayElementTypeDesc.Name;
1283 string text2 = arrayName.Replace(arrayTypeDesc.Name, "") + "i" + arrayElementTypeDesc.Name;
1284 WriteLocalDecl(text2, "e.Current", arrayElementTypeDesc.Type);
1285 WriteElements(new SourceInfo(text2, null, null, arrayElementTypeDesc.Type, ilg), choiceName + "i", elements, text, choice, arrayName2, writeAccessors: true, isNullable: true);
1287 MethodInfo method2 = typeof(IEnumerator).GetMethod("MoveNext", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1289 ilg.Call(method2);
1291 ilg.WhileEnd();
1292 ilg.EndIf();
1293 return;
1294 }
1295 string text3 = "i" + arrayName.Replace(arrayTypeDesc.Name, "");
1296 string arrayName3 = arrayName.Replace(arrayTypeDesc.Name, "") + "a" + arrayElementTypeDesc.Name;
1297 string text4 = arrayName.Replace(arrayTypeDesc.Name, "") + "i" + arrayElementTypeDesc.Name;
1300 int num = elements.Length + ((text != null) ? 1 : 0);
1301 if (num > 1)
1302 {
1303 WriteLocalDecl(text4, base.RaCodeGen.GetStringForArrayMember(arrayName, text3, arrayTypeDesc), arrayElementTypeDesc.Type);
1304 if (choice != null)
1305 {
1306 WriteLocalDecl(choiceName + "i", base.RaCodeGen.GetStringForArrayMember(choiceName, text3, choice.Mapping.TypeDesc), choice.Mapping.TypeDesc.Type);
1307 }
1308 WriteElements(new SourceInfo(text4, null, null, arrayElementTypeDesc.Type, ilg), choiceName + "i", elements, text, choice, arrayName3, writeAccessors: true, arrayElementTypeDesc.IsNullable);
1309 }
1310 else
1311 {
1312 WriteElements(new SourceInfo(base.RaCodeGen.GetStringForArrayMember(arrayName, text3, arrayTypeDesc), null, null, arrayElementTypeDesc.Type, ilg), null, elements, text, choice, arrayName3, writeAccessors: true, arrayElementTypeDesc.IsNullable);
1313 }
1314 ilg.EndFor();
1315 }
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)
object For(LocalBuilder local, object start, object end)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
void WriteElements(SourceInfo source, string enumSource, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, string arrayName, bool writeAccessors, bool isNullable)
void WriteLocalDecl(string variableName, string initValue, Type type)

References 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.CodeGenerator.EndFor(), System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.For(), System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.CodeGenerator.GetVariable(), System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.CodeGenerator.LoadAddress(), System.Type.MakeGenericType(), System.Xml.Serialization.CodeGenerator.Stloc(), System.text, System.type, System.Xml.Serialization.CodeGenerator.WhileBegin(), System.Xml.Serialization.CodeGenerator.WhileBeginCondition(), System.Xml.Serialization.CodeGenerator.WhileEnd(), System.Xml.Serialization.CodeGenerator.WhileEndCondition(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteElements(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteLocalDecl().

Referenced by System.Xml.Serialization.XmlSerializationWriterILGen.WriteArray(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteElement().