Esempio n. 1
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);
        }