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

◆ VisitXsltInvokeEarlyBound()

override QilNode System.Xml.Xsl.IlGen.XmlILVisitor.VisitXsltInvokeEarlyBound ( QilInvokeEarlyBound ndInvoke)
inlineprotectedvirtual

Reimplemented from System.Xml.Xsl.Qil.QilVisitor.

Definition at line 2213 of file XmlILVisitor.cs.

2214 {
2215 QilName name = ndInvoke.Name;
2216 XmlExtensionFunction xmlExtensionFunction = new XmlExtensionFunction(name.LocalName, name.NamespaceUri, ndInvoke.ClrMethod);
2217 Type clrReturnType = xmlExtensionFunction.ClrReturnType;
2219 if (clrReturnType != storageType && !ndInvoke.XmlType.IsEmpty)
2220 {
2223 }
2224 if (!xmlExtensionFunction.Method.IsStatic)
2225 {
2226 if (name.NamespaceUri.Length == 0)
2227 {
2229 }
2230 else
2231 {
2232 _helper.CallGetEarlyBoundObject(_helper.StaticData.DeclareEarlyBound(name.NamespaceUri, xmlExtensionFunction.Method.DeclaringType), xmlExtensionFunction.Method.DeclaringType);
2233 }
2234 }
2235 for (int i = 0; i < ndInvoke.Arguments.Count; i++)
2236 {
2237 QilNode qilNode = ndInvoke.Arguments[i];
2238 XmlQueryType xmlArgumentType = xmlExtensionFunction.GetXmlArgumentType(i);
2239 Type clrArgumentType = xmlExtensionFunction.GetClrArgumentType(i);
2240 if (name.NamespaceUri.Length == 0)
2241 {
2243 if (clrArgumentType == XmlILMethods.StorageMethods[itemStorageType].IListType)
2244 {
2246 }
2247 else if (clrArgumentType == XmlILMethods.StorageMethods[typeof(XPathItem)].IListType)
2248 {
2250 }
2251 else if ((qilNode.XmlType.IsSingleton && clrArgumentType == itemStorageType) || qilNode.XmlType.TypeCode == XmlTypeCode.None)
2252 {
2254 }
2255 else if (qilNode.XmlType.IsSingleton && clrArgumentType == typeof(XPathItem))
2256 {
2258 }
2259 }
2260 else
2261 {
2263 if (xmlArgumentType.TypeCode == XmlTypeCode.Item || !clrArgumentType.IsAssignableFrom(storageType2))
2264 {
2270 _helper.Call(XmlILMethods.ChangeTypeXsltArg);
2272 }
2273 else
2274 {
2276 }
2277 }
2278 }
2280 if (ndInvoke.XmlType.IsEmpty)
2281 {
2282 _helper.Emit(OpCodes.Ldsfld, XmlILMethods.StorageMethods[typeof(XPathItem)].SeqEmpty);
2283 }
2284 else if (clrReturnType != storageType)
2285 {
2287 _helper.Call(XmlILMethods.ChangeTypeXsltResult);
2289 }
2290 else if (name.NamespaceUri.Length != 0 && !clrReturnType.IsValueType)
2291 {
2297 _helper.Call(XmlILMethods.ThrowException);
2299 }
2300 _iterCurr.Storage = StorageDescriptor.Stack(GetItemStorageType(ndInvoke), !ndInvoke.XmlType.IsSingleton);
2301 return ndInvoke;
2302 }
static readonly OpCode Brtrue
Definition OpCodes.cs:119
static readonly OpCode Ldstr
Definition OpCodes.cs:231
static readonly OpCode Ldsfld
Definition OpCodes.cs:251
static readonly OpCode Dup
Definition OpCodes.cs:77
static string Xslt_ItemNull
Definition SR.cs:1988
Definition SR.cs:7
void TreatAs(Type clrTypeSrc, Type clrTypeDst)
void CallGetEarlyBoundObject(int idxObj, Type clrType)
int DeclareEarlyBound(string namespaceUri, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type ebType)

References System.Xml.Xsl.IlGen.XmlILVisitor._helper, System.Reflection.Emit.OpCodes.Brtrue, System.Xml.Xsl.IlGen.GenerateHelper.Call(), System.Xml.Xsl.IlGen.GenerateHelper.CallGetEarlyBoundObject(), System.Xml.Xsl.IlGen.XmlILMethods.ChangeTypeXsltArg, System.Xml.Xsl.IlGen.XmlILMethods.ChangeTypeXsltResult, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Xsl.IlGen.StaticDataManager.DeclareEarlyBound(), System.Xml.Xsl.IlGen.StaticDataManager.DeclareXmlType(), System.Xml.Xsl.IlGen.GenerateHelper.DefineLabel(), System.Xml.Dictionary, System.Reflection.Emit.OpCodes.Dup, System.Xml.Xsl.IlGen.GenerateHelper.Emit(), System.Xml.Xsl.IlGen.XmlILVisitor.GetItemStorageType(), System.Xml.Xsl.IlGen.XmlILVisitor.GetStorageType(), System.Reflection.Emit.OpCodes.Ldsfld, System.Reflection.Emit.OpCodes.Ldstr, System.Xml.Xsl.IlGen.GenerateHelper.LoadInteger(), System.Xml.Xsl.IlGen.GenerateHelper.LoadQueryRuntime(), System.Xml.Xsl.IlGen.GenerateHelper.LoadType(), System.Xml.Xsl.IlGen.GenerateHelper.LoadXsltLibrary(), System.Xml.Xsl.IlGen.GenerateHelper.MarkLabel(), System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisitEnsureStack(), System.Xml.Xsl.IlGen.StorageDescriptor.Stack(), System.Xml.Xsl.IlGen.GenerateHelper.StaticData, System.Xml.Xsl.IlGen.XmlILMethods.StorageMethods, System.Xml.Xsl.IlGen.XmlILMethods.ThrowException, System.Xml.Xsl.IlGen.GenerateHelper.TreatAs(), and System.SR.Xslt_ItemNull.