a thrown exception triggers .failed_substitution
Also: * fixing a recently introduced bug where the statement that contained a failed substitution would still run. * the intentionally broken .failed_substitution handler is tested only where useful. * test and false functions wrap /usr/bin/test and /bin/false, and throw .false exceptions for their return codes so that they can be used for control flow. * replacing the excessively precise but deprecated usleep() with the even more excessively precise nanosleep. * .store_output identifies error by a thrown exception rather than a return code. * .fork returns exit_code rather than dollar_question * removing several more -1 returns.
Showing with 584 additions and 499 deletions