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

◆ WriteElement()

void System.Xml.Serialization.XmlSerializationWriterILGen.WriteElement ( SourceInfo source,
ElementAccessor element,
string arrayName,
bool writeAccessor )
inlineprivate

Definition at line 1636 of file XmlSerializationWriterILGen.cs.

1637 {
1638 string text = (writeAccessor ? element.Name : element.Mapping.TypeName);
1639 string text2 = ((element.Any && element.Name.Length == 0) ? null : ((element.Form != XmlSchemaForm.Qualified) ? "" : (writeAccessor ? element.Namespace : element.Mapping.Namespace)));
1640 if (element.Mapping is NullableMapping)
1641 {
1642 if (source.Type == element.Mapping.TypeDesc.Type)
1643 {
1644 MethodInfo method = element.Mapping.TypeDesc.Type.GetMethod("get_HasValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1645 source.LoadAddress(element.Mapping.TypeDesc.Type);
1646 ilg.Call(method);
1647 }
1648 else
1649 {
1650 source.Load(null);
1651 ilg.Load(null);
1652 ilg.Cne();
1653 }
1654 ilg.If();
1655 SourceInfo sourceInfo = source.CastTo(element.Mapping.TypeDesc.BaseTypeDesc);
1656 ElementAccessor elementAccessor = element.Clone();
1657 elementAccessor.Mapping = ((NullableMapping)element.Mapping).BaseMapping;
1659 if (element.IsNullable)
1660 {
1661 ilg.Else();
1662 WriteLiteralNullTag(element.Name, (element.Form == XmlSchemaForm.Qualified) ? element.Namespace : "");
1663 }
1664 ilg.EndIf();
1665 return;
1666 }
1667 if (element.Mapping is ArrayMapping)
1668 {
1669 ArrayMapping arrayMapping = (ArrayMapping)element.Mapping;
1670 if (element.IsUnbounded)
1671 {
1672 throw Globals.NotSupported("Unreachable: IsUnbounded is never set true!");
1673 }
1674 ilg.EnterScope();
1675 string cSharpName = arrayMapping.TypeDesc.CSharpName;
1677 if (element.IsNullable)
1678 {
1680 }
1681 else if (arrayMapping.TypeDesc.IsNullable)
1682 {
1684 ilg.Load(null);
1685 ilg.If(Cmp.NotEqualTo);
1686 }
1688 WriteArrayItems(arrayMapping.ElementsSortedByDerivation, null, null, arrayMapping.TypeDesc, arrayName, null);
1690 if (element.IsNullable)
1691 {
1692 ilg.EndIf();
1693 }
1694 else if (arrayMapping.TypeDesc.IsNullable)
1695 {
1696 ilg.EndIf();
1697 }
1698 ilg.ExitScope();
1699 return;
1700 }
1701 if (element.Mapping is EnumMapping)
1702 {
1703 WritePrimitive("WriteElementString", text, text2, element.Default, source, element.Mapping, writeXsiType: false, isElement: true, element.IsNullable);
1704 return;
1705 }
1706 if (element.Mapping is PrimitiveMapping)
1707 {
1708 PrimitiveMapping primitiveMapping = (PrimitiveMapping)element.Mapping;
1709 if (primitiveMapping.TypeDesc == base.QnameTypeDesc)
1710 {
1711 WriteQualifiedNameElement(text, text2, GetConvertedDefaultValue(source.Type, element.Default), source, element.IsNullable, primitiveMapping);
1712 return;
1713 }
1715 WritePrimitive(element.IsNullable ? ("WriteNullableStringLiteral" + text3) : ("WriteElementString" + text3), text, text2, GetConvertedDefaultValue(source.Type, element.Default), source, primitiveMapping, writeXsiType: false, isElement: true, element.IsNullable);
1716 return;
1717 }
1718 if (element.Mapping is StructMapping)
1719 {
1720 StructMapping structMapping = (StructMapping)element.Mapping;
1722 List<Type> list = new List<Type>();
1723 ilg.Ldarg(0);
1725 list.Add(typeof(string));
1727 list.Add(typeof(string));
1728 source.Load(structMapping.TypeDesc.Type);
1729 list.Add(structMapping.TypeDesc.Type);
1730 if (structMapping.TypeDesc.IsNullable)
1731 {
1732 ilg.Ldc(element.IsNullable);
1733 list.Add(typeof(bool));
1734 }
1735 ilg.Ldc(boolVar: false);
1736 list.Add(typeof(bool));
1739 return;
1740 }
1741 if (element.Mapping is SpecialMapping)
1742 {
1743 if (element.Mapping is SerializableMapping)
1744 {
1745 WriteElementCall("WriteSerializable", typeof(IXmlSerializable), source, text, text2, element.IsNullable, !element.Any);
1746 return;
1747 }
1750 source.Load(null);
1751 ilg.IsInst(typeof(XmlNode));
1752 ilg.Brtrue(label);
1753 source.Load(null);
1754 ilg.Load(null);
1755 ilg.Ceq();
1756 ilg.Br(label2);
1758 ilg.Ldc(boolVar: true);
1760 ilg.If();
1761 WriteElementCall("WriteElementLiteral", typeof(XmlNode), source, text, text2, element.IsNullable, element.Any);
1762 ilg.Else();
1763 MethodInfo method2 = typeof(XmlSerializationWriter).GetMethod("CreateInvalidAnyTypeException", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(object) });
1764 ilg.Ldarg(0);
1765 source.Load(null);
1766 ilg.Call(method2);
1767 ilg.Throw();
1768 ilg.EndIf();
1769 return;
1770 }
1772 }
void Add(TKey key, TValue value)
static string XmlInternalError
Definition SR.cs:1812
Definition SR.cs:7
void Call(MethodInfo methodInfo)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
MethodBuilder EnsureMethodBuilder(TypeBuilder typeBuilder, string methodName, MethodAttributes attributes, Type returnType, Type[] parameterTypes)
static object GetConvertedDefaultValue([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type targetType, object rawDefaultValue)
void WriteArrayItems(ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc arrayTypeDesc, string arrayName, string choiceName)
void WriteQualifiedNameElement(string name, string ns, object defaultValue, SourceInfo source, bool nullable, TypeMapping mapping)
void WriteArrayLocalDecl(string typeName, string variableName, SourceInfo initValue, TypeDesc arrayTypeDesc)
void WriteNullCheckBegin(string source, ElementAccessor element)
void WritePrimitive(string method, string name, string ns, object defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)
void WriteElementCall(string func, Type cast, SourceInfo source, string name, string ns, bool isNullable, bool isAny)
void WriteStartElement(string name, string ns, bool writePrefixed)
void WriteElement(SourceInfo source, ElementAccessor element, string arrayName, bool writeAccessor)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Serialization.Accessor.Any, System.Xml.Serialization.TypeDesc.BaseTypeDesc, System.Xml.Serialization.CodeGenerator.Br(), System.Xml.Serialization.CodeGenerator.Brtrue(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.Ceq(), System.Xml.Serialization.ElementAccessor.Clone(), System.Xml.Serialization.CodeGenerator.Cne(), System.Xml.Serialization.Accessor.Default, System.Xml.Serialization.CodeGenerator.DefineLabel(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.Else(), System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.XmlSerializationILGen.EnsureMethodBuilder(), System.Xml.Serialization.CodeGenerator.EnterScope(), System.Xml.Serialization.CodeGenerator.ExitScope(), System.Xml.Serialization.Accessor.Form, System.Xml.Serialization.XmlSerializationWriterILGen.GetConvertedDefaultValue(), System.Xml.Serialization.XmlSerializationILGen.GetCSharpString(), System.Xml.Serialization.CodeGenerator.GetLocal(), System.Type.GetMethod(), System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.IsInst(), System.Xml.Serialization.ElementAccessor.IsNullable, System.Xml.Serialization.ElementAccessor.IsUnbounded, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.Ldstr(), System.list, System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.CodeGenerator.MarkLabel(), System.Xml.Serialization.Accessor.Name, System.Xml.Serialization.Accessor.Namespace, System.Xml.Serialization.TypeMapping.Namespace, System.Xml.Serialization.Globals.NotSupported(), System.Xml.Serialization.XmlSerializationILGen.ReferenceMapping(), System.source, System.text, System.Xml.Serialization.CodeGenerator.Throw(), System.Xml.Serialization.TypeDesc.Type, System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.Xml.Serialization.TypeMapping.TypeDesc, System.Xml.Serialization.TypeMapping.TypeName, System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayItems(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayLocalDecl(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteElement(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteElementCall(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteEndElement(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteLiteralNullTag(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteNullCheckBegin(), System.Xml.Serialization.XmlSerializationWriterILGen.WritePrimitive(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteQualifiedNameElement(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteStartElement(), and System.SR.XmlInternalError.

Referenced by System.Xml.Serialization.XmlSerializationWriterILGen.WriteElement(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteElements().