-/* Copyright (C) 1997 Free Software Foundation, Inc.
- This file is part of GNU CC. */
+/* EH stuff
+ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
/* This file contains the structures required for the language
independant exception handling model. Both the static compiler and
checking of runtime conditions. If the handler wasn't suppose to
get the exception, it performs a re-throw. */
-#include "gansidecl.h"
-
/* The handler_label field MUST be the first field in this structure. The
__throw() library routine expects uses __eh_stub() from except.c, which
void **dynamic_handler_chain;
/* This is language dependent part of the eh context. */
void *info;
+ /* This is used to remember where we threw for re-throws */
+ void *table_index; /* address of exception table entry to rethrow from */
};
#ifndef EH_TABLE_LOOKUP
exception_table table[1];
} exception_descriptor;
+struct __eh_info; /* forward declaration */
/* A pointer to a matching function is initialized at runtime by the
specific language if run-time exceptions are supported.
3 - exception table region is in (exception descriptor *)
*/
-typedef void * (*__eh_matcher) PROTO ((void *, void *, void *));
+typedef void * (*__eh_matcher) PARAMS ((struct __eh_info *, void *,
+ struct exception_descriptor *));
+
+/* This value is to be checked as a 'match all' case in the runtime field. */
+
+#define CATCH_ALL_TYPE ((void *) -1)
/* This is the runtime exception information. This forms the minimum required
information for an exception info pointer in an eh_context structure. */
+
typedef struct __eh_info
{
__eh_matcher match_function;
- void *coerced_value;
short language;
short version;
} __eh_info;