break/continue UT iterate

This commit is contained in:
John Kerl 2016-05-25 17:11:02 -04:00
parent e6847dfc01
commit dfec9033f2
3 changed files with 510 additions and 2 deletions

View file

@ -1629,10 +1629,10 @@ static void handle_for_srec(
// xxx funcptrize
handle_statement_list_with_break_continue(pnode->pblock_statements, pvars, pcst_outputs);
if (pvars->loop_broken_or_continued & LOOP_BROKEN) {
pvars->loop_broken_or_continued |= ~LOOP_BROKEN;
pvars->loop_broken_or_continued &= ~LOOP_BROKEN;
break;
} else if (pvars->loop_broken_or_continued & LOOP_CONTINUED) {
pvars->loop_broken_or_continued |= ~LOOP_CONTINUED;
pvars->loop_broken_or_continued &= ~LOOP_CONTINUED;
continue;
}
}

View file

@ -15912,6 +15912,426 @@ mean hat cat 0.503701
mean hat dog 0.475824
================================================================
BREAK/CONTINUE
mlr --opprint --from ./reg_test/input/abixy put -q
for (k,v in $*) {
@logging1[NR][k] = v;
if (k == "x") {
break;
}
}
end {
emitp @logging1, "NR", "k";
}
NR k logging1
1 a pan
1 b pan
1 i 1
1 x 0.3467901443380824
2 a eks
2 b pan
2 i 2
2 x 0.7586799647899636
3 a wye
3 b wye
3 i 3
3 x 0.20460330576630303
4 a eks
4 b wye
4 i 4
4 x 0.38139939387114097
5 a wye
5 b pan
5 i 5
5 x 0.5732889198020006
6 a zee
6 b pan
6 i 6
6 x 0.5271261600918548
7 a eks
7 b zee
7 i 7
7 x 0.6117840605678454
8 a zee
8 b wye
8 i 8
8 x 0.5985540091064224
9 a hat
9 b wye
9 i 9
9 x 0.03144187646093577
10 a pan
10 b wye
10 i 10
10 x 0.5026260055412137
mlr --opprint --from ./reg_test/input/abixy put -q
for (k,v in $*) {
if (k == "x") {
break;
}
@logging2[NR][k] = v;
}
end {
emitp @logging2, "NR", "k";
}
NR k logging2
1 a pan
1 b pan
1 i 1
2 a eks
2 b pan
2 i 2
3 a wye
3 b wye
3 i 3
4 a eks
4 b wye
4 i 4
5 a wye
5 b pan
5 i 5
6 a zee
6 b pan
6 i 6
7 a eks
7 b zee
7 i 7
8 a zee
8 b wye
8 i 8
9 a hat
9 b wye
9 i 9
10 a pan
10 b wye
10 i 10
mlr --opprint --from ./reg_test/input/abixy put -q
for (k,v in $*) {
@logging3[NR][k] = v;
if (k == "x") {
continue;
}
}
end {
emitp @logging3, "NR", "k";
}
NR k logging3
1 a pan
1 b pan
1 i 1
1 x 0.3467901443380824
1 y 0.7268028627434533
2 a eks
2 b pan
2 i 2
2 x 0.7586799647899636
2 y 0.5221511083334797
3 a wye
3 b wye
3 i 3
3 x 0.20460330576630303
3 y 0.33831852551664776
4 a eks
4 b wye
4 i 4
4 x 0.38139939387114097
4 y 0.13418874328430463
5 a wye
5 b pan
5 i 5
5 x 0.5732889198020006
5 y 0.8636244699032729
6 a zee
6 b pan
6 i 6
6 x 0.5271261600918548
6 y 0.49322128674835697
7 a eks
7 b zee
7 i 7
7 x 0.6117840605678454
7 y 0.1878849191181694
8 a zee
8 b wye
8 i 8
8 x 0.5985540091064224
8 y 0.976181385699006
9 a hat
9 b wye
9 i 9
9 x 0.03144187646093577
9 y 0.7495507603507059
10 a pan
10 b wye
10 i 10
10 x 0.5026260055412137
10 y 0.9526183602969864
mlr --opprint --from ./reg_test/input/abixy put -q
for (k,v in $*) {
if (k == "x") {
continue;
}
@logging4[NR][k] = v;
}
end {
emitp @logging4, "NR", "k"
}
NR k logging4
1 a pan
1 b pan
1 i 1
1 y 0.7268028627434533
2 a eks
2 b pan
2 i 2
2 y 0.5221511083334797
3 a wye
3 b wye
3 i 3
3 y 0.33831852551664776
4 a eks
4 b wye
4 i 4
4 y 0.13418874328430463
5 a wye
5 b pan
5 i 5
5 y 0.8636244699032729
6 a zee
6 b pan
6 i 6
6 y 0.49322128674835697
7 a eks
7 b zee
7 i 7
7 y 0.1878849191181694
8 a zee
8 b wye
8 i 8
8 y 0.976181385699006
9 a hat
9 b wye
9 i 9
9 y 0.7495507603507059
10 a pan
10 b wye
10 i 10
10 y 0.9526183602969864
mlr --opprint --from ./reg_test/input/abixy put -q
for (k,v in $*) {
@logging1[NR][k] = v;
if (k == "x") {
break;
}
}
for (k,v in $*) {
if (k == "x") {
break;
}
@logging2[NR][k] = v;
}
for (k,v in $*) {
@logging3[NR][k] = v;
if (k == "x") {
continue;
}
}
for (k,v in $*) {
if (k == "x") {
continue;
}
@logging4[NR][k] = v;
}
end {
emitp @logging1, "NR", "k";
emitp @logging2, "NR", "k";
emitp @logging3, "NR", "k";
emitp @logging4, "NR", "k"
}
NR k logging1
1 a pan
1 b pan
1 i 1
1 x 0.3467901443380824
2 a eks
2 b pan
2 i 2
2 x 0.7586799647899636
3 a wye
3 b wye
3 i 3
3 x 0.20460330576630303
4 a eks
4 b wye
4 i 4
4 x 0.38139939387114097
5 a wye
5 b pan
5 i 5
5 x 0.5732889198020006
6 a zee
6 b pan
6 i 6
6 x 0.5271261600918548
7 a eks
7 b zee
7 i 7
7 x 0.6117840605678454
8 a zee
8 b wye
8 i 8
8 x 0.5985540091064224
9 a hat
9 b wye
9 i 9
9 x 0.03144187646093577
10 a pan
10 b wye
10 i 10
10 x 0.5026260055412137
NR k logging2
1 a pan
1 b pan
1 i 1
2 a eks
2 b pan
2 i 2
3 a wye
3 b wye
3 i 3
4 a eks
4 b wye
4 i 4
5 a wye
5 b pan
5 i 5
6 a zee
6 b pan
6 i 6
7 a eks
7 b zee
7 i 7
8 a zee
8 b wye
8 i 8
9 a hat
9 b wye
9 i 9
10 a pan
10 b wye
10 i 10
NR k logging3
1 a pan
1 b pan
1 i 1
1 x 0.3467901443380824
1 y 0.7268028627434533
2 a eks
2 b pan
2 i 2
2 x 0.7586799647899636
2 y 0.5221511083334797
3 a wye
3 b wye
3 i 3
3 x 0.20460330576630303
3 y 0.33831852551664776
4 a eks
4 b wye
4 i 4
4 x 0.38139939387114097
4 y 0.13418874328430463
5 a wye
5 b pan
5 i 5
5 x 0.5732889198020006
5 y 0.8636244699032729
6 a zee
6 b pan
6 i 6
6 x 0.5271261600918548
6 y 0.49322128674835697
7 a eks
7 b zee
7 i 7
7 x 0.6117840605678454
7 y 0.1878849191181694
8 a zee
8 b wye
8 i 8
8 x 0.5985540091064224
8 y 0.976181385699006
9 a hat
9 b wye
9 i 9
9 x 0.03144187646093577
9 y 0.7495507603507059
10 a pan
10 b wye
10 i 10
10 x 0.5026260055412137
10 y 0.9526183602969864
NR k logging4
1 a pan
1 b pan
1 i 1
1 y 0.7268028627434533
2 a eks
2 b pan
2 i 2
2 y 0.5221511083334797
3 a wye
3 b wye
3 i 3
3 y 0.33831852551664776
4 a eks
4 b wye
4 i 4
4 y 0.13418874328430463
5 a wye
5 b pan
5 i 5
5 y 0.8636244699032729
6 a zee
6 b pan
6 i 6
6 y 0.49322128674835697
7 a eks
7 b zee
7 i 7
7 y 0.1878849191181694
8 a zee
8 b wye
8 i 8
8 y 0.976181385699006
9 a hat
9 b wye
9 i 9
9 y 0.7495507603507059
10 a pan
10 b wye
10 i 10
10 y 0.9526183602969864
================================================================
DSL CONTEXT-SPECIFIC VALIDATION

View file

@ -1706,6 +1706,94 @@ run_mlr --opprint --from $indir/abixy-wide put -q '
}
'
# ================================================================
announce BREAK/CONTINUE
run_mlr --opprint --from $indir/abixy put -q '
for (k,v in $*) {
@logging1[NR][k] = v;
if (k == "x") {
break;
}
}
end {
emitp @logging1, "NR", "k";
}
'
run_mlr --opprint --from $indir/abixy put -q '
for (k,v in $*) {
if (k == "x") {
break;
}
@logging2[NR][k] = v;
}
end {
emitp @logging2, "NR", "k";
}
'
run_mlr --opprint --from $indir/abixy put -q '
for (k,v in $*) {
@logging3[NR][k] = v;
if (k == "x") {
continue;
}
}
end {
emitp @logging3, "NR", "k";
}
'
run_mlr --opprint --from $indir/abixy put -q '
for (k,v in $*) {
if (k == "x") {
continue;
}
@logging4[NR][k] = v;
}
end {
emitp @logging4, "NR", "k"
}
'
run_mlr --opprint --from $indir/abixy put -q '
for (k,v in $*) {
@logging1[NR][k] = v;
if (k == "x") {
break;
}
}
for (k,v in $*) {
if (k == "x") {
break;
}
@logging2[NR][k] = v;
}
for (k,v in $*) {
@logging3[NR][k] = v;
if (k == "x") {
continue;
}
}
for (k,v in $*) {
if (k == "x") {
continue;
}
@logging4[NR][k] = v;
}
end {
emitp @logging1, "NR", "k";
emitp @logging2, "NR", "k";
emitp @logging3, "NR", "k";
emitp @logging4, "NR", "k"
}
'
# ================================================================
announce DSL CONTEXT-SPECIFIC VALIDATION