diff --git a/operator-post-inc.go b/operator-post-inc.go index b053a43..bb3a9d4 100644 --- a/operator-post-inc.go +++ b/operator-post-inc.go @@ -35,7 +35,39 @@ func evalPostInc(ctx ExprContext, opTerm *term) (v any, err error) { return } +// -------- post decrement term + +func newPostDecTerm(tk *Token) *term { + return &term{ + tk: *tk, + parent: nil, + children: make([]*term, 0, 1), + position: posPostfix, + priority: priIncDec, + evalFunc: evalPostDec, + } +} + +func evalPostDec(ctx ExprContext, opTerm *term) (v any, err error) { + var childValue any + if childValue, err = opTerm.evalPrefix(ctx); err != nil { + return + } + + /* if it, ok := childValue.(Iterator); ok { + v, err = it.Next() + } else */if IsInteger(childValue) && opTerm.children[0].symbol() == SymVariable { + v = childValue + i, _ := childValue.(int64) + ctx.SetVar(opTerm.children[0].source(), i-1) + } else { + err = opTerm.errIncompatibleType(childValue) + } + return +} + // init func init() { registerTermConstructor(SymDoublePlus, newPostIncTerm) + registerTermConstructor(SymDoubleMinus, newPostDecTerm) }