public object GetRealObject(StreamingContext context)
        {
            var tInterfaces = Interfaces ?? MonoInterfaces.Select(it => Type.GetType(it)).ToArray();
            var tType       = BuildProxy.BuildType(Context, tInterfaces.First(), tInterfaces.Skip(1).ToArray());

            return(Impromptu.InitializeProxy(tType, Original, tInterfaces));
        }
Exemplo n.º 2
0
        public object GetRealObject(StreamingContext context)
        {
            var interfaces = Interfaces ?? MonoInterfaces.Select(it => Type.GetType(it)).ToArray();
            var type       = BuildProxy.BuildType(Context, interfaces.First(), interfaces.Skip(1).ToArray());

            return(InvocationBinding.InitializeProxy(type, Original, interfaces));
        }
        internal static object InvokeConvertCallSite(object target, bool explict, Type type, Type context,
                                                     ref CallSite callSite)
        {
            if (callSite == null)
            {
                LazyBinder binder = () =>
                {
                    var flags = explict
                                                            ? CSharpBinderFlags.ConvertExplicit
                                                            : CSharpBinderFlags.None;

                    return(Binder.Convert(flags, type, context));
                };
                Type binderType = typeof(ConvertBinder);

                var func = BuildProxy.GenerateCallSiteFuncType(new Type[] {}, type);

                callSite = CreateCallSite(func, binderType, binder,
                                          explict
                                              ? Invocation.ExplicitConvertBinderName
                                              : Invocation.ImplicitConvertBinderName, context);
            }
            dynamic theDynamicCallSite = callSite;

            return(theDynamicCallSite.OriginalTarget(callSite, target));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Static Method that wraps an existing dynamic object with a explicit interface type
        /// </summary>
        /// <param name="originalDynamic">The original dynamic.</param>
        /// <param name="otherInterfaces">The other interfaces.</param>
        /// <returns></returns>
        public static dynamic DynamicActLike(object originalDynamic, params Type[] otherInterfaces)
        {
            Type tContext;
            bool tDummy;

            originalDynamic = originalDynamic.GetTargetContext(out tContext, out tDummy);
            tContext        = tContext.FixContext();

            var tProxy = BuildProxy.BuildType(tContext, otherInterfaces.First(), otherInterfaces.Skip(1).ToArray());

            return(InitializeProxy(tProxy, originalDynamic, otherInterfaces));
        }
Exemplo n.º 5
0
        public static dynamic DynamicDressedAs(object originalDynamic, params Type[] otherInterfaces)
        {
            Type tContext;
            bool tDummy;

            originalDynamic = originalDynamic.GetInvocationContext(out tContext, out tDummy);
            tContext        = tContext.MaybeDetectArrayContext();

            var tProxy = BuildProxy.BuildType(tContext, otherInterfaces.First(), otherInterfaces.Skip(1).ToArray());

            return(InitializeProxy(tProxy, originalDynamic, otherInterfaces));
        }
Exemplo n.º 6
0
        /// <summary>
        ///   Makes static methods for the passed in property spec, designed to be used with old api's that reflect properties.
        /// </summary>
        /// <param name="originalDynamic"> The original dynamic. </param>
        /// <param name="propertySpec"> The property spec. </param>
        /// <returns> </returns>
        public static dynamic ActLikeProperties(this object originalDynamic, IDictionary <string, Type> propertySpec)
        {
            Type tContext;
            bool tDummy;

            originalDynamic = originalDynamic.GetTargetContext(out tContext, out tDummy);
            tContext        = tContext.FixContext();

            var tProxy = BuildProxy.BuildType(tContext, propertySpec);

            return
                (InitializeProxy(tProxy, originalDynamic, propertySpec: propertySpec));
        }
Exemplo n.º 7
0
        public static dynamic SelectProperties(this object originalDynamic, IDictionary <string, Type> propertySpec)
        {
            Type context;
            bool _;

            originalDynamic = originalDynamic.GetInvocationContext(out context, out _);
            context         = context.MaybeDetectArrayContext();

            var tProxy = BuildProxy.BuildType(context, propertySpec);

            return
                (InitializeProxy(tProxy, originalDynamic, propertySpec: propertySpec));
        }
Exemplo n.º 8
0
        public object GetRealObject(StreamingContext context)
        {
            var tInterfaces = Interfaces;

            if (tInterfaces == null)
            {
                throw new InvalidOperationException("Expected SerializationData to contain a non-null Interfaces field. Please consider upgrading mono!");
            }

            var tType = BuildProxy.BuildType(Context, tInterfaces.First(), tInterfaces.Skip(1).ToArray());

            return(Impromptu.InitializeProxy(tType, Original, tInterfaces));
        }
Exemplo n.º 9
0
        /// <summary>
        ///   Extension Method that Wraps an existing object with an Explicit interface definition
        /// </summary>
        /// <typeparam name="TInterface"> The type of the interface. </typeparam>
        /// <param name="originalDynamic"> The original object can be annoymous type, System.DynamicObject as well as any others. </param>
        /// <param name="otherInterfaces"> Optional other interfaces. </param>
        /// <returns> </returns>
        public static TInterface ActLike <TInterface>(this object originalDynamic, params Type[] otherInterfaces) where TInterface : class
        {
            Type tContext;
            bool tDummy;

            originalDynamic = originalDynamic.GetTargetContext(out tContext, out tDummy);
            tContext        = tContext.FixContext();

            var tProxy = BuildProxy.BuildType(tContext, typeof(TInterface), otherInterfaces);

            return
                ((TInterface)
                 InitializeProxy(tProxy, originalDynamic, new[] { typeof(TInterface) }.Concat(otherInterfaces)));
        }
Exemplo n.º 10
0
        public static TInterface DressedAs <TInterface>(this object originalDynamic, params Type[] otherInterfaces)
            where TInterface : class
        {
            Type context;
            bool _;

            originalDynamic = originalDynamic.GetInvocationContext(out context, out _);
            context         = context.MaybeDetectArrayContext();

            var proxy = BuildProxy.BuildType(context, typeof(TInterface), otherInterfaces);

            return
                ((TInterface)
                 InitializeProxy(proxy, originalDynamic, new[] { typeof(TInterface) }.Concat(otherInterfaces)));
        }
Exemplo n.º 11
0
        internal static void InvokeMemberAction(ref CallSite callsite,
                                                Type binderType,
                                                int knownType,
                                                LazyBinder binder,
                                                String_OR_InvokeMemberName name,
                                                bool staticContext,
                                                Type context,
                                                string[] argNames,
                                                object target,
                                                params object [] args)
        {
            var tSwitch = args.Length;

            switch (tSwitch)
            {
                #region Optimizations
            case 0:
            {
                var tCallSite = (CallSite <Action <CallSite, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target);
                break;
            }

            case 1:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0]);
                break;
            }

            case 2:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1]);
                break;
            }

            case 3:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2]);
                break;
            }

            case 4:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3]);
                break;
            }

            case 5:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4]);
                break;
            }

            case 6:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5]);
                break;
            }

            case 7:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
                break;
            }

            case 8:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
                break;
            }

            case 9:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
                break;
            }

            case 10:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
                break;
            }

            case 11:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]);
                break;
            }

            case 12:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]);
                break;
            }

            case 13:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]);
                break;
            }

            case 14:
            {
                var tCallSite = (CallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Action <CallSite, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object> >(binderType, knownType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]);
                break;
            }

                #endregion
            default:
                var tArgTypes     = Enumerable.Repeat(typeof(object), tSwitch);
                var tDelagateType = BuildProxy.GenerateCallSiteFuncType(tArgTypes, typeof(void));
                Impromptu.InvokeCallSite(CreateCallSite(tDelagateType, binderType, knownType, binder, name, context, argNames), target, args);
                break;
            }
        }
Exemplo n.º 12
0
        internal static TReturn InvokeMemberTargetType <TTarget, TReturn>(
            ref CallSite callsite,
            Type binderType,
            LazyBinder binder,
            String_OR_InvokeMemberName name,
            bool staticContext,
            Type context,
            string[] argNames,
            TTarget target, params object [] args)
        {
            var tSwitch = args.Length;

            switch (tSwitch)
            {
            case 0:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target));
            }

            case 1:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0]));
            }

            case 2:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1]));
            }

            case 3:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2]));
            }

            case 4:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3]));
            }

            case 5:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4]));
            }

            case 6:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5]));
            }

            case 7:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6]));
            }

            case 8:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]));
            }

            case 9:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]));
            }

            case 10:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]));
            }

            case 11:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]));
            }

            case 12:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]));
            }

            case 13:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]));
            }

            case 14:
            {
                var tCallSite = (CallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >)callsite;
                if (tCallSite == null)
                {
                    tCallSite = CreateCallSite <Func <CallSite, TTarget, object, object, object, object, object, object, object, object, object, object, object, object, object, object, TReturn> >(binderType, binder, name, context, argNames, staticContext);
                    callsite  = tCallSite;
                }
                return(tCallSite.Target(tCallSite, target, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]));
            }

            default:
                var tArgTypes     = Enumerable.Repeat(typeof(object), tSwitch);
                var tDelagateType = BuildProxy.GenerateCallSiteFuncType(tArgTypes, typeof(TTarget));
                return(Impromptu.InvokeCallSite(CreateCallSite(tDelagateType, binderType, binder, name, context, argNames), target, args));
            }
        }
Exemplo n.º 13
0
 public void Setup()
 {
     Builder = BuildProxy.WriteOutDll("ImpromptuEmit");
 }