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

◆ WriteMemberElementsIf()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElementsIf ( Member[] members,
Member anyElement,
string elementElseString )
inlineprivate

Definition at line 2022 of file XmlSerializationReaderILGen.cs.

2023 {
2024 int num = 0;
2025 bool flag = IsSequence(members);
2026 int num2 = 0;
2027 foreach (Member member in members)
2028 {
2029 if (member.Mapping.Xmlns != null || member.Mapping.Ignore || (flag && (member.Mapping.IsText || member.Mapping.IsAttribute)))
2030 {
2031 continue;
2032 }
2033 bool flag2 = true;
2034 ChoiceIdentifierAccessor choiceIdentifier = member.Mapping.ChoiceIdentifier;
2035 ElementAccessor[] elements = member.Mapping.Elements;
2036 for (int j = 0; j < elements.Length; j++)
2037 {
2038 ElementAccessor elementAccessor = elements[j];
2039 string ns = ((elementAccessor.Form == XmlSchemaForm.Qualified) ? elementAccessor.Namespace : "");
2040 if (!flag && elementAccessor.Any && (elementAccessor.Name == null || elementAccessor.Name.Length == 0))
2041 {
2042 continue;
2043 }
2044 if (!flag2 || (!flag && num > 0))
2045 {
2046 ilg.InitElseIf();
2047 }
2048 else if (flag)
2049 {
2050 if (num2 > 0)
2051 {
2052 ilg.InitElseIf();
2053 }
2054 else
2055 {
2056 ilg.InitIf();
2057 }
2058 ilg.Ldloc("state");
2059 ilg.Ldc(num2);
2060 ilg.AndIf(Cmp.EqualTo);
2061 ilg.InitIf();
2062 }
2063 else
2064 {
2065 ilg.InitIf();
2066 }
2067 num++;
2068 flag2 = false;
2069 if (member.ParamsReadSource != null)
2070 {
2071 ILGenParamsReadSource(member.ParamsReadSource);
2072 ilg.Ldc(boolVar: false);
2073 ilg.AndIf(Cmp.EqualTo);
2074 }
2077 if (member.Mapping.IsReturnValue)
2078 {
2079 MethodInfo method = typeof(XmlSerializationReader).GetMethod("get_IsReturnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
2080 ilg.Ldarg(0);
2081 ilg.Call(method);
2082 ilg.Brtrue(label);
2083 }
2084 if (flag && elementAccessor.Any && elementAccessor.AnyNamespaces == null)
2085 {
2086 ilg.Ldc(boolVar: true);
2087 }
2088 else
2089 {
2090 WriteXmlNodeEqual("Reader", elementAccessor.Name, ns, doAndIf: false);
2091 }
2092 if (member.Mapping.IsReturnValue)
2093 {
2094 ilg.Br_S(label2);
2096 ilg.Ldc(boolVar: true);
2098 }
2099 ilg.AndIf();
2100 WriteElement(member.ArraySource, member.ArrayName, member.ChoiceArraySource, elementAccessor, choiceIdentifier, (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite) ? member.CheckSpecifiedSource : null, member.IsList && member.Mapping.TypeDesc.IsNullable, member.Mapping.ReadOnly, member.FixupIndex, j);
2101 if (member.Mapping.IsReturnValue)
2102 {
2103 MethodInfo method2 = typeof(XmlSerializationReader).GetMethod("set_IsReturnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(bool) });
2104 ilg.Ldarg(0);
2105 ilg.Ldc(boolVar: false);
2106 ilg.Call(method2);
2107 }
2108 if (member.ParamsReadSource != null)
2109 {
2110 ILGenParamsReadSource(member.ParamsReadSource, value: true);
2111 }
2112 }
2113 if (flag)
2114 {
2115 if (member.IsArrayLike)
2116 {
2117 ilg.Else();
2118 }
2119 else
2120 {
2121 ilg.EndIf();
2122 }
2123 num2++;
2124 ilg.Ldc(num2);
2125 ilg.Stloc(ilg.GetLocal("state"));
2126 if (member.IsArrayLike)
2127 {
2128 ilg.EndIf();
2129 }
2130 }
2131 }
2132 if (num > 0)
2133 {
2134 ilg.Else();
2135 }
2137 if (num > 0)
2138 {
2139 ilg.EndIf();
2140 }
2141 }
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
void WriteXmlNodeEqual(string source, string name, string ns)
void WriteElement(string source, string arrayName, string choiceSource, ElementAccessor element, ChoiceIdentifierAccessor choice, string checkSpecified, bool checkForNull, bool readOnly, int fixupIndex, int elementIndex)
void WriteMemberElementsElse(Member anyElement, string elementElseString)

References System.Xml.Serialization.CodeGenerator.AndIf(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.ArrayName, System.Xml.Serialization.XmlSerializationReaderILGen.Member.ArraySource, System.Xml.Serialization.CodeGenerator.Br_S(), System.Xml.Serialization.CodeGenerator.Brtrue(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.MemberMapping.CheckSpecified, System.Xml.Serialization.XmlSerializationReaderILGen.Member.CheckSpecifiedSource, System.Xml.Serialization.XmlSerializationReaderILGen.Member.ChoiceArraySource, System.Xml.Serialization.AccessorMapping.ChoiceIdentifier, System.Xml.Serialization.CodeGenerator.DefineLabel(), System.Xml.Dictionary, System.Xml.Serialization.AccessorMapping.Elements, System.Xml.Serialization.CodeGenerator.Else(), System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.FixupIndex, System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.AccessorMapping.Ignore, System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.XmlSerializationReaderILGen.ILGenParamsReadSource(), System.Xml.Serialization.CodeGenerator.InitElseIf(), System.Xml.Serialization.CodeGenerator.InitIf(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.IsArrayLike, System.Xml.Serialization.AccessorMapping.IsAttribute, System.Xml.Serialization.TypeDesc.IsNullable, System.Xml.Serialization.MemberMapping.IsReturnValue, System.Xml.Serialization.XmlSerializationReaderILGen.IsSequence(), System.Xml.Serialization.AccessorMapping.IsText, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.Mapping, System.Xml.Serialization.CodeGenerator.MarkLabel(), System.Xml.Serialization.XmlSerializationReaderILGen.Member.ParamsReadSource, System.Xml.Serialization.MemberMapping.ReadOnly, System.Xml.Serialization.CodeGenerator.Stloc(), System.Xml.Serialization.AccessorMapping.TypeDesc, System.value, System.Xml.Serialization.XmlSerializationReaderILGen.WriteElement(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElementsElse(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteXmlNodeEqual(), and System.Xml.Serialization.AccessorMapping.Xmlns.

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