public Evaluate ( Context context, bool withvars = false ) : object | ||
context | Context | |
withvars | bool | |
return | object |
public object Evaluate(Context context, bool withvars = false)
{
IList<object> elements = new List<object>();
foreach (var expr in this.expressions)
elements.Add(expr.Evaluate(context, withvars));
List tail = null;
if (this.tailexpression != null)
{
object tailvalue = this.tailexpression.Evaluate(context, withvars);
if (tailvalue is Variable)
return List.MakeList(elements, (Variable)tailvalue);
tail = (List)tailvalue;
}
if (elements.Count == 0 && tail == null)
return EmptyList.Instance;
return List.MakeList(elements, tail);
}
public void CreateListWithVariableAsTail() { Context context = new Context(); var expr = new ListExpression(new IExpression[] { new ConstantExpression(1), new ConstantExpression(2) }, new VariableExpression(new Variable("Tail"))); var result = expr.Evaluate(context, true); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(List)); Assert.AreEqual("[1,2|Tail]", result.ToString()); }