Пример #1
0
        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
        {
            if (EmptyBody)
            {
                return(null);
            }

            if (context == null)
            {
                context = ThreadContext.activeContext;
            }
            if (context == null)
            {
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            }
            if (bVisual && method_CLRSharp.IsVirtual)
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst.type != this.DeclaringType)
                {
                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
                    if (impl != this)
                    {
                        return(impl.Invoke(context, _this, _params));
                    }
                }
            }
            if (method_CLRSharp.Name == ".ctor")
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst == null)
                {
                    inst = new CLRSharp_Instance(_DeclaringType);
                }

                //if (_DeclaringType.BaseType is ICLRType_System)
                context.ExecuteFunc(this, inst, _params);
                return(inst);
            }
            var obj = context.ExecuteFunc(this, _this, _params);

            if (obj is CLRSharp_Instance && ReturnType is ICLRType_System)
            {
                var bind = context.environment.GetCrossBind((ReturnType as ICLRType_System).TypeForSystem);
                if (bind != null)
                {
                    obj = bind.CreateBind(obj as CLRSharp_Instance);
                }
            }
            return(obj);
        }
Пример #2
0
        public object Invoke(ThreadContext context, object _this, object[] _params)
        {
            if (context == null)
            {
                context = ThreadContext.activeContext;
            }
            if (context == null)
            {
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            }
            if (method_CLRSharp.Name == ".ctor")
            {
                CLRSharp_Instance inst = new CLRSharp_Instance(_DeclaringType);

                context.ExecuteFunc(method_CLRSharp, inst, _params);
                return(inst);
            }
            return(context.ExecuteFunc(method_CLRSharp, _this, _params));
        }
Пример #3
0
        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
        {
            if (context == null)
            {
                context = ThreadContext.activeContext;
            }
            if (context == null)
            {
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            }
            if (bVisual && method_CLRSharp.IsVirtual)
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst.type != this.DeclaringType)
                {
                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
                    if (impl != this)
                    {
                        return(impl.Invoke(context, _this, _params));
                    }
                }
            }
            if (method_CLRSharp.Name == ".ctor")
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst == null)
                {
                    inst = new CLRSharp_Instance(_DeclaringType);
                }

                //if (_DeclaringType.BaseType is ICLRType_System)
                context.ExecuteFunc(this, inst, _params);
                return(inst);
            }
            return(context.ExecuteFunc(this, _this, _params));
        }
Пример #4
0
        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
        {
            if (context == null)
                context = ThreadContext.activeContext;
            if (context == null)
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            if (bVisual && method_CLRSharp.IsVirtual)
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst.type != this.DeclaringType)
                {
                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
                    if (impl != this)
                    {
                        return impl.Invoke(context, _this, _params);
                    }
                }
            }
            if (method_CLRSharp.Name == ".ctor")
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst == null)
                    inst = new CLRSharp_Instance(_DeclaringType);

                //if (_DeclaringType.BaseType is ICLRType_System)
                context.ExecuteFunc(this, inst, _params);
                return inst;
            }
            var obj = context.ExecuteFunc(this, _this, _params);
            if (obj is CLRSharp_Instance && ReturnType is ICLRType_System)
            {
                var bind = context.environment.GetCrossBind((ReturnType as ICLRType_System).TypeForSystem);
                if (bind != null)
                {
                    obj = bind.CreateBind(obj as CLRSharp_Instance);
                }
            }
            return obj;
        }
Пример #5
0
        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
        {
            if (context == null)
                context = ThreadContext.activeContext;
            if (context == null)
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            if (bVisual && method_CLRSharp.IsVirtual)
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst.type != this.DeclaringType)
                {
                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
                    if (impl != this)
                    {
                        return impl.Invoke(context, _this, _params);
                    }
                }
            }
            if (method_CLRSharp.Name == ".ctor")
            {
                CLRSharp_Instance inst = _this as CLRSharp_Instance;
                if (inst == null)
                    inst = new CLRSharp_Instance(_DeclaringType);

                //if (_DeclaringType.BaseType is ICLRType_System)
                context.ExecuteFunc(this, inst, _params);
                return inst;
            }
            return context.ExecuteFunc(this, _this, _params);
        }
        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
        {
            bool flag = context == null;

            if (flag)
            {
                context = ThreadContext.activeContext;
            }
            bool flag2 = context == null;

            if (flag2)
            {
                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
            }
            bool   flag3 = bVisual && this.method_CLRSharp.IsVirtual;
            object result;

            if (flag3)
            {
                CLRSharp_Instance cLRSharp_Instance = _this as CLRSharp_Instance;
                bool flag4 = cLRSharp_Instance.type != this.DeclaringType;
                if (flag4)
                {
                    IMethod vMethod = cLRSharp_Instance.type.GetVMethod(this);
                    bool    flag5   = vMethod != this;
                    if (flag5)
                    {
                        result = vMethod.Invoke(context, _this, _params);
                        return(result);
                    }
                }
            }
            bool flag6 = this.method_CLRSharp.Name == ".ctor";

            if (flag6)
            {
                CLRSharp_Instance cLRSharp_Instance2 = _this as CLRSharp_Instance;
                bool flag7 = cLRSharp_Instance2 == null;
                if (flag7)
                {
                    cLRSharp_Instance2 = new CLRSharp_Instance(this._DeclaringType);
                }
                context.ExecuteFunc(this, cLRSharp_Instance2, _params);
                result = cLRSharp_Instance2;
            }
            else
            {
                object obj   = context.ExecuteFunc(this, _this, _params);
                bool   flag8 = obj is CLRSharp_Instance && this.ReturnType is ICLRType_System;
                if (flag8)
                {
                    ICrossBind crossBind = context.environment.GetCrossBind((this.ReturnType as ICLRType_System).TypeForSystem);
                    bool       flag9     = crossBind != null;
                    if (flag9)
                    {
                        obj = crossBind.CreateBind(obj as CLRSharp_Instance);
                    }
                }
                result = obj;
            }
            return(result);
        }