예제 #1
0
                bool TryBindArgument(int srcarg, Type targetType, out Expression expr)
                {
                    var args = _args;

                    if (srcarg >= 0 && srcarg < args.Length)
                    {
                        // skip RuntimeChain's
                        srcarg = MapToArgsIndex(srcarg);

                        //
                        if (srcarg < args.Length)
                        {
                            expr = args[srcarg];

                            // apply the runtime chain:
                            if (srcarg + 1 < args.Length)
                            {
                                BinderHelpers.TryAppendRuntimeChain(ref expr, args[srcarg + 1], _ctx, _classContext, targetType == typeof(PhpAlias));
                            }

                            //
                            if (targetType != null)
                            {
                                expr = ConvertExpression.Bind(expr, targetType, _ctx);
                            }

                            //
                            return(true);
                        }
                    }

                    // not provided
                    expr = null;
                    return(false);
                }