// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// operand-expr.go
package expr

import "fmt"

// -------- expr term
func newExprTerm(tk *Token) *term {
	return &term{
		tk:       *tk,
		parent:   nil,
		children: nil,
		position: posLeaf,
		priority: priValue,
		evalFunc: evalExpr,
	}
}

// -------- eval expr
func evalExpr(ctx ExprContext, self *term) (v any, err error) {
	if expr, ok := self.value().(Expr); ok {
		v, err = expr.eval(ctx, false)
	} else {
		err = fmt.Errorf("expression expected, got %T", self.value())
	}
	return
}

// init
// func init() {
// 	registerTermConstructor(SymExpression, newExprTerm)
// }