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

◆ WriteArray()

void System.Xml.Serialization.XmlSerializationWriterILGen.WriteArray ( SourceInfo source,
string choiceSource,
ElementAccessor[] elements,
TextAccessor text,
ChoiceIdentifierAccessor choice,
TypeDesc arrayTypeDesc )
inlineprivate

Definition at line 1191 of file XmlSerializationWriterILGen.cs.

1192 {
1193 if (elements.Length != 0 || text != null)
1194 {
1195 string cSharpName = arrayTypeDesc.CSharpName;
1196 string text2 = "a" + arrayTypeDesc.Name;
1197 ilg.EnterScope();
1200 if (arrayTypeDesc.IsNullable)
1201 {
1202 ilg.Ldloc(local);
1203 ilg.Load(null);
1204 ilg.If(Cmp.NotEqualTo);
1205 }
1206 string text3 = null;
1207 if (choice != null)
1208 {
1209 string cSharpName2 = choice.Mapping.TypeDesc.CSharpName;
1210 SourceInfo initValue = new SourceInfo(choiceSource, null, choice.MemberInfo, null, ilg);
1211 text3 = "c" + choice.Mapping.TypeDesc.Name;
1212 WriteArrayLocalDecl(cSharpName2 + "[]", text3, initValue, choice.Mapping.TypeDesc);
1216 ilg.Ldloc(local2);
1217 ilg.Load(null);
1218 ilg.Beq(label2);
1219 ilg.Ldloc(local2);
1220 ilg.Ldlen();
1221 ilg.Ldloc(local);
1222 ilg.Ldlen();
1223 ilg.Clt();
1224 ilg.Br(label);
1226 ilg.Ldc(boolVar: true);
1228 ilg.If();
1229 MethodInfo method = typeof(XmlSerializationWriter).GetMethod("CreateInvalidChoiceIdentifierValueException", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
1230 {
1231 typeof(string),
1232 typeof(string)
1233 });
1234 ilg.Ldarg(0);
1235 ilg.Ldstr(GetCSharpString(choice.Mapping.TypeDesc.FullName));
1236 ilg.Ldstr(GetCSharpString(choice.MemberName));
1237 ilg.Call(method);
1238 ilg.Throw();
1239 ilg.EndIf();
1240 }
1242 if (arrayTypeDesc.IsNullable)
1243 {
1244 ilg.EndIf();
1245 }
1246 ilg.ExitScope();
1247 }
1248 }
void Call(MethodInfo methodInfo)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
void WriteArrayItems(ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc arrayTypeDesc, string arrayName, string choiceName)
void WriteArrayLocalDecl(string typeName, string variableName, SourceInfo initValue, TypeDesc arrayTypeDesc)

References System.Xml.Serialization.CodeGenerator.Beq(), System.Xml.Serialization.CodeGenerator.Br(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.Clt(), System.Xml.Serialization.CodeGenerator.DefineLabel(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.EnterScope(), System.Xml.Serialization.CodeGenerator.ExitScope(), System.Xml.Serialization.XmlSerializationILGen.GetCSharpString(), System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldlen(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Ldstr(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.CodeGenerator.MarkLabel(), System.source, System.text, System.Xml.Serialization.CodeGenerator.Throw(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayItems(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayLocalDecl().

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