Compare commits
3 Commits
d64602cb00
...
037565c41e
| Author | SHA1 | Date | |
|---|---|---|---|
| 037565c41e | |||
| f8d12b1a93 | |||
| 518d4d8d65 |
@ -211,6 +211,25 @@ func evalFunc(ctx ExprContext, name string, args map[string]any) (result any, er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func varFunc(ctx ExprContext, name string, args map[string]any) (result any, err error) {
|
||||||
|
var varName string
|
||||||
|
var ok bool
|
||||||
|
|
||||||
|
if varName, ok = args[ParamName].(string); !ok {
|
||||||
|
return nil, ErrWrongParamType(name, ParamName, TypeString, args[ParamName])
|
||||||
|
}
|
||||||
|
|
||||||
|
if result, ok = args[ParamValue]; ok && result != nil {
|
||||||
|
ctx.GetParent().UnsafeSetVar(varName, result)
|
||||||
|
// } else {
|
||||||
|
// err = ErrWrongParamType(name, ParamSource, TypeString, args[ParamSource])
|
||||||
|
// }
|
||||||
|
} else if result, ok = ctx.GetVar(varName); !ok {
|
||||||
|
err = ErrUnknownVar(name, varName)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
//// import
|
//// import
|
||||||
|
|
||||||
func ImportBuiltinsFuncs(ctx ExprContext) {
|
func ImportBuiltinsFuncs(ctx ExprContext) {
|
||||||
@ -240,6 +259,11 @@ func ImportBuiltinsFuncs(ctx ExprContext) {
|
|||||||
ctx.RegisterFunc("eval", NewGolangFunctor(evalFunc), TypeAny, []ExprFuncParam{
|
ctx.RegisterFunc("eval", NewGolangFunctor(evalFunc), TypeAny, []ExprFuncParam{
|
||||||
NewFuncParam(ParamSource),
|
NewFuncParam(ParamSource),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ctx.RegisterFunc("var", NewGolangFunctor(varFunc), TypeAny, []ExprFuncParam{
|
||||||
|
NewFuncParam(ParamName),
|
||||||
|
NewFuncParamFlagDef(ParamValue, PfDefault, nil),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|||||||
@ -80,6 +80,10 @@ func ErrUnknownParam(funcName, paramName string) error {
|
|||||||
return fmt.Errorf("%s(): unknown parameter %q", funcName, paramName)
|
return fmt.Errorf("%s(): unknown parameter %q", funcName, paramName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ErrUnknownVar(funcName, varName string) error {
|
||||||
|
return fmt.Errorf("%s(): unknown variable %q", funcName, varName)
|
||||||
|
}
|
||||||
|
|
||||||
// --- Operator errors
|
// --- Operator errors
|
||||||
|
|
||||||
func ErrLeftOperandMustBeVariable(leftTerm, opTerm *term) error {
|
func ErrLeftOperandMustBeVariable(leftTerm, opTerm *term) error {
|
||||||
|
|||||||
@ -24,6 +24,11 @@ func NewSimpleStore() *SimpleStore {
|
|||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ss *SimpleStore) Init() {
|
||||||
|
ss.varStore = make(map[string]any)
|
||||||
|
ss.funcStore = make(map[string]ExprFunc)
|
||||||
|
}
|
||||||
|
|
||||||
func filterRefName(name string) bool { return name[0] != '@' }
|
func filterRefName(name string) bool { return name[0] != '@' }
|
||||||
//func filterPrivName(name string) bool { return name[0] != '_' }
|
//func filterPrivName(name string) bool { return name[0] != '_' }
|
||||||
|
|
||||||
|
|||||||
@ -68,3 +68,27 @@ func TestFunctionGetFunc(t *testing.T) {
|
|||||||
t.Errorf(`(func() -> result = %v [%T], want = %v [%T]`, got, got, want, want)
|
t.Errorf(`(func() -> result = %v [%T], want = %v [%T]`, got, got, want, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoFunction(t *testing.T) {
|
||||||
|
section := "Funcs"
|
||||||
|
inputs := []inputType{
|
||||||
|
/* 1 */ {`myName()`, "Celestino Amoroso", nil},
|
||||||
|
/* 2 */ {`myName("Peppino")`, "Peppino", nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
myName := func(ctx ExprContext, name string, args map[string]any) (result any, err error) {
|
||||||
|
var ok bool
|
||||||
|
if result, ok = args["name"].(string); !ok {
|
||||||
|
err = ErrWrongParamType(name, "name", TypeString, args["name"])
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := NewSimpleStore()
|
||||||
|
ctx.RegisterFunc("myName", NewGolangFunctor(myName), TypeString, []ExprFuncParam{
|
||||||
|
NewFuncParamFlagDef("name", PfOptional|PfDefault, "Celestino Amoroso"),
|
||||||
|
})
|
||||||
|
|
||||||
|
runCtxTestSuite(t, ctx, section, inputs)
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user