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