Exemplo n.º 1
0
        public virtual ILLazy Call(string methodName, Type[] genericArgs, ILData[] invokeParams)
        {
            if (((IBuilder)this.Coding).IsBuild)
            {
                throw new CodingException("Metodun tanımlandığı tip derlenmiş. Derlenmiş metotların gövdesi yeniden yazılamaz.");
            }
            if (methodName == null)
            {
                throw new ArgumentNullException("methodName");
            }

            ILLazy push = null;

            Type[]     parameterTypes = ILExtentionUtils.ParametersToTypeList(invokeParams);
            MethodInfo method         = ILExtentionUtils.FindMethod(this.ILType, methodName, parameterTypes, false);

            if (method == null || method.IsStatic)
            {
                throw new MethodNotFoundException("Hedef obje, çağrılan metodu içermiyor veya metot statik.");
            }
            else
            {
                push = new ILLazyInvoke(this.Coding, this, method, genericArgs, invokeParams);
            }

            if (push.ILType == typeof(void))
            {
                ((IILPusher)push).Push();
                return(null);
            }
            else
            {
                return(push);
            }
        }
Exemplo n.º 2
0
        public override ILLazy Call(string methodName, Type[] genericArgs, ILData[] invokeParams)
        {
            if (((IBuilder)this.Coding).IsBuild)
            {
                throw new CodingException("Metodun tanımlandığı tip derlenmiş. Derlenmiş metotların gövdesi yeniden yazılamaz.");
            }
            if (methodName == null)
            {
                throw new ArgumentNullException("methodName");
            }

            ILLazy push = null;

            Type[]     parameterTypes = ILExtentionUtils.ParametersToTypeList(invokeParams);
            Type       baseType       = this.Coding.CurrentMethod.ILTypeBuilder.BaseType;
            MethodInfo baseMethod     = ILExtentionUtils.FindMethod(baseType, methodName, parameterTypes, false);

            if (baseMethod == null || baseMethod.IsStatic)
            {
                throw new MethodNotFoundException("Hedef obje, çağrılan metodu içermiyor veya metot statik.");
            }
            else
            {
                if ((baseMethod.Attributes & MethodAttributes.Private) == MethodAttributes.Private)
                {
                    throw new MethodAccessException("Metot, private olarak tanımlanmış. Metoda erişilemiyor.");
                }
                else
                if (baseMethod.IsGenericMethod && (genericArgs == null || genericArgs.Length == 0))
                {
                    throw new ArgumentNullException("genericArgs", "Çağrılan yöntem bir generic tanımlama içeriyor.");
                }
                else
                {
                    push = new ILLazyInvoke(this.Coding, this, baseMethod, genericArgs, invokeParams);
                }
            }
            if (push.ILType == typeof(void))
            {
                ((IILPusher)push).Push();
                return(null);
            }
            else
            {
                return(push);
            }
        }