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

// context.go
package expr

type FuncTemplate func(ctx exprContext, name string, args []any) (result any, err error)

type exprFunc interface {
	Name() string
	MinArgs() int
	MaxArgs() int
}

type exprContext interface {
	GetValue(varName string) (value any, exists bool)
	SetValue(varName string, value any)
	GetFuncInfo(name string) exprFunc
	Call(name string, args []any) (result any, err error)
	RegisterFunc(name string, f FuncTemplate, minArgs, maxArgs int)
}