builtin-base: added functions set() and unset()

This commit is contained in:
Celestino Amoroso 2026-04-21 17:14:51 +02:00
parent 6c3a071a02
commit b6952444ab

View File

@ -236,6 +236,35 @@ func varFunc(ctx ExprContext, name string, args map[string]any) (result any, err
return return
} }
func setFunc(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 {
ctx.GetParent().UnsafeSetVar(varName, result)
} else {
err = ErrWrongParamType(name, ParamValue, TypeAny, args[ParamValue])
}
return
}
func unsetFunc(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])
} else {
ctx.GetParent().DeleteVar(varName)
result = nil
}
return
}
//// import //// import
func ImportBuiltinsFuncs(ctx ExprContext) { func ImportBuiltinsFuncs(ctx ExprContext) {
@ -270,6 +299,16 @@ func ImportBuiltinsFuncs(ctx ExprContext) {
NewFuncParam(ParamName), NewFuncParam(ParamName),
NewFuncParamFlagDef(ParamValue, PfDefault, nil), NewFuncParamFlagDef(ParamValue, PfDefault, nil),
}) })
ctx.RegisterFunc("set", NewGolangFunctor(setFunc), TypeAny, []ExprFuncParam{
NewFuncParam(ParamName),
NewFuncParam(ParamValue),
})
ctx.RegisterFunc("unset", NewGolangFunctor(unsetFunc), TypeAny, []ExprFuncParam{
NewFuncParam(ParamName),
NewFuncParam(ParamValue),
})
} }
func init() { func init() {