Example #1
0
        public object CallMethod(object target, string method, object[] args)
        {
            Type t = target as Type;

            if (t == null)
            {
                t = target.GetType();
            }
            Delegate del = GetMethod(target, method, args);

            if (del == null)
            {
                //del = DelegateUtility.MethodToInstanceDelegate(target, t.GetMethod(method));
                MethodInfo info = ReflectionUtility.FindMethod(t, method, args);
                if (info.IsStatic)
                {
                    TypeDef typeDef = _assembly.GetTypeDef(t);
                    if (typeDef == null || !typeDef.allowStaticMembers)
                    {
                        throw new Exception("Static member access is not allowed on type " + t.Name);
                    }
                }
                del = DelegateUtility.MethodToInstanceDelegate(target, ReflectionUtility.FindMethod(t, method, args));
                Cache(target, method, del, args);
            }

            return(SmartCall(del, args));
        }
Example #2
0
        public object CallMethod(object target, MethodInfo method, object[] args)
        {
            Delegate del = GetMethod(target, method.Name, args);

            if (del == null)
            {
                del = DelegateUtility.MethodToInstanceDelegate(target, method);
                Cache(target, method.Name, del, args);
            }

            return(SmartCall(del, args));
        }
Example #3
0
        public object CallLambda(string identifier, object lambda, object[] args)
        {
            Delegate del = GetMethod(identifier, args);

            if (del == null)
            {
                del = DelegateUtility.LambdaToDelegate(lambda);
                Cache(identifier, del);
            }

            return(SmartCall(del, args));
        }
Example #4
0
        public MethodCall(MethodInfo methodInfo, object target, object[] argumentNodes, CompilerData cdata) : base(DelegateUtility.GetMethodType(methodInfo), methodInfo.Name, target, methodInfo.DeclaringType)
        {
            _method        = methodInfo;
            _returnType    = CompilerUtility.GetReturnType(DelegateUtility.GetMethodType(methodInfo));
            _cdata         = cdata;
            _argNodeBuffer = (argumentNodes != null) ? argumentNodes : new object[0];
            _argBuffer     = new object[_argNodeBuffer.Length];

            if (!ValidateArguments())
            {
                throw new Exception("Arguments suppied do not match the spefied signaure: " + _identifer + _type.ToString());
            }
        }
Example #5
0
        public static Type GetMemberDataType(Type classType, string identifier)
        {
            MemberInfo[] members = classType.GetMember(identifier);
            if (members.Length < 1)
            {
                throw new CompilationException("There is no member " + identifier + " on type " + classType.Name);
            }

            switch (members[0].MemberType)
            {
            case MemberTypes.Property:
                return(((PropertyInfo)members[0]).PropertyType);

            case MemberTypes.Field:
                return(((FieldInfo)members[0]).FieldType);

            case MemberTypes.Method:
                return(DelegateUtility.GetMethodType(members[0] as MethodInfo));

            default:
                return(typeof(object));
            }
        }