public override object Invoke(HostItem hostItem)
            {
                if (reflectionMethods.Contains(method, MemberComparer <MethodInfo> .Instance))
                {
                    hostItem.Engine.CheckReflection();
                }

                return(InvokeHelpers.InvokeMethod(hostItem, hostTarget.InvokeTarget, method, args));
            }
Esempio n. 2
0
            public override object Invoke(ScriptEngine engine)
            {
                if (method == getTypeMethod)
                {
                    engine.CheckReflection();
                }

                return(InvokeHelpers.InvokeMethod(hostTarget.InvokeTarget, method, args));
            }
Esempio n. 3
0
            public override object Invoke(HostItem hostItem)
            {
                if (method == getTypeMethod)
                {
                    hostItem.Engine.CheckReflection();
                }

                return(InvokeHelpers.InvokeMethod(hostItem, hostTarget.InvokeTarget, method, args));
            }
Esempio n. 4
0
        public override bool TryInvokeAuxMember(IHostInvokeContext context, string name, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result)
        {
            const BindingFlags getPropertyFlags =
                BindingFlags.GetField |
                BindingFlags.GetProperty;

            const BindingFlags setPropertyFlags =
                BindingFlags.SetProperty |
                BindingFlags.PutDispProperty |
                BindingFlags.PutRefDispProperty;

            if (name == "out")
            {
                if ((invokeFlags & getPropertyFlags) != 0)
                {
                    result = new OutArg <T>(this);
                    return(true);
                }
            }
            else if (name == "ref")
            {
                if ((invokeFlags & getPropertyFlags) != 0)
                {
                    result = new RefArg <T>(this);
                    return(true);
                }
            }
            else if (name == "value")
            {
                if (invokeFlags.HasFlag(BindingFlags.InvokeMethod))
                {
                    if (InvokeHelpers.TryInvokeObject(context, value, invokeFlags, args, bindArgs, typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T)), out result))
                    {
                        return(true);
                    }

                    if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1))
                    {
                        result = context.Engine.PrepareResult(value, ScriptMemberFlags.None, false);
                        return(true);
                    }

                    result = null;
                    return(false);
                }

                if ((invokeFlags & getPropertyFlags) != 0)
                {
                    result = context.Engine.PrepareResult(value, ScriptMemberFlags.None, false);
                    return(true);
                }

                if ((invokeFlags & setPropertyFlags) != 0)
                {
                    if (args.Length == 1)
                    {
                        result = context.Engine.PrepareResult(((IHostVariable)this).Value = args[0], typeof(T), ScriptMemberFlags.None, false);
                        return(true);
                    }
                }
            }

            result = null;
            return(false);
        }