コード例 #1
0
        public static CSharpExpressionEvaluation.EvaluateResult EvaluateStatement(string statement, object thisObject, bool evaluateValue, bool applyCasts, bool useDebugger)
        {
            List <Token> tokens = GetTokensOfStatement(statement);

            var variables = new Dictionary <string, CSharpExpressionEvaluation.Variable>()
            {
                { "this", new CSharpExpressionEvaluation.Variable()
                  {
                      Value = thisObject, Type = thisObject == null ? null : thisObject.GetType()
                  } }
            };

            var tracker = new EvaluationTracker();
            CSharpExpressionEvaluation eval = new CSharpExpressionEvaluation(tokens, variables, Store, evaluateValue, tracker, useDebugger: useDebugger);

            //eval.EvaluateStatement();
            eval.EvaluateExpression();

            if (applyCasts)
            {
                eval.ApplyPendingCasts();
            }

            return(new CSharpExpressionEvaluation.EvaluateResult()
            {
                Result = eval.CurrentValue, ResultType = eval.CurrentType
            });

            //EvaluateStatement(tokens, thisObject, evaluateValue);
        }
コード例 #2
0
        public static KeyValuePair <Type, string> GetTypeOfCurrentStatement(string statement, int pos, object thisObject, bool applyCasts)
        {
            var beforeAndAfterPos = GetBeforeAndAfterPosition(statement, pos);

            var variables = new Dictionary <string, CSharpExpressionEvaluation.Variable>()
            {
                { "this", new CSharpExpressionEvaluation.Variable()
                  {
                      Value = thisObject, Type = thisObject == null ? null : thisObject.GetType()
                  } }
            };


            var leadingTokens = GetTokensOfStatement(beforeAndAfterPos.Key);

            var tracker = new EvaluationTracker();
            //var tokens = GetTokensOfStatement(statement);

            //var tokenAtCurPos = GetTokenIndexFromCharIndex(statement, pos);

            //CSharpExpressionEvaluation eval = new CSharpExpressionEvaluation(leadingTokens, variables, Store, false, tracker);
            CSharpExpressionEvaluation eval = new CSharpExpressionEvaluation(leadingTokens, variables, Store, false, tracker);

            try
            {
                //eval.EvaluateStatement();
                eval.EvaluateExpression();

                if (applyCasts)
                {
                    eval.ApplyPendingCasts();
                }
            }
            catch (Exception)
            {
            }


            var result = new CSharpExpressionEvaluation.EvaluateResult()
            {
                Result = eval.CurrentValue, ResultType = eval.CurrentType
            };

            //EvaluateResult result = EvaluateStatement(tokensAndAfter.Item1, thisObject, false);

            return(new KeyValuePair <Type, string>(result.ResultType, beforeAndAfterPos.Value));
        }
コード例 #3
0
        public static List <MethodInfo> GetCurrentMethodOverloads(string statement, int pos, object thisObject)
        {
            var beforeAndAfterPos = GetBeforeAndAfterPosition(statement, pos);

            int prevStatementEndIdx = pos - (beforeAndAfterPos.Key.Length + beforeAndAfterPos.Value.Length);

            prevStatementEndIdx--;

            if (prevStatementEndIdx >= 0)
            {
                var statementBeforeParts   = GetBeforeAndAfterPosition(statement, prevStatementEndIdx);
                var encapsulatingStatement = GetTokensOfStatement(statementBeforeParts.Key);

                var variables = new Dictionary <string, CSharpExpressionEvaluation.Variable>()
                {
                    { "this", new CSharpExpressionEvaluation.Variable()
                      {
                          Value = thisObject, Type = thisObject.GetType()
                      } }
                };

                var tracker = new EvaluationTracker();
                CSharpExpressionEvaluation eval = new CSharpExpressionEvaluation(encapsulatingStatement, variables, Store, false, tracker);
                var tokens = GetTokensOfStatement(statement);

                //eval.EvaluateStatement();
                eval.EvaluateExpression();

                if (eval.CurrentType != null)
                {
                    string methodName = statementBeforeParts.Value.Replace("(", "");
                    methodName = System.Text.RegularExpressions.Regex.Replace(methodName, "<.*>", "");

                    return(eval.CurrentType.GetMethodsOfType(true, true)
                           .Where(m => m.Name == methodName)
                           .ToList());
                }
            }
            return(new List <MethodInfo>());
        }