예제 #1
0
        public void TestIsBefore()
        {
            var s = new StatementInlineBlock();

            var vdecl1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var s1     = new Statements.StatementAssign(vdecl1, new ValSimple("fork", typeof(int)));
            var s2     = new Statements.StatementAssign(vdecl1, new ValSimple("fork", typeof(int)));

            s.Add(s1);
            s.Add(s2);

            Assert.IsTrue(s.IsBefore(s1, s2), "s1 before s2");
            Assert.IsFalse(s.IsBefore(s2, s1), "s2 is before s1");
        }
예제 #2
0
        /// <summary>
        /// Some method is being called. Offer plug-ins a chance to transform this method call.
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        protected override Expression VisitMethodCall(MethodCallExpression expression)
        {
            _result = TypeHandlers.CodeMethodCall(expression, _codeEnv, MEFContainer);

            // Cache this so that we don't have to re-call it later (if need be) if this is a simple type.

            if (_result.Type.IsNumberType() && !_result.IsSimpleTerm())
            {
                var cachedValue = DeclarableParameter.CreateDeclarableParameterExpression(_result.Type);
                _codeEnv.Add(cachedValue);
                var assign = new Statements.StatementAssign(cachedValue, _result);
                _codeEnv.Add(assign);
                _result = cachedValue;
            }

            // Always return the expression

            return(expression);
        }
        public void TestIsBefore()
        {
            var s = new StatementInlineBlock();

            var vdecl1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var s1 = new Statements.StatementAssign(vdecl1, new ValSimple("fork", typeof(int)));
            var s2 = new Statements.StatementAssign(vdecl1, new ValSimple("fork", typeof(int)));
            s.Add(s1);
            s.Add(s2);

            Assert.IsTrue(s.IsBefore(s1, s2), "s1 before s2");
            Assert.IsFalse(s.IsBefore(s2, s1), "s2 is before s1");
        }