diff --git a/builtin-iterator.go b/builtin-iterator.go index 5495453..f475fa0 100644 --- a/builtin-iterator.go +++ b/builtin-iterator.go @@ -92,13 +92,23 @@ func runFunc(ctx kern.ExprContext, name string, args map[string]any) (result any // params = map[string]any{kern.ParamIndex: it.Index(), kern.ParamItem: item} params[kern.ParamIndex] = it.Index() params[kern.ParamItem] = item + + localCtx.UnsafeSetVar("_", it.Index()) + localCtx.UnsafeSetVar("__", item) + + abort := false if _, err = op.InvokeNamed(localCtx, iterParamOperator, params); err != nil { - break + abort = true } else if abortAny, exists := localCtx.GetVar(iterVarAbort); exists { if abort, ok := boolean.ToBool(abortAny); ok && abort { - break + abort = true } } + localCtx.DeleteVar("__") + localCtx.DeleteVar("_") + if abort { + break + } } }