(linenum→info "unix/slp.c:2238")

gauche/0.8.12/src/exclib.stub

    1: ;;;
    2: ;;; exclib.stub - exceptions
    3: ;;;  
    4: ;;;   Copyright (c) 2000-2007  Shiro Kawai  <shiro@acm.org>
    5: ;;;   
    6: ;;;   Redistribution and use in source and binary forms, with or without
    7: ;;;   modification, are permitted provided that the following conditions
    8: ;;;   are met:
    9: ;;;   
   10: ;;;   1. Redistributions of source code must retain the above copyright
   11: ;;;      notice, this list of conditions and the following disclaimer.
   12: ;;;  
   13: ;;;   2. Redistributions in binary form must reproduce the above copyright
   14: ;;;      notice, this list of conditions and the following disclaimer in the
   15: ;;;      documentation and/or other materials provided with the distribution.
   16: ;;;  
   17: ;;;   3. Neither the name of the authors nor the names of its contributors
   18: ;;;      may be used to endorse or promote products derived from this
   19: ;;;      software without specific prior written permission.
   20: ;;;  
   21: ;;;   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22: ;;;   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23: ;;;   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   24: ;;;   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   25: ;;;   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   26: ;;;   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
   27: ;;;   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   28: ;;;   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   29: ;;;   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   30: ;;;   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   31: ;;;   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32: ;;;  
   33: ;;; $Id: exclib.stub,v 1.22 2007/05/20 04:55:24 shirok Exp $
   34: ;;;
   35: 
   36: "
   37: #include <gauche/class.h>
   38: #include <gauche/exception.h>
   39: "
   40: 
   41: ;;
   42: ;; Exception procedures
   43: ;;
   44: 
   45: ;; NB: rewind-before keyword arg is EXPERIMENTAL.
   46: (define-cproc with-error-handler (handler thunk
   47:                                   &keyword (rewind-before::<boolean> #f))
   48:   (body <top>
   49:         (unless (SCM_PROCEDURE_TAKE_NARG_P handler 1)
   50:           (Scm_Error "error handler must take at least 1 argument, but got %S"
   51:                      handler))
   52:         (unless (SCM_PROCEDURE_THUNK_P thunk)
   53:           (Scm_Error "thunk required, but got %S" thunk))
   54:         (if rewind-before
   55:           (result (Scm_VMWithGuardHandler handler thunk))
   56:           (result (Scm_VMWithErrorHandler handler thunk)))))
   57: 
   58: ;; srfi-18 primitive exception mechanism
   59: (define-cproc current-exception-handler ()
   60:   (expr <top> (-> (Scm_VM) exceptionHandler)))
   61: 
   62: (define-cproc with-exception-handler (handler thunk)
   63:   (call "Scm_VMWithExceptionHandler"))
   64: 
   65: (define-cproc raise (exception) (call "Scm_Raise"))
   66: 
   67: (define-cproc report-error (exception) (call <void> "Scm_ReportError"))
   68: 
   69: ;;
   70: ;; Condition procedures (srfi-35)
   71: ;;
   72: 
   73: (define-cproc condition? (obj)
   74:   (call <boolean> "SCM_CONDITIONP"))
   75: 
   76: (define-cproc condition-has-type? (c k)
   77:   (call <boolean> "Scm_ConditionHasType"))
   78: 
   79: (define-cproc make-compound-condition (&rest conditions)
   80:   (call "Scm_MakeCompoundCondition"))
   81: 
   82: 
   83: ;; Local variables:
   84: ;; mode: scheme
   85: ;; end:
Syntax (Markdown)