aboutsummaryrefslogtreecommitdiff
path: root/libchill/exh.c
diff options
context:
space:
mode:
Diffstat (limited to 'libchill/exh.c')
-rw-r--r--libchill/exh.c162
1 files changed, 0 insertions, 162 deletions
diff --git a/libchill/exh.c b/libchill/exh.c
deleted file mode 100644
index 8845d4336d5..00000000000
--- a/libchill/exh.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Implement runtime actions for CHILL.
- Copyright (C) 1992,1993 Free Software Foundation, Inc.
- Author: Wilfried Moser
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* As a special exception, if you link this library with other files,
- some of which are compiled with GCC, to produce an executable,
- this library does not by itself cause the resulting executable
- to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License. */
-
-
-#define __CHILL_LIB__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <setjmp.h>
-#include "rtltypes.h"
-
-extern void cause_exception (char *exname, char *file, int lineno, int user_arg);
-extern void unhandled_exception (char *exname, char *file, int lineno, int user_arg);
-
-/* An action with a handler:
- BODY ON (e1, e2): H12; (e3): H3; ELSE HE; END;
- is translated into:
-
- struct __ch_handler __tmp;
- static struct __ch_handler_excepts _H[4] =
- {
- { <<e1>>, 1 },
- { <<e2>>, 1 },
- { <<e3>>, 2 },
- { __ch_else_except, 3 },
- };
- __ch_link_handler(&__tmp);
- __tmp.handlers = _H;
- switch (setmp(&__tmp.jbuf))
- {
- case 0: BODY; __ch_unlink_handler(&__tmp); break;
- case 1: H12; break;
- case 2: H3; break;
- case 3: HE; break;
- }
-*/
-
-/* this part contains all neccessary functions to handle exceptions in CHILL */
-
-/* These two trivial function aren't inlines, to allow for
- more flexibility (e.g. a per-thread exception stack). */
-
-extern void __setexceptionStack (TExceptionHandlerStack *new);
-extern TExceptionHandlerStack * __getexceptionStack (void);
-
-void
-__ch_link_handler (handler)
- struct __ch_handler *handler;
-{
- handler->prev = __getexceptionStack ();
- __setexceptionStack (handler);
-}
-
- void
-__ch_unlink_handler (handler)
- struct __ch_handler *handler;
-{
- __setexceptionStack (handler->prev);
-}
-
-/*
- * function __cause_exception
- *
- * parameters:
- * exnum name string of exception to raise
- * file filename of CAUSE statement
- * lineno linenumber of CAUSE statement
- * user_arg user specified argument
- *
- * returns:
- * never leave function with longjmp or abort
- *
- * abstract:
- * search exceptionstack for last handler of caused exception,
- * call userdefined function to signal exception,
- * jump to handler with longjmp or call unhandled_exception
- *
- */
-
-void
-__cause_exception (ex, file, lineno, user_arg)
- char *ex;
- char *file;
- int lineno;
- int user_arg;
-{
- register struct __ch_handler *handler = __getexceptionStack();
-
- /* call user defined cause function */
- cause_exception (ex, file, lineno, user_arg);
-
- for ( ; handler != NULL; handler = handler->prev)
- {
- register struct __ch_handled_excepts *list = handler->handlers;
- for ( ; list->code != 0; list++ )
- {
- if (list->ex == __ch_else_except || EX_EQ(list->ex, ex)) /* found */
- {
- __setexceptionStack (handler->prev);
- longjmp(handler->jbuf, list->code);
- }
- }
- }
-
- /* no handler found -- call unhandled_exception */
- unhandled_exception (ex, file, lineno, user_arg);
- abort ();
-}
-
-/*
- * function __cause_ex1
- *
- * parameters:
- * exnum name string of exception to raise
- * file filename of CAUSE statement
- * lineno linenumber of CAUSE statement
- *
- * returns:
- * never leave function with longjmp or abort
- *
- * abstract:
- * This is the function the compiler generated code calls.
- * Search exceptionstack for last handler of caused exception,
- * call userdefined function to signal exception,
- * jump to handler with longjmp or call unhandled_exception
- *
- */
-
-void
-__cause_ex1 (ex, file, lineno)
- char *ex;
- char *file;
- int lineno;
-{
- __cause_exception (ex, file, lineno, 0);
-}