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

◆ WriteMemberBegin()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberBegin ( Member[] members)
inlineprivate

Definition at line 1762 of file XmlSerializationReaderILGen.cs.

1763 {
1764 foreach (Member member in members)
1765 {
1766 if (!member.IsArrayLike)
1767 {
1768 continue;
1769 }
1770 string arrayName = member.ArrayName;
1771 string name = "c" + arrayName;
1772 TypeDesc typeDesc = member.Mapping.TypeDesc;
1773 if (member.Mapping.TypeDesc.IsArray)
1774 {
1775 WriteArrayLocalDecl(typeDesc.CSharpName, arrayName, "null", typeDesc);
1776 ilg.Ldc(0);
1777 ilg.Stloc(typeof(int), name);
1778 if (member.Mapping.ChoiceIdentifier != null)
1779 {
1780 WriteArrayLocalDecl(member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.CSharpName + "[]", member.ChoiceArrayName, "null", member.Mapping.ChoiceIdentifier.Mapping.TypeDesc);
1781 ilg.Ldc(0);
1782 ilg.Stloc(typeof(int), "c" + member.ChoiceArrayName);
1783 }
1784 continue;
1785 }
1786 if (member.Source[member.Source.Length - 1] == '(' || member.Source[member.Source.Length - 1] == '{')
1787 {
1789 WriteSourceBegin(member.Source);
1791 WriteSourceEnd(member.Source, typeDesc.Type);
1792 continue;
1793 }
1794 if (member.IsList && !member.Mapping.ReadOnly && member.Mapping.TypeDesc.IsNullable)
1795 {
1796 ILGenLoad(member.Source, typeof(object));
1797 ilg.Load(null);
1798 ilg.If(Cmp.EqualTo);
1799 if (!member.Mapping.TypeDesc.HasDefaultConstructor)
1800 {
1801 MethodInfo method = typeof(XmlSerializationReader).GetMethod("CreateReadOnlyCollectionException", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
1802 ilg.Ldarg(0);
1803 ilg.Ldstr(GetCSharpString(member.Mapping.TypeDesc.CSharpName));
1804 ilg.Call(method);
1805 ilg.Throw();
1806 }
1807 else
1808 {
1809 WriteSourceBegin(member.Source);
1810 base.RaCodeGen.ILGenForCreateInstance(ilg, member.Mapping.TypeDesc.Type, typeDesc.CannotNew, cast: true);
1811 WriteSourceEnd(member.Source, member.Mapping.TypeDesc.Type);
1812 }
1813 ilg.EndIf();
1814 }
1815 WriteLocalDecl(arrayName, new SourceInfo(member.Source, member.Source, member.Mapping.MemberInfo, member.Mapping.TypeDesc.Type, ilg));
1816 }
1817 }
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
void WriteCreateInstance(string source, bool ctorInaccessible, Type type)
void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
void WriteLocalDecl(string variableName, SourceInfo initValue)

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.TypeDesc.CSharpName, System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.XmlSerializationILGen.GetCSharpString(), System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.TypeDesc.HasDefaultConstructor, System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.XmlSerializationILGen.ILGenLoad(), System.Xml.Serialization.TypeDesc.IsArray, System.Xml.Serialization.XmlSerializationReaderILGen.Member.IsArrayLike, System.Xml.Serialization.XmlSerializationReaderILGen.Member.IsList, System.Xml.Serialization.TypeDesc.IsNullable, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Ldstr(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.XmlSerializationReaderILGen.Member.Mapping, System.Xml.Serialization.MemberMapping.MemberInfo, System.Text.RegularExpressions.name, System.Xml.Serialization.MemberMapping.ReadOnly, System.Xml.Serialization.XmlSerializationReaderILGen.Member.Source, System.Xml.Serialization.CodeGenerator.Stloc(), System.Xml.Serialization.CodeGenerator.Throw(), System.Xml.Serialization.TypeDesc.Type, System.Xml.Serialization.AccessorMapping.TypeDesc, System.Xml.Serialization.TypeMapping.TypeDesc, System.Xml.Serialization.XmlSerializationReaderILGen.WriteArrayLocalDecl(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteCreateInstance(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteLocalDecl(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceBegin(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceEnd().

Referenced by System.Xml.Serialization.XmlSerializationReaderILGen.GenerateLiteralMembersElement(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteLiteralStructMethod().