operand-iterator.go: accepts two new optional functions 'reset' and 'clean' from data-source
This commit is contained in:
parent
354cb79580
commit
81c85afbea
@ -54,14 +54,23 @@ func getDataSourceDict(ctx ExprContext, self *term) (ds map[string]Functor, err
|
||||
|
||||
if dictAny, ok := value.(map[any]any); ok {
|
||||
ds = make(map[string]Functor)
|
||||
for _, k := range []string{initName, currentName, nextName} {
|
||||
// required functions
|
||||
for _, k := range []string{currentName, nextName} {
|
||||
if item, exists := dictAny[k]; exists && item != nil {
|
||||
if functor, ok := item.(*funcDefFunctor); ok {
|
||||
ds[k] = functor
|
||||
}
|
||||
} else if k != initName {
|
||||
} else {
|
||||
err = fmt.Errorf("the data-source must provide a non-nil %q operator", k)
|
||||
break
|
||||
return
|
||||
}
|
||||
}
|
||||
// Optional functions
|
||||
for _, k := range []string{initName, resetName, cleanName} {
|
||||
if item, exists := dictAny[k]; exists && item != nil {
|
||||
if functor, ok := item.(*funcDefFunctor); ok {
|
||||
ds[k] = functor
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -98,6 +107,9 @@ func evalIterator(ctx ExprContext, self *term) (v any, err error) {
|
||||
|
||||
dc.nextFunc, _ = ds[nextName]
|
||||
dc.currentFunc, _ = ds[currentName]
|
||||
dc.cleanFunc, _ = ds[cleanName]
|
||||
dc.resetFunc, _ = ds[resetName]
|
||||
|
||||
v = dc
|
||||
|
||||
return
|
||||
|
Loading…
Reference in New Issue
Block a user