コード例 #1
0
        internal static IErrorCollector ParseError(string expression)
        {
            var builder = FileBuilder.ParseExpression(
                null, new Type[] { typeof(ExpressionParser) },
                expression);

            return(builder.Errors);
        }
コード例 #2
0
        private void AssertTypeExpression(Type expected, string expression)
        {
            var builder = FileBuilder.ParseExpression(expression);
            var result  = builder.Listener.GetExpressionResult();

            Assert.IsTrue(result.IsConstant);
            Assert.IsTrue(result.Value is TypeReference);
            Assert.AreEqual(expected, (((TypeReference)result.Value).Type));
        }
コード例 #3
0
        private void AssertConstantExpression <T>(T expected, string expression)
        {
            var builder = FileBuilder.ParseExpression(expression);
            var result  = builder.Listener.GetExpressionResult();

            Assert.IsTrue(result.IsConstant);
            Assert.IsTrue(result.Value is T);
            Assert.AreEqual(expected, (T)result.Value);
        }
コード例 #4
0
        internal static SBExpressionData Parse(string expression)
        {
            var builder = FileBuilder.ParseExpression(
                null, new Type[] { typeof(ExpressionParser) },
                expression);

            Assert.AreEqual(0, builder.Errors.ErrorCount);
            return(builder.Listener.GetExpressionResult());
        }
コード例 #5
0
        public static object ParseExpression(IScriptFile fileContext, string expression)
        {
            var builder = FileBuilder.ParseExpression(fileContext as ScriptFile, m_addonManager, expression);

            if (builder.Errors.ErrorCount > 0)
            {
                throw new Exception("Error parsing expression: " + builder.Errors[0].Message);
            }
            var result = builder.Listener.GetExpressionResult();

            if (result.IsUnresolvedIdentifier)
            {
                result = new SBExpressionData(Expression.Constant(result.Value));
            }
            var expressionAsObject = Expression.Convert(result.ExpressionCode, typeof(object));

            return(Expression.Lambda <Func <object> >(expressionAsObject).Compile()());
        }
コード例 #6
0
        internal static T ParseAndRunExp <T>(string expression)
        {
            var builder = FileBuilder.ParseExpression(typeof(DummyClass), null, expression);

            Assert.AreEqual(0, builder.Errors.ErrorCount);
            var result = builder.Listener.GetExpressionResult();

            Assert.IsTrue(result.IsExpression);
            Assert.AreEqual(typeof(T), result.DataType.Type);


            var compiled = System.Linq.Expressions.Expression.Lambda <Func <T> >(result.ExpressionCode).Compile();
            var before   = DateTime.Now;

            try
            {
                return(compiled());
            }
            finally
            {
                LastExecutionTime = DateTime.Now - before;
            }
        }