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