builtin-iterator.go: added supporto to automatic variables $_ (iterator index) and $__ (iterator item)
This commit is contained in:
+12
-2
@@ -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 = map[string]any{kern.ParamIndex: it.Index(), kern.ParamItem: item}
|
||||||
params[kern.ParamIndex] = it.Index()
|
params[kern.ParamIndex] = it.Index()
|
||||||
params[kern.ParamItem] = item
|
params[kern.ParamItem] = item
|
||||||
|
|
||||||
|
localCtx.UnsafeSetVar("_", it.Index())
|
||||||
|
localCtx.UnsafeSetVar("__", item)
|
||||||
|
|
||||||
|
abort := false
|
||||||
if _, err = op.InvokeNamed(localCtx, iterParamOperator, params); err != nil {
|
if _, err = op.InvokeNamed(localCtx, iterParamOperator, params); err != nil {
|
||||||
break
|
abort = true
|
||||||
} else if abortAny, exists := localCtx.GetVar(iterVarAbort); exists {
|
} else if abortAny, exists := localCtx.GetVar(iterVarAbort); exists {
|
||||||
if abort, ok := boolean.ToBool(abortAny); ok && abort {
|
if abort, ok := boolean.ToBool(abortAny); ok && abort {
|
||||||
break
|
abort = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
localCtx.DeleteVar("__")
|
||||||
|
localCtx.DeleteVar("_")
|
||||||
|
if abort {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user