/// <summary>
 /// Analyses InvokeExpression
 /// </summary>
 /// <param name="expression"></param>
 /// <param name="parameters"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 protected virtual Expression AnalyzeInvoke(Expression expression, IList<Expression> parameters,
     TranslationContext context)
 {
     var invocationExpression = (InvocationExpression)expression;
     var lambda = invocationExpression.Expression as LambdaExpression;
     if (lambda != null)
     {
         var localBuilderContext = context.NewQuote();
         //for (int parameterIndex = 0; parameterIndex < lambda.Parameters.Count; parameterIndex++)
         //{
         //    var parameter = lambda.Parameters[parameterIndex];
         //    localBuilderContext.Parameters[parameter.Name] = Analyze(invocationExpression.Arguments[parameterIndex], context);
         //}
         //return Analyze(lambda, localBuilderContext);
         return Analyze(lambda, invocationExpression.Arguments, localBuilderContext);
     }
     // TODO: see what we must do here
     return expression;
 }
 /// <summary>
 /// A Quote creates a new local context, outside which created parameters disappear
 /// This is why we clone the context
 /// </summary>
 /// <param name="expression"></param>
 /// <param name="parameters"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 protected virtual Expression AnalyzeQuote(Expression expression, IList<Expression> parameters, TranslationContext context)
 {
     var builderContextClone = context.NewQuote();
       UnaryExpression unExpr = (UnaryExpression)expression;
       return Analyze(unExpr.Operand, parameters, builderContextClone);
 }