Ejemplo n.º 1
0
        private LiquidExpressionResult EvalExpression(
            ITemplateContext templateContext,
            VariableReferenceTree o,
            IEnumerable <Option <ILiquidValue> > childresults)
        {
            var childResultsList = childresults as IList <Option <ILiquidValue> > ?? childresults.ToList();
            var valueResult      = o.Value.Eval(templateContext, childResultsList);

            if (valueResult.IsError)
            {
                return(valueResult);
            }
            LiquidExpressionResult indexResult;

            if (o.IndexExpression != null)
            {
                indexResult = o.IndexExpression.Eval(templateContext, childResultsList);
                if (indexResult.IsError)
                {
                    return(indexResult);
                }
            }
            else
            {
                return(valueResult);
            }
            if (!valueResult.SuccessResult.HasValue)
            {
                return(LiquidExpressionResult.Success(new None <ILiquidValue>()));
                //return LiquidExpressionResult.Error(SymbolTable.NotFoundError(valueResult));
            }
            if (!indexResult.SuccessResult.HasValue)
            {
                return(LiquidExpressionResult.Success(new None <ILiquidValue>()));
                //return LiquidExpressionResult.Error("ERROR: the index for "+valueResult.SuccessResult.Value+" has no value");
            }
            return(new IndexDereferencer().Lookup(templateContext, valueResult.SuccessResult.Value, indexResult.SuccessResult.Value));
        }
//        private LiquidExpressionResult EvalExpression(
//            ITemplateContext templateContext, 
//            IExpressionDescription o, 
//            IEnumerable<Option<IExpressionConstant>> childresults)
//        {
//            return o.Eval(templateContext, childresults);
//        }

        private LiquidExpressionResult EvalExpression(
            ITemplateContext templateContext, 
            VariableReferenceTree o,
            IEnumerable<Option<IExpressionConstant>> childresults)
        {
            var childResultsList = childresults as IList<Option<IExpressionConstant>> ?? childresults.ToList();
            var valueResult = o.Value.Eval(templateContext, childResultsList);
            if (valueResult.IsError)
            {
                return valueResult;
            }
            LiquidExpressionResult indexResult;
            if (o.IndexExpression != null)
            {
                indexResult = o.IndexExpression.Eval(templateContext, childResultsList);
                if (indexResult.IsError)
                {
                    return indexResult;
                }               
            }
            else
            {
                return valueResult;
            }
            if (!valueResult.SuccessResult.HasValue)
            {
                return LiquidExpressionResult.Success(new None<IExpressionConstant>());
                //return LiquidExpressionResult.Error("ERROR: there is no value");
            }
            if (!indexResult.SuccessResult.HasValue)
            {
                return LiquidExpressionResult.Success(new None<IExpressionConstant>());
                //return LiquidExpressionResult.Error("ERROR: the index for "+valueResult.SuccessResult.Value+" has no value");
            }
            return new IndexDereferencer().Lookup(templateContext, valueResult.SuccessResult.Value, indexResult.SuccessResult.Value);
        }
 private static String AsString(VariableReferenceTree tree)
 {
     var result = Print(tree.Value);
     if (tree.IndexExpression != null)
     {
         result += "[" + Print(tree.IndexExpression) + "]";
     }
     return result;
 }