/// <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); }