2012-06-04 02:59:10 +03:00
|
|
|
#!/bin/bash
|
|
|
|
. ./Common
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
tst "substitutions: break alone" -ds -q <<EOF
|
|
|
|
!-s
|
|
|
|
in = blah
|
|
|
|
out = x
|
|
|
|
in = (?)(*) {
|
|
|
|
out=\$out\$in
|
|
|
|
break /* does nothing useful */
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
in=blah
|
|
|
|
out=x
|
|
|
|
in=RE {
|
|
|
|
out=\${out}\${in}
|
|
|
|
break in
|
|
|
|
}
|
|
|
|
in=blah
|
|
|
|
out=xblah
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst "substitutions: named break to inner block" -ds -q <<EOF
|
|
|
|
!-s
|
|
|
|
in = blah
|
|
|
|
out = x
|
|
|
|
in = (?)(*) {
|
|
|
|
out=\$out\$in
|
|
|
|
break in /* does nothing useful */
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
in=blah
|
|
|
|
out=x
|
|
|
|
in=RE {
|
|
|
|
out=\${out}\${in}
|
|
|
|
break in
|
|
|
|
}
|
|
|
|
in=blah
|
|
|
|
out=xblah
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst "substitutions: named break to outer block (taken)" -q doit=y <<EOF
|
|
|
|
!-s
|
|
|
|
in = blah
|
|
|
|
out = x
|
|
|
|
in = (?)(*) {
|
|
|
|
out=\$out\$in
|
|
|
|
doit = y {
|
|
|
|
break in
|
|
|
|
}
|
|
|
|
out=\$out\$in
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
in=blah
|
|
|
|
out=xblah
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst "substitutions: named break to outer block (not taken)" -q doit=n <<EOF
|
|
|
|
!-s
|
|
|
|
in = blah
|
|
|
|
out = x
|
|
|
|
in = (?)(*) {
|
|
|
|
out=\$out\$in
|
|
|
|
doit = y {
|
|
|
|
break in
|
|
|
|
}
|
|
|
|
out=\$out\$in
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
in=blah
|
|
|
|
out=xblahblah
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst "substitutions: break with continue" -q <<EOF
|
|
|
|
!-s
|
|
|
|
res = x
|
|
|
|
res = * {
|
|
|
|
res = \${res}x
|
|
|
|
/*
|
|
|
|
* We use a temporary variable here because the variable name also
|
|
|
|
* serves as a jump label. Alternatively, we could use a dummy
|
|
|
|
* variable for the outer block.
|
|
|
|
*/
|
|
|
|
tmp = \$res
|
|
|
|
tmp = ????? { break res }
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
res=xxxxx
|
|
|
|
tmp=xxxxx
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
2012-06-04 03:17:31 +03:00
|
|
|
tst_fail "substitutions: unnamed break inside block " -q <<EOF
|
|
|
|
!-s
|
|
|
|
foo = x
|
|
|
|
foo = * {
|
|
|
|
break
|
|
|
|
foo = x
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
s:4: syntax error
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst_fail "substitutions: nmbed break inside block " -q <<EOF
|
2012-06-04 02:59:10 +03:00
|
|
|
!-s
|
|
|
|
foo = x
|
|
|
|
foo = * {
|
|
|
|
break bar
|
|
|
|
foo = x
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
s:5: unreachable code
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst_fail "substitutions: named break to unknown block" -q <<EOF
|
|
|
|
!-s
|
|
|
|
foo = x
|
|
|
|
foo = * {
|
|
|
|
break bar
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
s:5: cannot find "bar"
|
|
|
|
EOF
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
tst_fail "substitutions: break without block" -q <<EOF
|
|
|
|
!-s
|
|
|
|
break
|
|
|
|
EOF
|
|
|
|
|
|
|
|
expect <<EOF
|
|
|
|
s:2: jump without block
|
|
|
|
EOF
|
|
|
|
|
|
|
|
###############################################################################
|