diff --git a/go/cases-to-do.txt b/go/cases-to-do.txt index e73d880f2..4220cc7ba 100644 --- a/go/cases-to-do.txt +++ b/go/cases-to-do.txt @@ -32,18 +32,13 @@ rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh ================================================================ ARRAY/MAP -rrv ./reg-test/cases/case-c-localvar-unsets.sh - -rrv -C5 ./reg-test/cases/case-c-dsl-for-oosvar-loops.sh +rrv ./reg-test/cases/case-c-dsl-asserting.sh +rrv ./reg-test/cases/case-c-dsl-for-oosvar-loops.sh +rrv ./reg-test/cases/case-c-dsl-length-depth-leafcount.sh rrv ./reg-test/cases/case-c-dsl-mapvar-assignments.sh - +rrv ./reg-test/cases/case-c-dsl-mapvar-for-loops.sh rrv ./reg-test/cases/case-c-dsl-split-join.sh -rrv -C5 ./reg-test/cases/case-c-dsl-asserting.sh -rrv -C1 ./reg-test/cases/case-c-dsl-length-depth-leafcount.sh -* int map keys - -rrv -C1 ./reg-test/cases/case-c-dsl-mapvar-for-loops.sh -* int map keys +rrv ./reg-test/cases/case-c-localvar-unsets.sh ================================================================ PARTIALLY IMPLEMENTED: diff --git a/go/reg-test/cases/case-go-dsl-array-index-alias.sh b/go/reg-test/cases/case-array-map-indexing.sh similarity index 56% rename from go/reg-test/cases/case-go-dsl-array-index-alias.sh rename to go/reg-test/cases/case-array-map-indexing.sh index 342597be6..a7bafb5d0 100644 --- a/go/reg-test/cases/case-go-dsl-array-index-alias.sh +++ b/go/reg-test/cases/case-array-map-indexing.sh @@ -1,11 +1,74 @@ +# Right-hand sides, non-indexed + +run_mlr --oxtab --from reg-test/input/abixy head -n 1 then put ' + $_1 = ""; # just for visual output-spacing + $srec_keyed_by_2 = $[2]; + $srec_name_2 = $[[2]]; + $srec_value_2 = $[[[2]]]; + $_2 = ""; + $dollar_star_keyed_by_2 = $*[2]; + $dollar_star_name_2 = $*[[2]]; + $dollar_star_value_2 = $*[[[2]]]; + $_3 = ""; + mymap = {"a":7, "b":8, "c":9}; + $mymap_keyed_by_2 = mymap[2]; + $mymap_name_2 = mymap[[2]]; + $mymap_value_2 = mymap[[[2]]]; + $_4 = ""; + myarray = [7, 8, 9]; + $myarray_keyed_by_2 = myarray[2]; + $myarray_name_2 = myarray[[2]]; + $myarray_value_2 = myarray[[[2]]]; +' + +run_mlr --oxtab --from reg-test/input/abixy head -n 1 then put ' + $_1 = ""; # just for visual output-spacing + $srec_keyed_by_2 = $[900]; + $srec_name_2 = $[[900]]; + $srec_value_2 = $[[[900]]]; + $_2 = ""; + $dollar_star_keyed_by_2 = $*[900]; + $dollar_star_name_2 = $*[[900]]; + $dollar_star_value_2 = $*[[[900]]]; + $_3 = ""; + mymap = {"a":7, "b":8, "c":9}; + $mymap_keyed_by_2 = mymap[900]; + $mymap_name_2 = mymap[[900]]; + $mymap_value_2 = mymap[[[900]]]; + $_4 = ""; + myarray = [7, 8, 9]; + $myarray_keyed_by_2 = myarray[900]; + $myarray_name_2 = myarray[[900]]; + $myarray_value_2 = myarray[[[900]]]; +' + run_mlr --from $indir/s.dkvp --idkvp --opprint put '$z = [$a,$b,$i,$x,$y][1]' run_mlr --from $indir/s.dkvp --idkvp --opprint put '$z = [$a,$b,$i,$x,$y][-1]' run_mlr --from $indir/s.dkvp --idkvp --opprint put '$z = [$a,$b,$i,$x,$y][NR]' -run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $[NR]' -run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $[-NR]' -run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $*[NR]' -run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $*[-NR]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $[NF]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $[-NF]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $*[NF]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $*[-NF]' + +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $[[NF]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $[[-NF]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $*[[NF]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $[*[-NF]]' + +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $[[[NF]]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $[[[-NF]]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$up = $*[[[NF]]]' +run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$down = $*[[[-NF]]]' + +# Unsets + +run_mlr --opprint put 'unset $c' $indir/abixy +run_mlr --opprint put 'unset $c; $c="new"' $indir/abixy +run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' $indir/abixy +run_mlr --opprint put '$c=$a.$b; unset $c' $indir/abixy + +# Left-hand sides, non-indexed run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$[1] = "new"' run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$[2] = "new"' @@ -57,3 +120,22 @@ run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$*[[[-1]]] = "n run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$*[[[-2]]] = "new"' run_mlr --opprint --from $indir/s.dkvp --from $indir/t.dkvp put '$*[[[-5]]] = "new"' +# Mix of left-hand and right-hand sides + +run_mlr --opprint put '$NEW = $[[3]]' $indir/abixy +run_mlr --opprint put '$NEW = $[[[3]]]' $indir/abixy + +run_mlr --opprint put '$NEW = $[[11]]' $indir/abixy +run_mlr --opprint put '$NEW = $[[[11]]]' $indir/abixy + +run_mlr --opprint put '$[[3]] = "NEW"' $indir/abixy +run_mlr --opprint put '$[[[3]]] = "NEW"' $indir/abixy + +run_mlr --opprint put '$[[11]] = "NEW"' $indir/abixy +run_mlr --opprint put '$[[[11]]] = "NEW"' $indir/abixy + +run_mlr --opprint put '$[[1]] = $[[2]]' $indir/abixy + +run_mlr --opprint put '$a = $[[2]]; unset $["a"]' $indir/abixy +run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' $indir/abixy +run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' $indir/abixy diff --git a/go/reg-test/cases/case-positional-indexing.sh b/go/reg-test/cases/case-positional-indexing.sh deleted file mode 100644 index 9159f35d9..000000000 --- a/go/reg-test/cases/case-positional-indexing.sh +++ /dev/null @@ -1,64 +0,0 @@ -run_mlr --oxtab --from reg-test/input/abixy head -n 1 then put ' - $_1 = ""; # just for visual output-spacing - $srec_keyed_by_2 = $[2]; - $srec_name_2 = $[[2]]; - $srec_value_2 = $[[[2]]]; - $_2 = ""; - $dollar_star_keyed_by_2 = $*[2]; - $dollar_star_name_2 = $*[[2]]; - $dollar_star_value_2 = $*[[[2]]]; - $_3 = ""; - mymap = {"a":7, "b":8, "c":9}; - $mymap_keyed_by_2 = mymap[2]; - $mymap_name_2 = mymap[[2]]; - $mymap_value_2 = mymap[[[2]]]; - $_4 = ""; - myarray = [7, 8, 9]; - $myarray_keyed_by_2 = myarray[2]; - $myarray_name_2 = myarray[[2]]; - $myarray_value_2 = myarray[[[2]]]; -' - -run_mlr --oxtab --from reg-test/input/abixy head -n 1 then put ' - $_1 = ""; # just for visual output-spacing - $srec_keyed_by_2 = $[900]; - $srec_name_2 = $[[900]]; - $srec_value_2 = $[[[900]]]; - $_2 = ""; - $dollar_star_keyed_by_2 = $*[900]; - $dollar_star_name_2 = $*[[900]]; - $dollar_star_value_2 = $*[[[900]]]; - $_3 = ""; - mymap = {"a":7, "b":8, "c":9}; - $mymap_keyed_by_2 = mymap[900]; - $mymap_name_2 = mymap[[900]]; - $mymap_value_2 = mymap[[[900]]]; - $_4 = ""; - myarray = [7, 8, 9]; - $myarray_keyed_by_2 = myarray[900]; - $myarray_name_2 = myarray[[900]]; - $myarray_value_2 = myarray[[[900]]]; -' - -run_mlr --opprint put '$NEW = $[[3]]' $indir/abixy -run_mlr --opprint put '$NEW = $[[[3]]]' $indir/abixy - -run_mlr --opprint put '$NEW = $[[11]]' $indir/abixy -run_mlr --opprint put '$NEW = $[[[11]]]' $indir/abixy - -run_mlr --opprint put '$[[3]] = "NEW"' $indir/abixy -run_mlr --opprint put '$[[[3]]] = "NEW"' $indir/abixy - -run_mlr --opprint put '$[[11]] = "NEW"' $indir/abixy -run_mlr --opprint put '$[[[11]]] = "NEW"' $indir/abixy - -run_mlr --opprint put '$[[1]] = $[[2]]' $indir/abixy - -run_mlr --opprint put '$a = $[[2]]; unset $["a"]' $indir/abixy -run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' $indir/abixy -run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' $indir/abixy - -run_mlr --opprint put 'unset $c' $indir/abixy -run_mlr --opprint put 'unset $c; $c="new"' $indir/abixy -run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' $indir/abixy -run_mlr --opprint put '$c=$a.$b; unset $c' $indir/abixy diff --git a/go/reg-test/expected/case-go-dsl-array-index-alias.sh.err b/go/reg-test/expected/case-array-map-indexing.sh.err similarity index 100% rename from go/reg-test/expected/case-go-dsl-array-index-alias.sh.err rename to go/reg-test/expected/case-array-map-indexing.sh.err diff --git a/go/reg-test/expected/case-array-map-indexing.sh.out b/go/reg-test/expected/case-array-map-indexing.sh.out new file mode 100644 index 000000000..98247d80c --- /dev/null +++ b/go/reg-test/expected/case-array-map-indexing.sh.out @@ -0,0 +1,778 @@ + +mlr --oxtab --from reg-test/input/abixy head -n 1 then put + $_1 = ""; # just for visual output-spacing + $srec_keyed_by_2 = $[2]; + $srec_name_2 = $[[2]]; + $srec_value_2 = $[[[2]]]; + $_2 = ""; + $dollar_star_keyed_by_2 = $*[2]; + $dollar_star_name_2 = $*[[2]]; + $dollar_star_value_2 = $*[[[2]]]; + $_3 = ""; + mymap = {"a":7, "b":8, "c":9}; + $mymap_keyed_by_2 = mymap[2]; + $mymap_name_2 = mymap[[2]]; + $mymap_value_2 = mymap[[[2]]]; + $_4 = ""; + myarray = [7, 8, 9]; + $myarray_keyed_by_2 = myarray[2]; + $myarray_name_2 = myarray[[2]]; + $myarray_value_2 = myarray[[[2]]]; + +a pan +b pan +i 1 +x 0.3467901443380824 +y 0.7268028627434533 +_1 +srec_name_2 b +srec_value_2 pan +_2 +dollar_star_name_2 b +dollar_star_value_2 pan +_3 +mymap_name_2 b +mymap_value_2 8 +_4 +myarray_keyed_by_2 8 +myarray_name_2 2 +myarray_value_2 8 + +mlr --oxtab --from reg-test/input/abixy head -n 1 then put + $_1 = ""; # just for visual output-spacing + $srec_keyed_by_2 = $[900]; + $srec_name_2 = $[[900]]; + $srec_value_2 = $[[[900]]]; + $_2 = ""; + $dollar_star_keyed_by_2 = $*[900]; + $dollar_star_name_2 = $*[[900]]; + $dollar_star_value_2 = $*[[[900]]]; + $_3 = ""; + mymap = {"a":7, "b":8, "c":9}; + $mymap_keyed_by_2 = mymap[900]; + $mymap_name_2 = mymap[[900]]; + $mymap_value_2 = mymap[[[900]]]; + $_4 = ""; + myarray = [7, 8, 9]; + $myarray_keyed_by_2 = myarray[900]; + $myarray_name_2 = myarray[[900]]; + $myarray_value_2 = myarray[[[900]]]; + +a pan +b pan +i 1 +x 0.3467901443380824 +y 0.7268028627434533 +_1 +_2 +_3 +_4 + +mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][1] +a b i x y z +pan pan 1 0.3467901443380824 0.7268028627434533 pan +eks pan 2 0.7586799647899636 0.5221511083334797 eks +wye wye 3 0.20460330576630303 0.33831852551664776 wye +eks wye 4 0.38139939387114097 0.13418874328430463 eks + +mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][-1] +a b i x y z +pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 0.13418874328430463 + +mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][NR] +a b i x y z +pan pan 1 0.3467901443380824 0.7268028627434533 pan +eks pan 2 0.7586799647899636 0.5221511083334797 pan +wye wye 3 0.20460330576630303 0.33831852551664776 3 +eks wye 4 0.38139939387114097 0.13418874328430463 0.38139939387114097 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $[NF] +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $[-NF] +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $*[NF] +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $*[-NF] +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $[[NF]] +a b i x y up +pan pan 1 0.3467901443380824 0.7268028627434533 y +eks pan 2 0.7586799647899636 0.5221511083334797 y +wye wye 3 0.20460330576630303 0.33831852551664776 y +eks wye 4 0.38139939387114097 0.13418874328430463 y +wye pan 5 0.5732889198020006 0.8636244699032729 y +zee pan 6 0.5271261600918548 0.49322128674835697 y +eks zee 7 0.6117840605678454 0.1878849191181694 y + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $[[-NF]] +a b i x y down +pan pan 1 0.3467901443380824 0.7268028627434533 a +eks pan 2 0.7586799647899636 0.5221511083334797 a +wye wye 3 0.20460330576630303 0.33831852551664776 a +eks wye 4 0.38139939387114097 0.13418874328430463 a +wye pan 5 0.5732889198020006 0.8636244699032729 a +zee pan 6 0.5271261600918548 0.49322128674835697 a +eks zee 7 0.6117840605678454 0.1878849191181694 a + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $*[[NF]] +a b i x y up +pan pan 1 0.3467901443380824 0.7268028627434533 y +eks pan 2 0.7586799647899636 0.5221511083334797 y +wye wye 3 0.20460330576630303 0.33831852551664776 y +eks wye 4 0.38139939387114097 0.13418874328430463 y +wye pan 5 0.5732889198020006 0.8636244699032729 y +zee pan 6 0.5271261600918548 0.49322128674835697 y +eks zee 7 0.6117840605678454 0.1878849191181694 y + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $[*[-NF]] +Exit status was 1; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $[[[NF]]] +a b i x y up +pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $[[[-NF]]] +a b i x y down +pan pan 1 0.3467901443380824 0.7268028627434533 pan +eks pan 2 0.7586799647899636 0.5221511083334797 eks +wye wye 3 0.20460330576630303 0.33831852551664776 wye +eks wye 4 0.38139939387114097 0.13418874328430463 eks +wye pan 5 0.5732889198020006 0.8636244699032729 wye +zee pan 6 0.5271261600918548 0.49322128674835697 zee +eks zee 7 0.6117840605678454 0.1878849191181694 eks + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $*[[[NF]]] +a b i x y up +pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $*[[[-NF]]] +a b i x y down +pan pan 1 0.3467901443380824 0.7268028627434533 pan +eks pan 2 0.7586799647899636 0.5221511083334797 eks +wye wye 3 0.20460330576630303 0.33831852551664776 wye +eks wye 4 0.38139939387114097 0.13418874328430463 eks +wye pan 5 0.5732889198020006 0.8636244699032729 wye +zee pan 6 0.5271261600918548 0.49322128674835697 zee +eks zee 7 0.6117840605678454 0.1878849191181694 eks + +mlr --opprint put unset $c ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put unset $c; $c="new" ./reg-test/input/abixy +a b i x y c +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new +zee wye 8 0.5985540091064224 0.976181385699006 new +hat wye 9 0.03144187646093577 0.7495507603507059 new +pan wye 10 0.5026260055412137 0.9526183602969864 new + +mlr --opprint put $c=$a.$b; unset $c; $c="new" ./reg-test/input/abixy +a b i x y c +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new +zee wye 8 0.5985540091064224 0.976181385699006 new +hat wye 9 0.03144187646093577 0.7495507603507059 new +pan wye 10 0.5026260055412137 0.9526183602969864 new + +mlr --opprint put $c=$a.$b; unset $c ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[1] = "new" +a b i x y 1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[2] = "new" +a b i x y 2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[5] = "new" +a b i x y 5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-1] = "new" +a b i x y -1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-2] = "new" +a b i x y -2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-5] = "new" +a b i x y -5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put @idx = NR % 5; @idx = @idx == 0 ? 5 : @idx; $[@idx] = "NEW" +a b i x y 1 +pan pan 1 0.3467901443380824 0.7268028627434533 NEW + +a b i x y 2 +eks pan 2 0.7586799647899636 0.5221511083334797 NEW + +a b i x y 3 +wye wye 3 0.20460330576630303 0.33831852551664776 NEW + +a b i x y 4 +eks wye 4 0.38139939387114097 0.13418874328430463 NEW + +a b i x y 5 +wye pan 5 0.5732889198020006 0.8636244699032729 NEW + +a b i x y 1 +zee pan 6 0.5271261600918548 0.49322128674835697 NEW + +a b i x y 2 +eks zee 7 0.6117840605678454 0.1878849191181694 NEW + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[1] = "new" +a b i x y 1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[2] = "new" +a b i x y 2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[5] = "new" +a b i x y 5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-1] = "new" +a b i x y -1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-2] = "new" +a b i x y -2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-5] = "new" +a b i x y -5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[1]] = "new" +new b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[2]] = "new" +a new i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[5]] = "new" +a b i x new +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[-1]] = "new" +a b i x new +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[-2]] = "new" +a b i new y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[-5]] = "new" +new b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[1]]] = "new" +a b i x y +new pan 1 0.3467901443380824 0.7268028627434533 +new pan 2 0.7586799647899636 0.5221511083334797 +new wye 3 0.20460330576630303 0.33831852551664776 +new wye 4 0.38139939387114097 0.13418874328430463 +new pan 5 0.5732889198020006 0.8636244699032729 +new pan 6 0.5271261600918548 0.49322128674835697 +new zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[2]]] = "new" +a b i x y +pan new 1 0.3467901443380824 0.7268028627434533 +eks new 2 0.7586799647899636 0.5221511083334797 +wye new 3 0.20460330576630303 0.33831852551664776 +eks new 4 0.38139939387114097 0.13418874328430463 +wye new 5 0.5732889198020006 0.8636244699032729 +zee new 6 0.5271261600918548 0.49322128674835697 +eks new 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[5]]] = "new" +a b i x y +pan pan 1 0.3467901443380824 new +eks pan 2 0.7586799647899636 new +wye wye 3 0.20460330576630303 new +eks wye 4 0.38139939387114097 new +wye pan 5 0.5732889198020006 new +zee pan 6 0.5271261600918548 new +eks zee 7 0.6117840605678454 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[-1]]] = "new" +a b i x y +pan pan 1 0.3467901443380824 new +eks pan 2 0.7586799647899636 new +wye wye 3 0.20460330576630303 new +eks wye 4 0.38139939387114097 new +wye pan 5 0.5732889198020006 new +zee pan 6 0.5271261600918548 new +eks zee 7 0.6117840605678454 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[-2]]] = "new" +a b i x y +pan pan 1 new 0.7268028627434533 +eks pan 2 new 0.5221511083334797 +wye wye 3 new 0.33831852551664776 +eks wye 4 new 0.13418874328430463 +wye pan 5 new 0.8636244699032729 +zee pan 6 new 0.49322128674835697 +eks zee 7 new 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[[[-5]]] = "new" +a b i x y +new pan 1 0.3467901443380824 0.7268028627434533 +new pan 2 0.7586799647899636 0.5221511083334797 +new wye 3 0.20460330576630303 0.33831852551664776 +new wye 4 0.38139939387114097 0.13418874328430463 +new pan 5 0.5732889198020006 0.8636244699032729 +new pan 6 0.5271261600918548 0.49322128674835697 +new zee 7 0.6117840605678454 0.1878849191181694 + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[1] = "new" +a b i x y 1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[2] = "new" +a b i x y 2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[5] = "new" +a b i x y 5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-1] = "new" +a b i x y -1 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-2] = "new" +a b i x y -2 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-5] = "new" +a b i x y -5 +pan pan 1 0.3467901443380824 0.7268028627434533 new +eks pan 2 0.7586799647899636 0.5221511083334797 new +wye wye 3 0.20460330576630303 0.33831852551664776 new +eks wye 4 0.38139939387114097 0.13418874328430463 new +wye pan 5 0.5732889198020006 0.8636244699032729 new +zee pan 6 0.5271261600918548 0.49322128674835697 new +eks zee 7 0.6117840605678454 0.1878849191181694 new + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[1]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[2]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[5]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[-1]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[-2]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[-5]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[1]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[2]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[5]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[-1]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[-2]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[[[-5]]] = "new" +Exit status was 2; expected 0. + +mlr --opprint put $NEW = $[[3]] ./reg-test/input/abixy +a b i x y NEW +pan pan 1 0.3467901443380824 0.7268028627434533 i +eks pan 2 0.7586799647899636 0.5221511083334797 i +wye wye 3 0.20460330576630303 0.33831852551664776 i +eks wye 4 0.38139939387114097 0.13418874328430463 i +wye pan 5 0.5732889198020006 0.8636244699032729 i +zee pan 6 0.5271261600918548 0.49322128674835697 i +eks zee 7 0.6117840605678454 0.1878849191181694 i +zee wye 8 0.5985540091064224 0.976181385699006 i +hat wye 9 0.03144187646093577 0.7495507603507059 i +pan wye 10 0.5026260055412137 0.9526183602969864 i + +mlr --opprint put $NEW = $[[[3]]] ./reg-test/input/abixy +a b i x y NEW +pan pan 1 0.3467901443380824 0.7268028627434533 1 +eks pan 2 0.7586799647899636 0.5221511083334797 2 +wye wye 3 0.20460330576630303 0.33831852551664776 3 +eks wye 4 0.38139939387114097 0.13418874328430463 4 +wye pan 5 0.5732889198020006 0.8636244699032729 5 +zee pan 6 0.5271261600918548 0.49322128674835697 6 +eks zee 7 0.6117840605678454 0.1878849191181694 7 +zee wye 8 0.5985540091064224 0.976181385699006 8 +hat wye 9 0.03144187646093577 0.7495507603507059 9 +pan wye 10 0.5026260055412137 0.9526183602969864 10 + +mlr --opprint put $NEW = $[[11]] ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $NEW = $[[[11]]] ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[3]] = "NEW" ./reg-test/input/abixy +a b NEW x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[[3]]] = "NEW" ./reg-test/input/abixy +a b i x y +pan pan NEW 0.3467901443380824 0.7268028627434533 +eks pan NEW 0.7586799647899636 0.5221511083334797 +wye wye NEW 0.20460330576630303 0.33831852551664776 +eks wye NEW 0.38139939387114097 0.13418874328430463 +wye pan NEW 0.5732889198020006 0.8636244699032729 +zee pan NEW 0.5271261600918548 0.49322128674835697 +eks zee NEW 0.6117840605678454 0.1878849191181694 +zee wye NEW 0.5985540091064224 0.976181385699006 +hat wye NEW 0.03144187646093577 0.7495507603507059 +pan wye NEW 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[11]] = "NEW" ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[[11]]] = "NEW" ./reg-test/input/abixy +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[1]] = $[[2]] ./reg-test/input/abixy +b b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 +eks zee 7 0.6117840605678454 0.1878849191181694 +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $a = $[[2]]; unset $["a"] ./reg-test/input/abixy +b i x y +pan 1 0.3467901443380824 0.7268028627434533 +pan 2 0.7586799647899636 0.5221511083334797 +wye 3 0.20460330576630303 0.33831852551664776 +wye 4 0.38139939387114097 0.13418874328430463 +pan 5 0.5732889198020006 0.8636244699032729 +pan 6 0.5271261600918548 0.49322128674835697 +zee 7 0.6117840605678454 0.1878849191181694 +wye 8 0.5985540091064224 0.976181385699006 +wye 9 0.03144187646093577 0.7495507603507059 +wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[1]] = $b; unset $[[1]] ./reg-test/input/abixy +pan b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 + +wye b i x y +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 + +pan b i x y +wye pan 5 0.5732889198020006 0.8636244699032729 +zee pan 6 0.5271261600918548 0.49322128674835697 + +zee b i x y +eks zee 7 0.6117840605678454 0.1878849191181694 + +wye b i x y +zee wye 8 0.5985540091064224 0.976181385699006 +hat wye 9 0.03144187646093577 0.7495507603507059 +pan wye 10 0.5026260055412137 0.9526183602969864 + +mlr --opprint put $[[1]] = $[[2]]; unset $["a"] ./reg-test/input/abixy +b i x y +pan 1 0.3467901443380824 0.7268028627434533 +pan 2 0.7586799647899636 0.5221511083334797 +wye 3 0.20460330576630303 0.33831852551664776 +wye 4 0.38139939387114097 0.13418874328430463 +pan 5 0.5732889198020006 0.8636244699032729 +pan 6 0.5271261600918548 0.49322128674835697 +zee 7 0.6117840605678454 0.1878849191181694 +wye 8 0.5985540091064224 0.976181385699006 +wye 9 0.03144187646093577 0.7495507603507059 +wye 10 0.5026260055412137 0.9526183602969864 + diff --git a/go/reg-test/expected/case-go-dsl-array-index-alias.sh.out b/go/reg-test/expected/case-go-dsl-array-index-alias.sh.out deleted file mode 100644 index b3408bb68..000000000 --- a/go/reg-test/expected/case-go-dsl-array-index-alias.sh.out +++ /dev/null @@ -1,210 +0,0 @@ - -mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][1] -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 pan -eks pan 2 0.7586799647899636 0.5221511083334797 eks -wye wye 3 0.20460330576630303 0.33831852551664776 wye -eks wye 4 0.38139939387114097 0.13418874328430463 eks - -mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][-1] -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 0.13418874328430463 - -mlr --from ./reg-test/input/s.dkvp --idkvp --opprint put $z = [$a,$b,$i,$x,$y][NR] -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 pan -eks pan 2 0.7586799647899636 0.5221511083334797 pan -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 0.38139939387114097 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $[NR] -a b i x y up -pan pan 1 0.3467901443380824 0.7268028627434533 pan -eks pan 2 0.7586799647899636 0.5221511083334797 pan -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 0.38139939387114097 -wye pan 5 0.5732889198020006 0.8636244699032729 0.8636244699032729 - -a b i x y -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $[-NR] -a b i x y down -pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 0.7586799647899636 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 wye -wye pan 5 0.5732889198020006 0.8636244699032729 wye - -a b i x y -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $up = $*[NR] -a b i x y up -pan pan 1 0.3467901443380824 0.7268028627434533 pan -eks pan 2 0.7586799647899636 0.5221511083334797 pan -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 0.38139939387114097 -wye pan 5 0.5732889198020006 0.8636244699032729 0.8636244699032729 - -a b i x y -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $down = $*[-NR] -a b i x y down -pan pan 1 0.3467901443380824 0.7268028627434533 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 0.7586799647899636 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 wye -wye pan 5 0.5732889198020006 0.8636244699032729 wye - -a b i x y -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[1] = "new" -a b i x y -new pan 1 0.3467901443380824 0.7268028627434533 -new pan 2 0.7586799647899636 0.5221511083334797 -new wye 3 0.20460330576630303 0.33831852551664776 -new wye 4 0.38139939387114097 0.13418874328430463 -new pan 5 0.5732889198020006 0.8636244699032729 -new pan 6 0.5271261600918548 0.49322128674835697 -new zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[2] = "new" -a b i x y -pan new 1 0.3467901443380824 0.7268028627434533 -eks new 2 0.7586799647899636 0.5221511083334797 -wye new 3 0.20460330576630303 0.33831852551664776 -eks new 4 0.38139939387114097 0.13418874328430463 -wye new 5 0.5732889198020006 0.8636244699032729 -zee new 6 0.5271261600918548 0.49322128674835697 -eks new 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[5] = "new" -a b i x y -pan pan 1 0.3467901443380824 new -eks pan 2 0.7586799647899636 new -wye wye 3 0.20460330576630303 new -eks wye 4 0.38139939387114097 new -wye pan 5 0.5732889198020006 new -zee pan 6 0.5271261600918548 new -eks zee 7 0.6117840605678454 new - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-1] = "new" -a b i x y -pan pan 1 0.3467901443380824 new -eks pan 2 0.7586799647899636 new -wye wye 3 0.20460330576630303 new -eks wye 4 0.38139939387114097 new -wye pan 5 0.5732889198020006 new -zee pan 6 0.5271261600918548 new -eks zee 7 0.6117840605678454 new - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-2] = "new" -a b i x y -pan pan 1 new 0.7268028627434533 -eks pan 2 new 0.5221511083334797 -wye wye 3 new 0.33831852551664776 -eks wye 4 new 0.13418874328430463 -wye pan 5 new 0.8636244699032729 -zee pan 6 new 0.49322128674835697 -eks zee 7 new 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $[-5] = "new" -a b i x y -new pan 1 0.3467901443380824 0.7268028627434533 -new pan 2 0.7586799647899636 0.5221511083334797 -new wye 3 0.20460330576630303 0.33831852551664776 -new wye 4 0.38139939387114097 0.13418874328430463 -new pan 5 0.5732889198020006 0.8636244699032729 -new pan 6 0.5271261600918548 0.49322128674835697 -new zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put @idx = NR % 5; @idx = @idx == 0 ? 5 : @idx; $[@idx] = "NEW" -a b i x y -NEW pan 1 0.3467901443380824 0.7268028627434533 -eks NEW 2 0.7586799647899636 0.5221511083334797 -wye wye NEW 0.20460330576630303 0.33831852551664776 -eks wye 4 NEW 0.13418874328430463 -wye pan 5 0.5732889198020006 NEW -NEW pan 6 0.5271261600918548 0.49322128674835697 -eks NEW 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[1] = "new" -a b i x y -new pan 1 0.3467901443380824 0.7268028627434533 -new pan 2 0.7586799647899636 0.5221511083334797 -new wye 3 0.20460330576630303 0.33831852551664776 -new wye 4 0.38139939387114097 0.13418874328430463 -new pan 5 0.5732889198020006 0.8636244699032729 -new pan 6 0.5271261600918548 0.49322128674835697 -new zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[2] = "new" -a b i x y -pan new 1 0.3467901443380824 0.7268028627434533 -eks new 2 0.7586799647899636 0.5221511083334797 -wye new 3 0.20460330576630303 0.33831852551664776 -eks new 4 0.38139939387114097 0.13418874328430463 -wye new 5 0.5732889198020006 0.8636244699032729 -zee new 6 0.5271261600918548 0.49322128674835697 -eks new 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[5] = "new" -a b i x y -pan pan 1 0.3467901443380824 new -eks pan 2 0.7586799647899636 new -wye wye 3 0.20460330576630303 new -eks wye 4 0.38139939387114097 new -wye pan 5 0.5732889198020006 new -zee pan 6 0.5271261600918548 new -eks zee 7 0.6117840605678454 new - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-1] = "new" -a b i x y -pan pan 1 0.3467901443380824 new -eks pan 2 0.7586799647899636 new -wye wye 3 0.20460330576630303 new -eks wye 4 0.38139939387114097 new -wye pan 5 0.5732889198020006 new -zee pan 6 0.5271261600918548 new -eks zee 7 0.6117840605678454 new - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-2] = "new" -a b i x y -pan pan 1 new 0.7268028627434533 -eks pan 2 new 0.5221511083334797 -wye wye 3 new 0.33831852551664776 -eks wye 4 new 0.13418874328430463 -wye pan 5 new 0.8636244699032729 -zee pan 6 new 0.49322128674835697 -eks zee 7 new 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put $*[-5] = "new" -a b i x y -new pan 1 0.3467901443380824 0.7268028627434533 -new pan 2 0.7586799647899636 0.5221511083334797 -new wye 3 0.20460330576630303 0.33831852551664776 -new wye 4 0.38139939387114097 0.13418874328430463 -new pan 5 0.5732889198020006 0.8636244699032729 -new pan 6 0.5271261600918548 0.49322128674835697 -new zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg-test/input/s.dkvp --from ./reg-test/input/t.dkvp put @idx = NR % 5; @idx = @idx == 0 ? 5 : @idx; $*[@idx] = "NEW" -a b i x y -NEW pan 1 0.3467901443380824 0.7268028627434533 -eks NEW 2 0.7586799647899636 0.5221511083334797 -wye wye NEW 0.20460330576630303 0.33831852551664776 -eks wye 4 NEW 0.13418874328430463 -wye pan 5 0.5732889198020006 NEW -NEW pan 6 0.5271261600918548 0.49322128674835697 -eks NEW 7 0.6117840605678454 0.1878849191181694 - diff --git a/go/reg-test/expected/case-positional-indexing.sh.out b/go/reg-test/expected/case-positional-indexing.sh.out deleted file mode 100644 index b76e18930..000000000 --- a/go/reg-test/expected/case-positional-indexing.sh.out +++ /dev/null @@ -1,70 +0,0 @@ - -mlr --oxtab --from reg-test/input/abixy head -n 1 then put - $_1 = ""; # just for visual output-spacing - $srec_keyed_by_2 = $[2]; - $srec_name_2 = $[[2]]; - $srec_value_2 = $[[[2]]]; - $_2 = ""; - $dollar_star_keyed_by_2 = $*[2]; - $dollar_star_name_2 = $*[[2]]; - $dollar_star_value_2 = $*[[[2]]]; - $_3 = ""; - mymap = {"a":7, "b":8, "c":9}; - $mymap_keyed_by_2 = mymap[2]; - $mymap_name_2 = mymap[[2]]; - $mymap_value_2 = mymap[[[2]]]; - $_4 = ""; - myarray = [7, 8, 9]; - $myarray_keyed_by_2 = myarray[2]; - $myarray_name_2 = myarray[[2]]; - $myarray_value_2 = myarray[[[2]]]; - -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -_1 -srec_name_2 b -srec_value_2 pan -_2 -dollar_star_name_2 b -dollar_star_value_2 pan -_3 -mymap_name_2 b -mymap_value_2 8 -_4 -myarray_keyed_by_2 8 -myarray_name_2 2 -myarray_value_2 8 - -mlr --oxtab --from reg-test/input/abixy head -n 1 then put - $_1 = ""; # just for visual output-spacing - $srec_keyed_by_2 = $[900]; - $srec_name_2 = $[[900]]; - $srec_value_2 = $[[[900]]]; - $_2 = ""; - $dollar_star_keyed_by_2 = $*[900]; - $dollar_star_name_2 = $*[[900]]; - $dollar_star_value_2 = $*[[[900]]]; - $_3 = ""; - mymap = {"a":7, "b":8, "c":9}; - $mymap_keyed_by_2 = mymap[900]; - $mymap_name_2 = mymap[[900]]; - $mymap_value_2 = mymap[[[900]]]; - $_4 = ""; - myarray = [7, 8, 9]; - $myarray_keyed_by_2 = myarray[900]; - $myarray_name_2 = myarray[[900]]; - $myarray_value_2 = myarray[[[900]]]; - -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -_1 -_2 -_3 -_4 - diff --git a/go/src/miller/dsl/cst/lvalues.go b/go/src/miller/dsl/cst/lvalues.go index 312c1992d..e0497af95 100644 --- a/go/src/miller/dsl/cst/lvalues.go +++ b/go/src/miller/dsl/cst/lvalues.go @@ -52,14 +52,15 @@ func (this *RootNode) BuildAssignableNode( return this.BuildLocalVariableLvalueNode(astNode) break - case dsl.NodeTypeArrayOrMapIndexAccess: - return this.BuildIndexedLvalueNode(astNode) - break case dsl.NodeTypeArrayOrMapPositionalNameAccess: - return nil, nil // TODO + return this.BuildArrayOrMapPositionalNameAccessLvalueNode(astNode) break case dsl.NodeTypeArrayOrMapPositionalValueAccess: - return nil, nil // TODO + return this.BuildArrayOrMapPositionalValueAccessLvalueNode(astNode) + break + + case dsl.NodeTypeArrayOrMapIndexAccess: + return this.BuildIndexedLvalueNode(astNode) break case dsl.NodeTypeEnvironmentVariable: @@ -773,6 +774,195 @@ func (this *LocalVariableLvalueNode) UnsetIndexed( } } +// ---------------------------------------------------------------- +// Set the name at 2nd positional index in the current stream record: e.g. +// '$[[2]] = "abc" + +type ArrayOrMapPositionalNameAccessLvalueNode struct { + lhsFieldIndexExpression IEvaluable +} + +func (this *RootNode) BuildArrayOrMapPositionalNameAccessLvalueNode( + astNode *dsl.ASTNode, +) (IAssignable, error) { + lib.InternalCodingErrorIf(astNode.Type != dsl.NodeTypeArrayOrMapPositionalNameAccess) + lib.InternalCodingErrorIf(astNode == nil) + lib.InternalCodingErrorIf(len(astNode.Children) != 1) + lhsFieldIndexExpression, err := this.BuildEvaluableNode(astNode.Children[0]) + if err != nil { + return nil, err + } + + return NewArrayOrMapPositionalNameAccessLvalueNode(lhsFieldIndexExpression), nil +} + +func NewArrayOrMapPositionalNameAccessLvalueNode( + lhsFieldIndexExpression IEvaluable, +) *ArrayOrMapPositionalNameAccessLvalueNode { + return &ArrayOrMapPositionalNameAccessLvalueNode{ + lhsFieldIndexExpression: lhsFieldIndexExpression, + } +} + +func (this *ArrayOrMapPositionalNameAccessLvalueNode) Assign( + rvalue *types.Mlrval, + state *State, +) error { + // AssignmentNode checks for absentness of the rvalue, so we just assign + // whatever we get + lib.InternalCodingErrorIf(rvalue.IsAbsent()) + + lhsFieldIndex := this.lhsFieldIndexExpression.Evaluate(state) + + index, ok := lhsFieldIndex.GetIntValue() + if ok { + // TODO: incorporate error-return into this API + state.Inrec.PutNameWithPositionalIndex(index, rvalue) + return nil + } else { + return errors.New( + fmt.Sprintf( + "Miller: positional index for $[[...]] assignment must be integer; got %s.", + lhsFieldIndex.GetTypeName(), + ), + ) + } +} + +func (this *ArrayOrMapPositionalNameAccessLvalueNode) AssignIndexed( + rvalue *types.Mlrval, + indices []*types.Mlrval, + state *State, +) error { + // TODO: reconsider this if /when we decide to allow string-slice + // assignments. + return errors.New( + "Miller: $[[...]] = ... expressions are not indexable.", + ) +} + +func (this *ArrayOrMapPositionalNameAccessLvalueNode) Unset( + state *State, +) { + this.UnsetIndexed(nil, state) +} + +func (this *ArrayOrMapPositionalNameAccessLvalueNode) UnsetIndexed( + indices []*types.Mlrval, + state *State, +) { + lhsFieldIndex := this.lhsFieldIndexExpression.Evaluate(state) + if indices == nil { + name := lhsFieldIndex.String() + // xxx positional + state.Inrec.Remove(&name) + } else { + // xxx positional + state.Inrec.UnsetIndexed( + append([]*types.Mlrval{&lhsFieldIndex}, indices...), + ) + } +} + +// ---------------------------------------------------------------- +// Set the value at 2nd positional index in the current stream record: e.g. +// '$[[[2]]] = "abc" + +type ArrayOrMapPositionalValueAccessLvalueNode struct { + lhsFieldIndexExpression IEvaluable +} + +func (this *RootNode) BuildArrayOrMapPositionalValueAccessLvalueNode( + astNode *dsl.ASTNode, +) (IAssignable, error) { + lib.InternalCodingErrorIf(astNode.Type != dsl.NodeTypeArrayOrMapPositionalValueAccess) + lib.InternalCodingErrorIf(astNode == nil) + lib.InternalCodingErrorIf(len(astNode.Children) != 1) + lhsFieldIndexExpression, err := this.BuildEvaluableNode(astNode.Children[0]) + if err != nil { + return nil, err + } + + return NewArrayOrMapPositionalValueAccessLvalueNode(lhsFieldIndexExpression), nil +} + +func NewArrayOrMapPositionalValueAccessLvalueNode( + lhsFieldIndexExpression IEvaluable, +) *ArrayOrMapPositionalValueAccessLvalueNode { + return &ArrayOrMapPositionalValueAccessLvalueNode{ + lhsFieldIndexExpression: lhsFieldIndexExpression, + } +} + +func (this *ArrayOrMapPositionalValueAccessLvalueNode) Assign( + rvalue *types.Mlrval, + state *State, +) error { + return this.AssignIndexed(rvalue, nil, state) +} + +func (this *ArrayOrMapPositionalValueAccessLvalueNode) AssignIndexed( + rvalue *types.Mlrval, + indices []*types.Mlrval, + state *State, +) error { + // AssignmentNode checks for absentness of the rvalue, so we just assign + // whatever we get + lib.InternalCodingErrorIf(rvalue.IsAbsent()) + + lhsFieldIndex := this.lhsFieldIndexExpression.Evaluate(state) + + if indices == nil { + index, ok := lhsFieldIndex.GetIntValue() + if ok { + // TODO: incorporate error-return into this API + //err := state.Inrec.PutCopyWithPositionalIndex(&lhsFieldIndex, rvalue) + //if err != nil { + //return err + //} + //return nil + state.Inrec.PutCopyWithPositionalIndex(index, rvalue) + return nil + } else { + return errors.New( + fmt.Sprintf( + "Miller: positional index for $[[[...]]] assignment must be integer; got %s.", + lhsFieldIndex.GetTypeName(), + ), + ) + } + } else { + // xxx positional + return state.Inrec.PutIndexed( + append([]*types.Mlrval{&lhsFieldIndex}, indices...), + rvalue, + ) + } +} + +func (this *ArrayOrMapPositionalValueAccessLvalueNode) Unset( + state *State, +) { + this.UnsetIndexed(nil, state) +} + +func (this *ArrayOrMapPositionalValueAccessLvalueNode) UnsetIndexed( + indices []*types.Mlrval, + state *State, +) { + lhsFieldIndex := this.lhsFieldIndexExpression.Evaluate(state) + if indices == nil { + name := lhsFieldIndex.String() + // xxx positional + state.Inrec.Remove(&name) + } else { + // xxx positional + state.Inrec.UnsetIndexed( + append([]*types.Mlrval{&lhsFieldIndex}, indices...), + ) + } +} + // ---------------------------------------------------------------- // IndexedValueNode is a delegator to base-lvalue types. // * The baseLvalue is some IAssignable