GlueViewOfficialPlugins.Scripting.ExpressionParser.EvaluateInvocationExpression C# (CSharp) Method

EvaluateInvocationExpression() private method

private EvaluateInvocationExpression ( Expression expression, List argumentValues, CodeContext codeContext ) : object
expression Expression
argumentValues List
codeContext GlueView.Scripting.CodeContext
return object
        private object EvaluateInvocationExpression(Expression expression, List<object> argumentValues, CodeContext codeContext)
        {
            string invocation = expression.ToString();


            object lastObject = codeContext.ContainerInstance;
            if (invocation == "System.Math.Max" ||
                invocation == "Math.Max")
            {
                return PrimitiveOperationManager.Self.MaxObjects(argumentValues[0], argumentValues[1]);
            }
            else if (invocation == "GetFile" && argumentValues.Count == 1)
            {
                ElementRuntime elementRuntime = null;
                // We're going to have to assume the user means to call GetFile from the current element
                if (codeContext.ContainerInstance != null)
                {
                    if (codeContext.ContainerInstance is ElementRuntime)
                    {
                        elementRuntime = codeContext.ContainerInstance as ElementRuntime;
                    }
                }

                if (elementRuntime != null)
                {
                    return elementRuntime.GetReferencedFileSaveRuntime(argumentValues[0] as string);
                }
                else
                {
                    return null;
                }
            }
            else if (invocation == "System.Math.Min" ||
                invocation == "Math.Min")
            {
                return PrimitiveOperationManager.Self.MinObjects(argumentValues[0], argumentValues[1]);
            }
            else if (invocation == "InterpolateBetween" || invocation == "this.InterpolateBetween")
            {
                MethodCallParser.InterpolateBetween(lastObject as ElementRuntime, argumentValues[0], argumentValues[1], argumentValues[2]);
                return null;
            }
            else
            {
                object caller = GetCaller(expression, codeContext);

                MethodInfo methodInfo;

                object toReturn = null;

                Type[] argumentTypes = new Type[argumentValues.Count];

                for (int i = 0; i < argumentValues.Count; i++)
                {
                    if (argumentValues[i] != null)
                    {
                        argumentTypes[i] = argumentValues[i].GetType();
                    }
                }

                if (TryHandleSpecialCase(expression, argumentValues, argumentTypes, codeContext, invocation, caller, out toReturn))
                {
                    // do nothing, toReturn is set
                }
                else
                {
                    GetMethodInfo(expression, argumentValues, argumentTypes, codeContext, invocation, caller, out methodInfo);

                    if (methodInfo != null)
                    {
                        toReturn = methodInfo.Invoke(caller, argumentValues.ToArray());
                    }
                }
                return toReturn;
            }
            //else
            //{
            //    throw new NotImplementedException();
            //}
        }

Same methods

ExpressionParser::EvaluateInvocationExpression ( ICSharpCode invocationExpression, CodeContext codeContext ) : object