Ancestry.Daisy.Statements.ReflectionStatementDefinition.ReflectionLinkedStatement.PrecacheParameterBindings C# (CSharp) Method

PrecacheParameterBindings() private method

private PrecacheParameterBindings ( ) : void
return void
            private void PrecacheParameterBindings()
            {
                var objs = new List<object>();
                var ptrGroups = 1;
                foreach (var param in definition.Parameters)
                {
                    if (param is ProceedParameter)
                    {
                        objs.Add(proceedHolder);
                    }
                    else
                    {
                        if(ptrGroups>=match.Groups.Count)
                        {
                            throw new CannotLinkStatementException(
                                definition.MethodInfo,
                                string.Format("Statement {1} has more parameters than captures available to it."
                                + "{0} are available.",
                                match.Groups.Count -1, definition.Name));
                        }
                        var obj = match
                            .Groups[ptrGroups++]
                            .Captures
                            .If(x => x.Count > 0)
                            .With(x => x[0].Value);
                        objs.Add(Cast(obj, param));
                    }
                }
                if(objs.Count != definition.Parameters.Count)
                {
                    throw new CannotLinkStatementException(
                        definition.MethodInfo,
                        string.Format("Statement {2} wants {0} parameters from statement,"
                        + " but only {1} could be matched.",
                        definition.Parameters.Count, objs.Count, definition.Name));
                }
                if(ptrGroups < match.Groups.Count)
                {
                    throw new CannotLinkStatementException(
                        definition.MethodInfo,
                        string.Format("Statement {2} did not use all captures available to it."
                        + "It used {0} but {1} are available.",
                        ptrGroups-1, match.Groups.Count -1, definition.Name));
                }
                MappedParameters = objs.ToArray();
            }