adding functions to do a non-local return via throw