";;; This file is part of GNU epsilon, a functional language implementation\n"
"\n"
";;; Copyright (C) 2003 Luca Saiu\n"
"\n"
";;; GNU epsilon is free software; you can redistribute it and/or modify\n"
";;; it under the terms of the GNU General Public License as published\n"
";;; by the Free Software Foundation; either version 2, or (at your\n"
";;; option) any later version.\n"
"\n"
";;; GNU epsilon is distributed in the hope that it will be useful, but\n"
";;; WITHOUT ANY WARRANTY; without even the implied warranty of\n"
";;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
";;; General Public License for more details.\n"
"\n"
";;; You should have received a copy of the GNU General Public License\n"
";;; along with epsilon; see the file COPYING.  If not, write to the\n"
";;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
";;; Boston, MA 02111-1307, USA.\n"
"\n"
"\n"
";;; Code for the s_thrw instruction\n"
"\n"
";;; Set exception type and exception value, so that they are available to the\n"
";;; handler:\n"
"(set! exception-type exception-parameter-1)\n"
"(set! exception-value (top-stack))\n"
"\n"
";;; Clear the popped part of the stack:\n"
"(clear-stack (1+ (vector-ref (car exceptions-stack)\n"
"                             2)) ; the saved stack-pointer, incremented\n"
"             stack-pointer)\n"
"\n"
";;; Update FP, SP and environment:\n"
"(set! frame-pointer\n"
"      (vector-ref (car exceptions-stack)\n"
"\t\t  1)) ; saved frame-pointer\n"
"(set! stack-pointer\n"
"      (vector-ref (car exceptions-stack)\n"
"\t\t  2)) ; saved stack-pointer\n"
"(set! environment\n"
"      (vector-ref (car exceptions-stack)\n"
"\t\t  3)) ; saved environment\n"
"\n"
";;; Jump to the handler:\n"
"(vector-ref (car exceptions-stack)\n"
"\t    0) ; saved instruction-pointer to handler\n"
""
