mzero/plush — pull request #36 by mzero (2013-02-20 20:04:21+00:00)
Title: Control flow - at long last

This is admittedly quite a big hunk for review!

The changes introduce the concept of `ShellStatus` is a sort of "enhanced" version of `ExitCode` used as the return value from internal shell operations, and special built-ins. This supports operations producing shell errors, which specific semantics in the spec.

It is also used to support break, continue, exit, and return. These special built-ins now produce status values that cause the execution machinery to perform these control-flow operations.

Along the way there was considerable clean up of where some types and functions lived.

There are some known infelicities with adherence to corners of the spec:
* break or continue with n greater than nest depth "overshoots"
* expansion errors (parameter expansion and command substitution) aren't propagated
* syntax errors for the special builtins don't `shellError`
* the web ui doesn't exit on exit