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