System.Xml.Xsl.Xslt.QilGenerator.FillupInvokeArgs C# (CSharp) Method

FillupInvokeArgs() private method

private FillupInvokeArgs ( IList formalArgs, IList actualArgs, QilList invokeArgs ) : bool
formalArgs IList
actualArgs IList
invokeArgs System.Xml.Xsl.Qil.QilList
return bool
        private bool FillupInvokeArgs(IList<QilNode> formalArgs, IList<XslNode> actualArgs, QilList invokeArgs)
        {
            if (actualArgs.Count != formalArgs.Count)
            {
                return false;
            }
            invokeArgs.Clear();
            for (int invArg = 0; invArg < formalArgs.Count; invArg++)
            {
                QilName formalArgName = ((QilParameter)formalArgs[invArg]).Name;
                XmlQueryType paramType = formalArgs[invArg].XmlType;
                QilNode arg = null;
                {
                    for (int actArg = 0; actArg < actualArgs.Count; actArg++)
                    {
                        Debug.Assert(actualArgs[actArg].NodeType == XslNodeType.WithParam, "All Sorts was removed in CompileSorts()");
                        VarPar withParam = (VarPar)actualArgs[actArg];
                        if (formalArgName.Equals(withParam.Name))
                        {
                            QilNode value = withParam.Value;
                            XmlQueryType valueType = value.XmlType;
                            if (valueType != paramType)
                            {
                                if (valueType.IsNode && paramType.IsNode && valueType.IsSubtypeOf(paramType))
                                {
                                    // We can pass it
                                }
                                else
                                {
                                    // Formal argument has the same name but a different type
                                    return false;
                                }
                            }
                            arg = value;
                            break;
                        }
                    }
                }
                if (arg == null)
                {
                    // Formal argument has not been found among actual arguments
                    return false;
                }
                invokeArgs.Add(arg);
            }
            // All arguments have been found
            return true;
        }
QilGenerator