public void Eval(IFuncExpression expr) { if (expr is StackOpExpression) { var st = (StackOpExpression) expr; st.Eval(this); //maybe this should be some sort of message? RefreshStackView(); return; } var vals = _expressions .AsEnumerable() .Reverse() .Take(expr.StackArgs) .ToList(); var eVal = expr.Eval(vals); _expressions.RemoveRange(_expressions.Count - expr.StackArgs, expr.StackArgs); if (expr is NullExpression) return; Push(eVal); }