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)); }
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)); }
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)); }
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()); } }
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)); } }