Evaluate expr. If there is no error, 0 is returned. If there
is an error, a string (with a leading '*') will be
returned. The functions throw(value) and raise_error(value)
can also be used to immediately return any value, except 0.
The catch() is somewhat costly, and should not be used
anywhere. Rather, use it at places where an error would
destroy consistency.
Catch is not really an efun, but a compiler directive.