builtin-iterator.go/run(): removed default operator (print item)

This commit is contained in:
Celestino Amoroso 2026-04-23 18:55:03 +02:00
parent b6952444ab
commit 0677180456

View File

@ -23,9 +23,11 @@ func parseRunArgs(localCtx ExprContext, args map[string]any) (it Iterator, op Fu
return return
} }
if op, ok = args[iterParamOperator].(Functor); !ok && args[iterParamOperator] != nil { if args[iterParamOperator] != nil {
err = fmt.Errorf("paramter %q must be a function, passed %v [%s]", iterParamOperator, args[iterParamOperator], TypeName(args[iterParamOperator])) if op, ok = args[iterParamOperator].(Functor); !ok || op == nil {
return err = fmt.Errorf("paramter %q must be a function, passed %v [%s]", iterParamOperator, args[iterParamOperator], TypeName(args[iterParamOperator]))
return
}
} }
var vars *DictType var vars *DictType
@ -51,7 +53,7 @@ func runFunc(ctx ExprContext, name string, args map[string]any) (result any, err
var ok bool var ok bool
var op Functor var op Functor
var v any var v any
var usingDefaultOp = false // var usingDefaultOp = false
var params map[string]any var params map[string]any
var item any var item any
@ -60,24 +62,27 @@ func runFunc(ctx ExprContext, name string, args map[string]any) (result any, err
if it, op, err = parseRunArgs(localCtx, args); err != nil { if it, op, err = parseRunArgs(localCtx, args); err != nil {
return return
} else if op == nil { // } else if op == nil {
op = NewGolangFunctor(printLnFunc) // op = NewGolangFunctor(printLnFunc)
usingDefaultOp = true // usingDefaultOp = true
} }
for item, err = it.Next(); err == nil; item, err = it.Next() { for item, err = it.Next(); err == nil; item, err = it.Next() {
if usingDefaultOp { // if usingDefaultOp {
params = map[string]any{ParamItem: []any{item}} // params = map[string]any{ParamItem: []any{item}}
} else { // } else {
params = map[string]any{ParamIndex: it.Index(), ParamItem: item} // params = map[string]any{ParamIndex: it.Index(), ParamItem: item}
} // }
if v, err = op.InvokeNamed(localCtx, iterParamOperator, params); err != nil { if op != nil {
break params = map[string]any{ParamIndex: it.Index(), ParamItem: item}
} else { if v, err = op.InvokeNamed(localCtx, iterParamOperator, params); err != nil {
var success bool
if success, ok = ToBool(v); !success || !ok {
break break
} else {
var success bool
if success, ok = ToBool(v); !success || !ok {
break
}
} }
} }
} }
@ -86,6 +91,9 @@ func runFunc(ctx ExprContext, name string, args map[string]any) (result any, err
err = nil err = nil
} }
if err == nil { if err == nil {
if op == nil {
ctx.UnsafeSetVar(iterVarStatus, it.Count())
}
result, _ = localCtx.GetVar(iterVarStatus) result, _ = localCtx.GetVar(iterVarStatus)
} }
return return