fixed some defects in the iter-list implementation

This commit is contained in:
Celestino Amoroso 2024-06-05 08:06:39 +02:00
parent 188ea354ee
commit 8144122d2c
4 changed files with 16 additions and 22 deletions

View File

@ -106,11 +106,20 @@ func (it *ListIterator) CallOperation(name string, args []any) (v any, err error
func (it *ListIterator) Current() (item any, err error) {
a := *(it.a)
if it.index >= 0 && it.index <= it.stop {
if it.start <= it.stop {
if it.stop < len(a) && it.index >= it.start && it.index <= it.stop {
item = a[it.index]
} else {
err = io.EOF
}
} else {
if it.start < len(a) && it.index >= it.stop && it.index <= it.start {
item = a[it.index]
} else {
err = io.EOF
}
}
return
}

View File

@ -34,7 +34,7 @@ type ExtIterator interface {
}
func errNoOperation(name string) error {
return fmt.Errorf("no %q function defined in the data-source", name)
return fmt.Errorf("no %s() function defined in the data-source", name)
}
func errInvalidDataSource() error {

View File

@ -148,23 +148,6 @@ func evalIterator(ctx ExprContext, self *term) (v any, err error) {
return
}
// func evalChildren(ctx ExprContext, terms []*term, firstChildValue any) (list *ListType, err error) {
// items := make(ListType, len(terms))
// for i, tree := range terms {
// var param any
// if i == 0 && firstChildValue != nil {
// param = firstChildValue
// } else if param, err = tree.compute(ctx); err != nil {
// break
// }
// items[i] = param
// }
// if err == nil {
// list = &items
// }
// return
// }
func evalSibling(ctx ExprContext, terms []*term, firstChildValue any) (list []any, err error) {
items := make([]any, 0, len(terms))
for i, tree := range terms {

View File

@ -204,8 +204,10 @@ func CloneFilteredMap[K comparable, V any](source map[K]V, filter func(key K) (a
func toInt(value any, description string) (i int, err error) {
if valueInt64, ok := value.(int64); ok {
i = int(valueInt64)
} else if valueInt, ok := value.(int); ok {
i = valueInt
} else {
err = fmt.Errorf("%s expected integer, got %T (%v)", description, value, value)
err = fmt.Errorf("%s expected integer, got %s (%v)", description, typeName(value), value)
}
return
}