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

◆ ILGenElseString()

void System.Xml.Serialization.XmlSerializationReaderILGen.ILGenElseString ( string elseString)
inlineprivate

Definition at line 2865 of file XmlSerializationReaderILGen.cs.

2866 {
2867 MethodInfo method = typeof(XmlSerializationReader).GetMethod("UnknownNode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(object) });
2868 MethodInfo method2 = typeof(XmlSerializationReader).GetMethod("UnknownNode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[2]
2869 {
2870 typeof(object),
2871 typeof(string)
2872 });
2873 Regex regex = XmlSerializationILGen.NewRegex("UnknownNode[(]null, @[\"](?<qnames>[^\"]*)[\"][)];");
2874 Match match = regex.Match(elseString);
2875 if (match.Success)
2876 {
2877 ilg.Ldarg(0);
2878 ilg.Load(null);
2879 ilg.Ldstr(match.Groups["qnames"].Value);
2880 ilg.Call(method2);
2881 return;
2882 }
2883 regex = XmlSerializationILGen.NewRegex("UnknownNode[(][(]object[)](?<o>[^,]+), @[\"](?<qnames>[^\"]*)[\"][)];");
2884 match = regex.Match(elseString);
2885 if (match.Success)
2886 {
2887 ilg.Ldarg(0);
2888 LocalBuilder local = ilg.GetLocal(match.Groups["o"].Value);
2889 ilg.Ldloc(local);
2890 ilg.ConvertValue(local.LocalType, typeof(object));
2891 ilg.Ldstr(match.Groups["qnames"].Value);
2892 ilg.Call(method2);
2893 return;
2894 }
2895 regex = XmlSerializationILGen.NewRegex("UnknownNode[(][(]object[)](?<o>[^,]+), null[)];");
2896 match = regex.Match(elseString);
2897 if (match.Success)
2898 {
2899 ilg.Ldarg(0);
2900 LocalBuilder local2 = ilg.GetLocal(match.Groups["o"].Value);
2901 ilg.Ldloc(local2);
2902 ilg.ConvertValue(local2.LocalType, typeof(object));
2903 ilg.Load(null);
2904 ilg.Call(method2);
2905 return;
2906 }
2907 regex = XmlSerializationILGen.NewRegex("UnknownNode[(][(]object[)](?<o>[^)]+)[)];");
2908 match = regex.Match(elseString);
2909 if (match.Success)
2910 {
2911 ilg.Ldarg(0);
2912 LocalBuilder local3 = ilg.GetLocal(match.Groups["o"].Value);
2913 ilg.Ldloc(local3);
2914 ilg.ConvertValue(local3.LocalType, typeof(object));
2915 ilg.Call(method);
2916 return;
2917 }
2918 throw Globals.NotSupported("Unexpected: " + elseString);
2919 }
void ConvertValue(Type source, Type target)
void Call(MethodInfo methodInfo)
LocalBuilder GetLocal(string name)
void Ldloc(LocalBuilder localBuilder)
XmlSerializationILGen(TypeScope[] scopes, string access, string className)

References System.Xml.Dictionary, System.match, System.Xml.Serialization.XmlSerializationILGen.NewRegex(), and System.Xml.Serialization.Globals.NotSupported().

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