hush: fix a bunch of obscure while/until/continue bugs
function old new delta
run_list 1159 1214 +55
done_pipe 106 123 +17
done_command 86 98 +12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 84/0) Total: 84 bytes
diff --git a/shell/hush_test/hush-misc/continue2.right b/shell/hush_test/hush-misc/continue2.right
new file mode 100644
index 0000000..49d3ebd
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue2.right
@@ -0,0 +1 @@
+Ok:1
diff --git a/shell/hush_test/hush-misc/continue2.tests b/shell/hush_test/hush-misc/continue2.tests
new file mode 100644
index 0000000..c2df071
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue2.tests
@@ -0,0 +1,3 @@
+e=''
+(while test $e && exit 1; true; do e=1; continue; done)
+echo Ok:$?
diff --git a/shell/hush_test/hush-misc/continue3.right b/shell/hush_test/hush-misc/continue3.right
new file mode 100644
index 0000000..aa47d0d
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue3.right
@@ -0,0 +1,2 @@
+0
+0
diff --git a/shell/hush_test/hush-misc/continue3.tests b/shell/hush_test/hush-misc/continue3.tests
new file mode 100644
index 0000000..0aff867
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue3.tests
@@ -0,0 +1,3 @@
+# Test that "continue" does affect exitcode (sets to 0)
+e=''
+while echo $?; test $e && exit; true; do e=1; false; continue; done
diff --git a/shell/hush_test/hush-misc/until1.right b/shell/hush_test/hush-misc/until1.right
new file mode 100644
index 0000000..be2daad
--- /dev/null
+++ b/shell/hush_test/hush-misc/until1.right
@@ -0,0 +1,3 @@
+1
+1
+Ok:0
diff --git a/shell/hush_test/hush-misc/until1.tests b/shell/hush_test/hush-misc/until1.tests
new file mode 100644
index 0000000..10ab283
--- /dev/null
+++ b/shell/hush_test/hush-misc/until1.tests
@@ -0,0 +1,11 @@
+x=1
+until test "$x" = 4; do echo $x; x=4; done
+
+# We had a bug in multi-line form
+x=1
+until test "$x" = 4; do
+ echo $x
+ x=4
+done
+
+echo Ok:$?
diff --git a/shell/hush_test/hush-misc/while2.right b/shell/hush_test/hush-misc/while2.right
new file mode 100644
index 0000000..07207cc
--- /dev/null
+++ b/shell/hush_test/hush-misc/while2.right
@@ -0,0 +1,2 @@
+Hello
+OK:0
diff --git a/shell/hush_test/hush-misc/while2.tests b/shell/hush_test/hush-misc/while2.tests
new file mode 100644
index 0000000..2247adc
--- /dev/null
+++ b/shell/hush_test/hush-misc/while2.tests
@@ -0,0 +1,2 @@
+while echo Hello; false; do echo NOT SHOWN; done
+echo OK:$?