Ejemplo n.º 1
0
        public DynamicMetaObject/*!*/ Invoke(PythonInvokeBinder/*!*/ pythonInvoke, Expression/*!*/ codeContext, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args) {
            DynamicMetaObject translated = BuiltinFunction.TranslateArguments(pythonInvoke, codeContext, target, args, false, Value.Name);
            if (translated != null) {
                return translated;
            }

            return InvokeWorker(pythonInvoke, args, codeContext);
        }
Ejemplo n.º 2
0
        public static Expression/*!*/ Invoke(BinderState/*!*/ binder, Type/*!*/ resultType, CallSignature signature, params Expression/*!*/[]/*!*/ args) {
            PythonInvokeBinder invoke = new PythonInvokeBinder(binder, signature);
            switch(args.Length) {
                case 0: return Ast.Dynamic(invoke, resultType, AstUtils.CodeContext());
                case 1: return Ast.Dynamic(invoke, resultType, AstUtils.CodeContext(), args[0]);
                case 2: return Ast.Dynamic(invoke, resultType, AstUtils.CodeContext(), args[0], args[1]);
                case 3: return Ast.Dynamic(invoke, resultType, AstUtils.CodeContext(), args[0], args[1], args[2]);
                default:
                    return Ast.Dynamic(
                        invoke,
                        resultType,
                        new ReadOnlyCollection<Expression>(ArrayUtils.Insert(AstUtils.CodeContext(), args))
                    );
            }

        }
Ejemplo n.º 3
0
        private static BaseMethodBinding GetMethodBinding <T>(Binding.PythonInvokeBinder binder, Type[] typeArgs, BaseMethodBinding binding) where T : class
        {
            #region Generated Python Selfless Method Caller Switch

            // *** BEGIN GENERATED CODE ***
            // generated by function: selfless_method_caller_switch from: generate_calls.py

            switch (typeArgs.Length)
            {
            case 1: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <>).MakeGenericType(typeArgs), binder); break;

            case 2: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <,>).MakeGenericType(typeArgs), binder); break;

            case 3: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, ,>).MakeGenericType(typeArgs), binder); break;

            case 4: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , ,>).MakeGenericType(typeArgs), binder); break;

            case 5: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , ,>).MakeGenericType(typeArgs), binder); break;

            case 6: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 7: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 8: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 9: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 10: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 11: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , , , , , ,>).MakeGenericType(typeArgs), binder); break;

            case 12: binding = (BaseMethodBinding)Activator.CreateInstance(typeof(MethodBinding <, , , , , , , , , , ,>).MakeGenericType(typeArgs), binder); break;
            }

            // *** END GENERATED CODE ***

            #endregion
            return(binding);
        }
Ejemplo n.º 4
0
 public DynamicMetaObject/*!*/ Invoke(PythonInvokeBinder/*!*/ pythonInvoke, Expression/*!*/ codeContext, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args) {
     return InvokeWorker(pythonInvoke, codeContext, args);
 }
Ejemplo n.º 5
0
 public DynamicMetaObject/*!*/ Invoke(PythonInvokeBinder/*!*/ pythonInvoke, Expression/*!*/ codeContext, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args) {
     return new FunctionBinderHelper(pythonInvoke, this, codeContext, args).MakeMetaObject();
 }
Ejemplo n.º 6
0
        Binding.FastBindResult <T> Binding.IFastInvokable.MakeInvokeBinding <T>(CallSite <T> site, Binding.PythonInvokeBinder binder, CodeContext context, object[] args)
        {
            // TODO: We can process any signature that isn't * or ** args for the 1st argument
            if (binder.Signature.IsSimple)
            {
                BaseMethodBinding binding = null;

                if (__self__ == null)
                {
                    if (args.Length != 0)
                    {
                        binding = GetMethodBinding <T>(binder, GetTypeArgsSelfless <T>(), binding);

                        if (binding != null)
                        {
                            return(new FastBindResult <T>(
                                       (T)(object)binding.GetSelflessTarget(),
                                       true
                                       ));
                        }
                    }
                }
                else
                {
                    var selfBinder = GetSelfBinder(binder, context);

                    if (args.Length == 0)
                    {
                        binding = new MethodBinding(selfBinder);
                    }
                    else
                    {
                        binding = GetMethodBinding <T>(selfBinder, GetTypeArgs <T>(), binding);
                    }

                    if (binding != null)
                    {
                        return(new FastBindResult <T>(
                                   (T)(object)binding.GetSelfTarget(),
                                   true
                                   ));
                    }
                }
            }
            return(new Binding.FastBindResult <T>());
        }
Ejemplo n.º 7
0
 private static PythonInvokeBinder GetSelfBinder(Binding.PythonInvokeBinder binder, CodeContext context)
 {
     return(context.LanguageContext.Invoke(
                new CallSignature(ArrayUtils.Insert(new Argument(ArgumentType.Simple), binder.Signature.GetArgumentInfos()))
                ));
 }
Ejemplo n.º 8
0
        internal PythonInvokeBinder/*!*/ Invoke(CallSignature signature) {
            if (_invokeBinders == null) {
                Interlocked.CompareExchange(
                    ref _invokeBinders,
                    new Dictionary<CallSignature, PythonInvokeBinder>(),
                    null
                );
            }

            lock (_invokeBinders) {
                PythonInvokeBinder res;
                if (!_invokeBinders.TryGetValue(signature, out res)) {
                    _invokeBinders[signature] = res = new PythonInvokeBinder(this, signature);
                }

                return res;
            }
        }
Ejemplo n.º 9
0
 public DynamicMetaObject /*!*/ Invoke(PythonInvokeBinder /*!*/ pythonInvoke, Expression /*!*/ codeContext, DynamicMetaObject /*!*/ target, DynamicMetaObject /*!*/[] /*!*/ args)
 {
     return(InvokeWorker(pythonInvoke, codeContext, args));
 }