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

◆ WriteSourceBegin()

void System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceBegin ( string source)
inlineprivate

Definition at line 2238 of file XmlSerializationReaderILGen.cs.

2239 {
2241 {
2243 if (CodeGenerator.IsNullableGenericType(variableType))
2244 {
2246 }
2247 return;
2248 }
2249 if (source.StartsWith("o.@", StringComparison.Ordinal))
2250 {
2252 return;
2253 }
2254 Regex regex = XmlSerializationILGen.NewRegex("(?<locA1>[^ ]+) = .+EnsureArrayIndex[(](?<locA2>[^,]+), (?<locI1>[^,]+),[^;]+;(?<locA3>[^[]+)[[](?<locI2>[^+]+)[+][+][]]");
2255 Match match = regex.Match(source);
2256 if (match.Success)
2257 {
2258 LocalBuilder local = ilg.GetLocal(match.Groups["locA1"].Value);
2259 LocalBuilder local2 = ilg.GetLocal(match.Groups["locI1"].Value);
2260 Type elementType = local.LocalType.GetElementType();
2261 MethodInfo method = typeof(XmlSerializationReader).GetMethod("EnsureArrayIndex", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[3]
2262 {
2263 typeof(Array),
2264 typeof(int),
2265 typeof(Type)
2266 });
2267 ilg.Ldarg(0);
2268 ilg.Ldloc(local);
2269 ilg.Ldloc(local2);
2271 ilg.Call(method);
2272 ilg.Castclass(local.LocalType);
2273 ilg.Stloc(local);
2274 ilg.Ldloc(local);
2275 ilg.Ldloc(local2);
2276 ilg.Dup();
2277 ilg.Ldc(1);
2278 ilg.Add();
2279 ilg.Stloc(local2);
2280 if (CodeGenerator.IsNullableGenericType(elementType) || elementType.IsValueType)
2281 {
2283 }
2284 }
2285 else if (source.EndsWith(".Add(", StringComparison.Ordinal))
2286 {
2287 int length = source.LastIndexOf(".Add(", StringComparison.Ordinal);
2288 LocalBuilder local3 = ilg.GetLocal(source.Substring(0, length));
2290 }
2291 else
2292 {
2293 regex = XmlSerializationILGen.NewRegex("(?<a>[^[]+)[[](?<ia>.+)[]]");
2294 match = regex.Match(source);
2295 if (!match.Success)
2296 {
2297 throw Globals.NotSupported("Unexpected: " + source);
2298 }
2299 ilg.Load(ilg.GetVariable(match.Groups["a"].Value));
2300 ilg.Load(ilg.GetVariable(match.Groups["ia"].Value));
2301 }
2302 }
void Ldelema(Type arrayElementType)
void Call(MethodInfo methodInfo)
void Stloc(Type type, string name)
LocalBuilder GetLocal(string name)
bool TryGetVariable(string name, [NotNullWhen(true)] out object variable)
void LdlocAddress(LocalBuilder localBuilder)
void Ldloc(LocalBuilder localBuilder)
XmlSerializationILGen(TypeScope[] scopes, string access, string className)

References System.Xml.Serialization.CodeGenerator.Add(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.Castclass(), System.Xml.Dictionary, System.Xml.Serialization.CodeGenerator.Dup(), System.elementType, System.Xml.Serialization.CodeGenerator.GetLocal(), System.Xml.Serialization.CodeGenerator.GetVariable(), System.Xml.Serialization.CodeGenerator.GetVariableType(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.IsNullableGenericType(), System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Ldc(), System.Xml.Serialization.CodeGenerator.Ldelema(), System.Xml.Serialization.CodeGenerator.Ldloc(), System.Xml.Serialization.CodeGenerator.LdlocAddress(), System.length, System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.CodeGenerator.LoadAddress(), System.match, System.Xml.Serialization.XmlSerializationILGen.NewRegex(), System.Xml.Serialization.Globals.NotSupported(), System.source, System.Xml.Serialization.CodeGenerator.Stloc(), and System.Xml.Serialization.CodeGenerator.TryGetVariable().

Referenced by System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttribute(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttributes(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberBegin(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberEnd(), System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceBeginTyped(), and System.Xml.Serialization.XmlSerializationReaderILGen.WriteText().