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

◆ GenerateLiteralMembersElement()

string System.Xml.Serialization.XmlSerializationReaderILGen.GenerateLiteralMembersElement ( XmlMembersMapping xmlMembersMapping)
inlineprivate

Definition at line 387 of file XmlSerializationReaderILGen.cs.

388 {
389 ElementAccessor accessor = xmlMembersMapping.Accessor;
390 MemberMapping[] members = ((MembersMapping)accessor.Mapping).Members;
391 bool hasWrapperElement = ((MembersMapping)accessor.Mapping).HasWrapperElement;
392 string text = NextMethodName(accessor.Name);
393 ilg = new CodeGenerator(typeBuilder);
394 ilg.BeginMethod(typeof(object[]), text, Type.EmptyTypes, Array.Empty<string>(), MethodAttributes.Public | MethodAttributes.HideBySig);
395 ilg.Load(null);
397 MethodInfo method = typeof(XmlSerializationReader).GetMethod("get_Reader", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
398 MethodInfo method2 = typeof(XmlReader).GetMethod("MoveToContent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
399 ilg.Ldarg(0);
400 ilg.Call(method);
402 ilg.Pop();
404 ilg.NewArray(typeof(object), members.Length);
408 {
410 WriteIsStartTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
411 }
412 Member anyText = null;
413 Member anyElement = null;
414 Member anyAttribute = null;
418 for (int i = 0; i < members.Length; i++)
419 {
420 MemberMapping memberMapping = members[i];
421 string text2 = $"p[{i}]";
422 string arraySource = text2;
423 if (memberMapping.Xmlns != null)
424 {
425 arraySource = $"(({memberMapping.TypeDesc.CSharpName}){text2})";
426 }
430 if (!memberMapping.IsSequence)
431 {
432 member.ParamsReadSource = $"paramsRead[{i}]";
433 }
434 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
435 {
436 string text3 = memberMapping.Name + "Specified";
437 for (int j = 0; j < members.Length; j++)
438 {
439 if (members[j].Name == text3)
440 {
442 break;
443 }
444 }
445 }
446 bool flag = false;
447 if (memberMapping.Text != null)
448 {
450 }
451 if (memberMapping.Attribute != null && memberMapping.Attribute.Any)
452 {
454 }
455 if (memberMapping.Attribute != null || memberMapping.Xmlns != null)
456 {
457 list3.Add(member);
458 }
459 else if (memberMapping.Text != null)
460 {
461 list2.Add(member);
462 }
463 if (!memberMapping.IsSequence)
464 {
465 for (int k = 0; k < memberMapping.Elements.Length; k++)
466 {
467 if (memberMapping.Elements[k].Any && memberMapping.Elements[k].Name.Length == 0)
468 {
470 if (memberMapping.Attribute == null && memberMapping.Text == null)
471 {
473 }
474 flag = true;
475 break;
476 }
477 }
478 }
479 if (memberMapping.Attribute != null || memberMapping.Text != null || flag)
480 {
481 list.Add(member2);
482 continue;
483 }
484 if (memberMapping.TypeDesc.IsArrayLike && (memberMapping.Elements.Length != 1 || !(memberMapping.Elements[0].Mapping is ArrayMapping)))
485 {
486 list.Add(member2);
488 continue;
489 }
490 if (memberMapping.TypeDesc.IsArrayLike && !memberMapping.TypeDesc.IsArray)
491 {
493 }
494 list.Add(member);
495 }
496 Member[] array = list.ToArray();
497 Member[] members2 = list2.ToArray();
498 if (array.Length != 0 && array[0].Mapping.IsReturnValue)
499 {
500 MethodInfo method3 = typeof(XmlSerializationReader).GetMethod("set_IsReturnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(bool) });
501 ilg.Ldarg(0);
504 }
505 WriteParamsRead(members.Length);
506 if (list3.Count > 0)
507 {
508 Member[] members3 = list3.ToArray();
512 MethodInfo method4 = typeof(XmlReader).GetMethod("MoveToElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
513 ilg.Ldarg(0);
514 ilg.Call(method);
516 ilg.Pop();
517 }
520 {
521 MethodInfo method5 = typeof(XmlReader).GetMethod("get_IsEmptyElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
522 ilg.Ldarg(0);
523 ilg.Call(method);
525 ilg.If();
526 MethodInfo method6 = typeof(XmlReader).GetMethod("Skip", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
527 ilg.Ldarg(0);
528 ilg.Call(method);
530 ilg.Ldarg(0);
531 ilg.Call(method);
533 ilg.Pop();
535 ilg.EndIf();
536 MethodInfo method7 = typeof(XmlReader).GetMethod("ReadStartElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
537 ilg.Ldarg(0);
538 ilg.Call(method);
540 }
541 if (IsSequence(array))
542 {
543 ilg.Ldc(0);
544 ilg.Stloc(typeof(int), "state");
545 }
547 string text4 = "UnknownNode((object)p, " + ExpectedElements(array) + ");";
549 ilg.Ldarg(0);
550 ilg.Call(method);
552 ilg.Pop();
556 {
557 MethodInfo method8 = typeof(XmlSerializationReader).GetMethod("ReadEndElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
558 ilg.Ldarg(0);
560 WriteUnknownNode("UnknownNode", "null", accessor, anyIfs: true);
561 ilg.Ldarg(0);
562 ilg.Call(method);
564 ilg.Pop();
566 }
567 ilg.Ldloc(ilg.GetLocal("p"));
568 ilg.EndMethod();
569 return text;
570 }
void Add(TKey key, TValue value)
LocalBuilder DeclareLocal(Type type, string name)
void BeginMethod(Type returnType, string methodName, Type[] argTypes, string[] argNames, MethodAttributes methodAttributes)
void Call(MethodInfo methodInfo)
void NewArray(Type elementType, object len)
void Stloc(Type type, string name)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
void WriteAttributes(Member[] members, Member anyAttribute, string elseCall, LocalBuilder firstParam)
void WriteMemberElements(Member[] members, string elementElseString, string elseString, Member anyElement, Member anyText)
void WriteUnknownNode(string func, string node, ElementAccessor e, bool anyIfs)
void InitializeValueTypes(string arrayName, MemberMapping[] mappings)
string GetChoiceIdentifierSource(MemberMapping[] mappings, MemberMapping member)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.array, System.Xml.Serialization.CodeGenerator.BeginMethod(), System.Xml.Serialization.CodeGenerator.Call(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Serialization.CodeGenerator.DeclareLocal(), System.Xml.Dictionary, System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.EndMethod(), System.Xml.Serialization.XmlSerializationReaderILGen.ExpectedElements(), System.Xml.Serialization.XmlSerializationReaderILGen.GetChoiceIdentifierSource(), System.Xml.Serialization.CodeGenerator.GetLocal(), System.Text.RegularExpressions.i, System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.XmlSerializationReaderILGen.InitializeValueTypes(), System.Xml.Serialization.XmlSerializationReaderILGen.IsSequence(), System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.list, System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Name, System.Xml.Serialization.CodeGenerator.NewArray(), System.Xml.Serialization.XmlSerializationReaderILGen.NextMethodName(), System.Xml.Serialization.CodeGenerator.Pop(), System.Xml.Serialization.CodeGenerator.ReturnLocal, System.Xml.Serialization.CodeGenerator.Stloc(), System.text, System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.Xml.Serialization.CodeGenerator.WhileContinue(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttributes(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteIsStartTag(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberBegin(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElements(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberEnd(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteParamsRead(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteUnknownNode(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteWhileLoopEnd(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteWhileNotLoopStart().

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