Esempio n. 1
0
        public static Dynamic GetValue(Type type, string memberName, object target)
        {
            object result = null;

            if (type.IsCOMObject)
            {
                const BindingFlags flags = BindingFlags.Public | BindingFlags.Static |
                                           BindingFlags.Instance | BindingFlags.GetField |
                                           BindingFlags.GetProperty | BindingFlags.OptionalParamBinding;

                result = type.InvokeMember(memberName, flags, null, target, null);
            }
            else
            {
                MemberInfo member = GetValueMember(type, memberName);
                switch (member.MemberType)
                {
                case MemberTypes.Field:
                    var field = (FieldInfo)member;
                    result = field.GetValue(target);
                    break;

                case MemberTypes.Property:
                    var property = (PropertyInfo)member;
                    if (!property.CanRead)
                    {
                        throw new InvalidOperationException(Resources.CannotReadProperty);
                    }
                    result = property.GetValue(target, null);
                    break;
                }
            }

            return(DynamicFactory.CreateDynamic(result));
        }
Esempio n. 2
0
        /// <summary>
        /// Invokes a scripted function from user code.
        /// </summary>
        /// <param name="function">The name of the function to be invoked</param>
        /// <param name="args">Arguments to be passed to the function</param>
        /// <returns>The value returned by the function itself</returns>
        public Dynamic Invoke(string function, params object[] args)
        {
            var literals = new Expression[args.Length];

            for (int i = 0; i < args.Length; ++i)
            {
                literals[i] = new Literal(DynamicFactory.CreateDynamic(args[i]));
            }

            var call = new FunctionCall(function, literals);

            RuntimeServices.Interpreter = interpreter;
            call.AcceptCompiler(interpreter);

            return(interpreter.ReturnedValue);
        }
Esempio n. 3
0
        /// <summary>
        /// Invokes a method from the given object with the given arguments.
        /// </summary>
        /// <param name="method">The method's name</param>
        /// <param name="caller">The object from which to call a method</param>
        /// <param name="args">The arguments to pass to the method</param>
        /// <returns>The value returned by the method</returns>
        public static Dynamic Invoke(string method, Dynamic caller, params object[] args)
        {
            Expression callingExpr = new Literal(caller);

            var literals = new Expression[args.Length];

            for (int i = 0; i < args.Length; ++i)
            {
                literals[i] = new Literal(DynamicFactory.CreateDynamic(args[i]));
            }

            var call = new MethodCall(callingExpr, method, literals);

            call.AcceptCompiler(Interpreter);

            return(Interpreter.ReturnedValue);
        }
Esempio n. 4
0
        /// <summary>
        /// Invokes a static method with the given arguments.
        /// </summary>
        /// <param name="method">The method's name</param>
        /// <param name="klass">The class from which to call a method</param>
        /// <param name="args">The arguments to pass to the method</param>
        /// <returns>The value returned by the method</returns>
        public static Dynamic Invoke(string method, Class klass, params object[] args)
        {
            var name = new QualifiedName(klass.Name, method);

            var literals = new Expression[args.Length];

            for (int i = 0; i < args.Length; ++i)
            {
                literals[i] = new Literal(DynamicFactory.CreateDynamic(args[i]));
            }

            var call = new StaticMethodCall(name, literals);

            call.AcceptCompiler(Interpreter);

            return(Interpreter.ReturnedValue);
        }