public static IActivationExpression CompileFilterExpression(FilterElement element, IEnumerable <Declaration> declarations) { var optimizer = new ExpressionMultiParameterOptimizer <Func <object[], object> >(); var optimizedExpression = optimizer.CompactParameters(element.Expression, 0); var @delegate = optimizedExpression.Compile(); var fastDelegate = Create(@delegate, element.Expression.Parameters.Count); var factMap = IndexMap.CreateMap(element.Imports, declarations); var expression = new ActivationExpression(element.Expression, fastDelegate, factMap); return(expression); }
public IActivationExpression <TResult> CompileActivationExpression <TResult>(ExpressionElement element, List <Declaration> declarations, IndexMap tupleFactMap) { var activationFactMap = IndexMap.CreateMap(element.Imports, declarations); var factMap = IndexMap.Compose(tupleFactMap, activationFactMap); var optimizedExpression = ExpressionOptimizer.Optimize <Func <Tuple, TResult> >( element.Expression, factMap, tupleInput: true, factInput: false); var @delegate = ExpressionCompiler.Compile(optimizedExpression); var argumentMap = new ArgumentMap(factMap, element.Expression.Parameters.Count); var expression = new ActivationExpression <TResult>(element.Expression, @delegate, argumentMap); return(expression); }