public void AddFilterSymbolToCurrentExpression(FilterSymbol filter)
 {
     _liquidExpressionStack.Peek().Data.AddFilterSymbol(filter);
 }
 public void AddFilterSymbolToLastExpression(FilterSymbol filter)
 {
     _lastExpression.Data.AddFilterSymbol(filter);
 }
 private static IFilterExpression InstantiateFilter(ITemplateContext templateContext, FilterSymbol filterSymbol)
 {
     var filterType = templateContext.SymbolTableStack.LookupFilterType(filterSymbol.Name);
     if (filterType == null)
     {
         //TODO: make this return an error filter or something?
         //throw new Exception("Invalid filter: " + filterSymbol.Name);
         //return new Tuple<String, IFilterExpression>(filterSymbol.Name, null);
         return null;
     }
     var expressionConstants = filterSymbol.Args.Select(x => LiquidExpressionEvaluator.Eval(x, templateContext)).ToList();
     //var expressionConstants = filterSymbol.Args.Select(x => x.Eval(templateContext, new List<Option<IExpressionConstant>>())).ToList();
     // TODO: Handle the error if any
     //return FilterFactory.InstantiateFilter(filterSymbol.Name, filterType, expressionConstants.Select(x => x.IsSuccess? x.SuccessResult));
     if (expressionConstants.Any(x => x.IsError))
     {
         //return null; // eval-ing a constant failed.
         throw new Exception(String.Join("," ,expressionConstants.Where(x => x.IsError).Select(x => x.ErrorResult.Message)));
     }
     return FilterFactory.InstantiateFilter(filterSymbol.Name, filterType, expressionConstants.Select(x => x.SuccessResult));
 }
 public void AddFilterSymbol(FilterSymbol filterSymbol)
 {
     _filterSymbols.Add(filterSymbol);
 }
 public void AddFilterSymbol(FilterSymbol filterSymbol)
 {
     _filterSymbols.Add(filterSymbol);
 }