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

◆ WriteEnumAndArrayTypes()

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

Definition at line 661 of file XmlSerializationWriterILGen.cs.

662 {
663 TypeScope[] scopes = base.Scopes;
664 foreach (TypeScope typeScope in scopes)
665 {
666 foreach (Mapping typeMapping in typeScope.TypeMappings)
667 {
668 if (typeMapping is EnumMapping)
669 {
670 EnumMapping enumMapping = (EnumMapping)typeMapping;
671 ilg.InitElseIf();
672 WriteTypeCompare("t", enumMapping.TypeDesc.Type);
673 ilg.AndIf();
675 MethodInfo method = typeof(XmlSerializationWriter).GetMethod("get_Writer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
676 MethodInfo method2 = typeof(XmlWriter).GetMethod("WriteStartElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
677 {
678 typeof(string),
679 typeof(string)
680 });
681 ilg.Ldarg(0);
682 ilg.Call(method);
683 ilg.Ldarg("n");
684 ilg.Ldarg("ns");
686 MethodInfo method3 = typeof(XmlSerializationWriter).GetMethod("WriteXsiType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
687 {
688 typeof(string),
689 typeof(string)
690 });
691 ilg.Ldarg(0);
696 MethodInfo method4 = typeof(XmlWriter).GetMethod("WriteString", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
697 ilg.Ldarg(0);
698 ilg.Call(method);
699 object variable = ilg.GetVariable("o");
700 ilg.Ldarg(0);
705 MethodInfo method5 = typeof(XmlWriter).GetMethod("WriteEndElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
706 ilg.Ldarg(0);
707 ilg.Call(method);
710 }
711 else if (typeMapping is ArrayMapping && typeMapping is ArrayMapping arrayMapping)
712 {
713 ilg.InitElseIf();
714 if (arrayMapping.TypeDesc.IsArray)
715 {
716 WriteArrayTypeCompare("t", arrayMapping.TypeDesc.Type);
717 }
718 else
719 {
720 WriteTypeCompare("t", arrayMapping.TypeDesc.Type);
721 }
722 ilg.AndIf();
723 ilg.EnterScope();
724 MethodInfo method6 = typeof(XmlSerializationWriter).GetMethod("get_Writer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
725 MethodInfo method7 = typeof(XmlWriter).GetMethod("WriteStartElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
726 {
727 typeof(string),
728 typeof(string)
729 });
730 ilg.Ldarg(0);
732 ilg.Ldarg("n");
733 ilg.Ldarg("ns");
735 MethodInfo method8 = typeof(XmlSerializationWriter).GetMethod("WriteXsiType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
736 {
737 typeof(string),
738 typeof(string)
739 });
740 ilg.Ldarg(0);
744 WriteMember(new SourceInfo("o", "o", null, null, ilg), null, arrayMapping.ElementsSortedByDerivation, null, null, arrayMapping.TypeDesc, writeAccessors: true);
745 MethodInfo method9 = typeof(XmlWriter).GetMethod("WriteEndElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
746 ilg.Ldarg(0);
750 ilg.ExitScope();
751 }
752 }
753 }
754 }
void ConvertValue(Type source, Type target)
void Call(MethodInfo methodInfo)
MethodBuilder EnsureMethodBuilder(TypeBuilder typeBuilder, string methodName, MethodAttributes attributes, Type returnType, Type[] parameterTypes)
void WriteMember(SourceInfo source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent)

References System.Xml.Serialization.CodeGenerator.AndIf(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.ConvertValue(), 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.GetCSharpString(), System.Xml.Serialization.CodeGenerator.GetVariable(), System.Xml.Serialization.CodeGenerator.GetVariableType(), System.Xml.Serialization.CodeGenerator.GotoMethodEnd(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.InitElseIf(), System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldstr(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.XmlSerializationILGen.ReferenceMapping(), System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayTypeCompare(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteMember(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteTypeCompare().

Referenced by System.Xml.Serialization.XmlSerializationWriterILGen.WriteStructMethod().