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

◆ WriteAttributes()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttributes ( Member[] members,
Member anyAttribute,
string elseCall,
LocalBuilder firstParam )
inlineprivate

Definition at line 1513 of file XmlSerializationReaderILGen.cs.

1514 {
1515 int num = 0;
1516 Member member = null;
1518 MethodInfo method = typeof(XmlSerializationReader).GetMethod("get_Reader", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1519 MethodInfo method2 = typeof(XmlReader).GetMethod("MoveToNextAttribute", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1520 ilg.WhileBegin();
1521 foreach (Member member2 in members)
1522 {
1523 if (member2.Mapping.Xmlns != null)
1524 {
1525 member = member2;
1526 }
1527 else
1528 {
1529 if (member2.Mapping.Ignore)
1530 {
1531 continue;
1532 }
1533 AttributeAccessor attribute = member2.Mapping.Attribute;
1534 if (attribute != null && !attribute.Any)
1535 {
1537 if (num++ > 0)
1538 {
1539 ilg.InitElseIf();
1540 }
1541 else
1542 {
1543 ilg.InitIf();
1544 }
1545 if (member2.ParamsReadSource != null)
1546 {
1547 ILGenParamsReadSource(member2.ParamsReadSource);
1548 ilg.Ldc(boolVar: false);
1549 ilg.AndIf(Cmp.EqualTo);
1550 }
1551 if (attribute.IsSpecialXmlNamespace)
1552 {
1553 WriteXmlNodeEqual("Reader", attribute.Name, "http://www.w3.org/XML/1998/namespace");
1554 }
1555 else
1556 {
1557 WriteXmlNodeEqual("Reader", attribute.Name, (attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : "");
1558 }
1560 }
1561 }
1562 }
1563 if (num > 0)
1564 {
1565 ilg.InitElseIf();
1566 }
1567 else
1568 {
1569 ilg.InitIf();
1570 }
1571 if (member != null)
1572 {
1573 MethodInfo method3 = typeof(XmlSerializationReader).GetMethod("IsXmlnsAttribute", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
1574 MethodInfo method4 = typeof(XmlReader).GetMethod("get_Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1575 MethodInfo method5 = typeof(XmlReader).GetMethod("get_LocalName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1576 MethodInfo method6 = typeof(XmlReader).GetMethod("get_Value", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1577 ilg.Ldarg(0);
1578 ilg.Ldarg(0);
1579 ilg.Call(method);
1580 ilg.Call(method4);
1581 ilg.Call(method3);
1582 ilg.Ldc(boolVar: true);
1583 ilg.AndIf(Cmp.EqualTo);
1584 ILGenLoad(member.Source);
1585 ilg.Load(null);
1586 ilg.If(Cmp.EqualTo);
1587 WriteSourceBegin(member.Source);
1588 ConstructorInfo constructor = member.Mapping.TypeDesc.Type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1590 WriteSourceEnd(member.Source, member.Mapping.TypeDesc.Type);
1591 ilg.EndIf();
1594 MethodInfo method7 = member.Mapping.TypeDesc.Type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
1595 {
1596 typeof(string),
1597 typeof(string)
1598 });
1599 MethodInfo method8 = typeof(string).GetMethod("get_Length", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1600 ILGenLoad(member.ArraySource, member.Mapping.TypeDesc.Type);
1601 ilg.Ldarg(0);
1602 ilg.Call(method);
1603 ilg.Call(method4);
1604 ilg.Call(method8);
1605 ilg.Ldc(5);
1606 ilg.Beq(label);
1607 ilg.Ldarg(0);
1608 ilg.Call(method);
1609 ilg.Call(method5);
1610 ilg.Br(label2);
1612 ilg.Ldstr(string.Empty);
1614 ilg.Ldarg(0);
1615 ilg.Call(method);
1616 ilg.Call(method6);
1617 ilg.Call(method7);
1618 ilg.Else();
1619 }
1620 else
1621 {
1622 MethodInfo method9 = typeof(XmlSerializationReader).GetMethod("IsXmlnsAttribute", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
1623 MethodInfo method10 = typeof(XmlReader).GetMethod("get_Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1624 ilg.Ldarg(0);
1625 ilg.Ldarg(0);
1626 ilg.Call(method);
1627 ilg.Call(method10);
1628 ilg.Call(method9);
1629 ilg.Ldc(boolVar: false);
1630 ilg.AndIf(Cmp.EqualTo);
1631 }
1632 if (anyAttribute != null)
1633 {
1634 LocalBuilder localBuilder = ilg.DeclareOrGetLocal(typeof(XmlAttribute), "attr");
1635 MethodInfo method11 = typeof(XmlSerializationReader).GetMethod("get_Document", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
1636 MethodInfo method12 = typeof(XmlDocument).GetMethod("ReadNode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(XmlReader) });
1637 ilg.Ldarg(0);
1638 ilg.Call(method11);
1639 ilg.Ldarg(0);
1640 ilg.Call(method);
1641 ilg.Call(method12);
1642 ilg.ConvertValue(method12.ReturnType, localBuilder.LocalType);
1644 MethodInfo method13 = typeof(XmlSerializationReader).GetMethod("ParseWsdlArrayType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { localBuilder.LocalType });
1645 ilg.Ldarg(0);
1647 ilg.Call(method13);
1649 }
1650 else
1651 {
1652 List<Type> list2 = new List<Type>();
1653 ilg.Ldarg(0);
1654 list2.Add(typeof(object));
1656 ilg.ConvertValue(firstParam.LocalType, typeof(object));
1657 if (list.Count > 0)
1658 {
1659 string text = "";
1660 for (int j = 0; j < list.Count; j++)
1661 {
1662 AttributeAccessor attributeAccessor = list[j];
1663 if (j > 0)
1664 {
1665 text += ", ";
1666 }
1667 text += (attributeAccessor.IsSpecialXmlNamespace ? "http://www.w3.org/XML/1998/namespace" : (((attributeAccessor.Form == XmlSchemaForm.Qualified) ? attributeAccessor.Namespace : "") + ":" + attributeAccessor.Name));
1668 }
1669 list2.Add(typeof(string));
1670 ilg.Ldstr(text);
1671 }
1672 MethodInfo method14 = typeof(XmlSerializationReader).GetMethod(elseCall, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, list2.ToArray());
1673 ilg.Call(method14);
1674 }
1675 ilg.EndIf();
1677 ilg.Ldarg(0);
1678 ilg.Call(method);
1679 ilg.Call(method2);
1681 ilg.WhileEnd();
1682 }
void Add(TKey key, TValue value)
void ConvertValue(Type source, Type target)
LocalBuilder DeclareOrGetLocal(Type type, string name)
void New(ConstructorInfo constructorInfo)
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
void Ldloc(LocalBuilder localBuilder)
void WriteXmlNodeEqual(string source, string name, string ns)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Serialization.CodeGenerator.AndIf(), System.Xml.Serialization.CodeGenerator.Beq(), System.Xml.Serialization.CodeGenerator.Br(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.ConvertValue(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Serialization.CodeGenerator.DeclareOrGetLocal(), System.Xml.Serialization.CodeGenerator.DefineLabel(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.Else(), System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.XmlSerializationILGen.ILGenLoad(), System.Xml.Serialization.XmlSerializationReaderILGen.ILGenParamsReadSource(), System.Xml.Serialization.CodeGenerator.InitElseIf(), System.Xml.Serialization.CodeGenerator.InitIf(), 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.CodeGenerator.MarkLabel(), System.Xml.Serialization.CodeGenerator.New(), System.Xml.Serialization.CodeGenerator.Stloc(), System.text, System.Xml.Serialization.CodeGenerator.WhileBegin(), System.Xml.Serialization.CodeGenerator.WhileBeginCondition(), System.Xml.Serialization.CodeGenerator.WhileEnd(), System.Xml.Serialization.CodeGenerator.WhileEndCondition(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttribute(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceBegin(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceEnd(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteXmlNodeEqual().

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