diff --git a/operator-digest.go b/operator-digest.go index 632e26f..5ac9e88 100644 --- a/operator-digest.go +++ b/operator-digest.go @@ -43,8 +43,8 @@ func evalDigest(ctx kern.ExprContext, opTerm *term) (v any, err error) { lastValue = nil for item, err = it.Next(); err == nil; item, err = it.Next() { ctx.SetVar("_", item) - ctx.SetVar("_index", it.Index()) - ctx.SetVar("_count", it.Count()) + ctx.SetVar("__", it.Index()) + ctx.SetVar("_#", it.Count()) if rightValue, err = opTerm.children[1].Compute(ctx); err == nil { if rightValue == nil { break @@ -52,8 +52,8 @@ func evalDigest(ctx kern.ExprContext, opTerm *term) (v any, err error) { lastValue = rightValue } } - ctx.DeleteVar("_count") - ctx.DeleteVar("_index") + ctx.DeleteVar("_#") + ctx.DeleteVar("__") ctx.DeleteVar("_") if err != nil { break diff --git a/operator-filter.go b/operator-filter.go index b8652c0..875aaa9 100644 --- a/operator-filter.go +++ b/operator-filter.go @@ -43,8 +43,8 @@ func evalFilter(ctx kern.ExprContext, opTerm *term) (v any, err error) { values := kern.NewListA() for item, err = it.Next(); err == nil; item, err = it.Next() { ctx.SetVar("_", item) - ctx.SetVar("_index", it.Index()) - ctx.SetVar("_count", it.Count()) + ctx.SetVar("__", it.Index()) + ctx.SetVar("_#", it.Count()) if rightValue, err = opTerm.children[1].Compute(ctx); err == nil { if success, valid := kern.ToBool(rightValue); valid { if success { @@ -54,8 +54,8 @@ func evalFilter(ctx kern.ExprContext, opTerm *term) (v any, err error) { err = fmt.Errorf("filter expression must return a boolean or a castable to boolean, got %v [%T]", rightValue, rightValue) } } - ctx.DeleteVar("_count") - ctx.DeleteVar("_index") + ctx.DeleteVar("_#") + ctx.DeleteVar("__") ctx.DeleteVar("_") if err != nil { break diff --git a/operator-map.go b/operator-map.go index d7c81a5..91b6a7b 100644 --- a/operator-map.go +++ b/operator-map.go @@ -43,13 +43,13 @@ func evalMap(ctx kern.ExprContext, opTerm *term) (v any, err error) { values := kern.NewListA() for item, err = it.Next(); err == nil; item, err = it.Next() { ctx.SetVar("_", item) - ctx.SetVar("_index", it.Index()) - ctx.SetVar("_count", it.Count()) + ctx.SetVar("__", it.Index()) + ctx.SetVar("_#", it.Count()) if rightValue, err = opTerm.children[1].Compute(ctx); err == nil { values.AppendItem(rightValue) } - ctx.DeleteVar("_count") - ctx.DeleteVar("_index") + ctx.DeleteVar("_#") + ctx.DeleteVar("__") ctx.DeleteVar("_") if err != nil { break diff --git a/t_iterator_test.go b/t_iterator_test.go index a3b0c72..84d62bb 100644 --- a/t_iterator_test.go +++ b/t_iterator_test.go @@ -35,7 +35,7 @@ func TestIteratorParser(t *testing.T) { /* 20 */ {`it=$({1:"one",2:"two",3:"three"}, "default", "value"); it++`, "one", nil}, /* 21 */ {`it=$({1:"one",2:"two",3:"three"}, "desc", "key"); it++`, int64(3), nil}, /* 22 */ {`it=$({1:"one",2:"two",3:"three"}, "asc", "item"); it++`, kern.NewList([]any{int64(1), "one"}), nil}, - /* 23 */ {`builtin "os.file"; fileReadIterator("test-file.txt") map ${_index}`, kern.NewList([]any{int64(0), int64(1)}), nil}, + /* 23 */ {`builtin "os.file"; fileReadIterator("test-file.txt") map ${__}`, kern.NewList([]any{int64(0), int64(1)}), nil}, /* 24 */ {`builtin "os.file"; #(fileReadIterator("test-file.txt") filter (#${_} == 2))`, int64(0), nil}, /* 25 */ {`builtin "os.file"; #(fileReadIterator("test-file.txt") filter (#${_} == 3))`, int64(2), nil}, /* 26 */ {`#($(10) map ${_})`, int64(10), nil}, @@ -43,6 +43,7 @@ func TestIteratorParser(t *testing.T) { /* 28 */ {`$(10) digest ${_}`, int64(9), nil}, /* 29 */ {`$(10,0) digest ${_}`, int64(1), nil}, /* 30 */ {`$(10,0,-2) digest ${_}`, int64(2), nil}, + /* 31 */ {`[3,4,5] map ${_#}`, kern.NewList([]any{int64(1), int64(2), int64(3)}), nil}, } // runTestSuiteSpec(t, section, inputs, 10)