/* * SPL - The SPL Programming Language * Copyright (C) 2004, 2005 Clifford Wolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * example34.spl: Simple example for exceptions */ object Ex { var description = "This is an example exception object.\n" ~ "Nice to have descriptions on exceptions.. ;-)"; method tellme() { return "I am Ex. (${this})"; } method init() { return this; } } object Ex1 Ex { method tellme() { return "I am Ex1. (${this})"; } } object Ex2 Ex { method tellme() { return "I am Ex2. (${this})"; } } function throw_exception_sub(ex) { debug "Now throwing the exception $ex."; throw ex; debug "*** NEVER REACHED ***"; } function throw_exception(ex) { if (1) { var dummy = 1; debug "Going to throw exception $ex."; throw_exception_sub(ex); debug "*** NEVER REACHED ***"; } } try(x) { if (1) { var foobar = 1; throw_exception(new Ex1()); } catch Ex1: debug "Got exception Ex1: ${x.tellme()}\n${x.backtrace}"; catch Ex2: debug "Got exception Ex2: ${x.tellme()}\n${x.backtrace}"; } try(x) { if (1) { var foobar = 1; throw_exception(new Ex2()); } catch Ex: debug "Got exception Ex: ${x.tellme()}"; } try(x) { try (y) { if (1) { var foobar = 1; throw_exception(new Ex2()); } catch Ex1: debug "Got exception Ex1: ${y.tellme()}"; } catch Ex2: debug "Got exception Ex2: ${x.tellme()}"; } throw_exception(new Ex()); debug "*** NEVER REACHED ***";