home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / src / generr.lisp < prev    next >
Encoding:
Text File  |  2003-02-09  |  1.1 KB  |  45 lines

  1. (in-package "MAXIMA")
  2.  
  3. (defvar errset nil)
  4.  
  5. #+(or lispm kcl)
  6. (error "the errset special form is defined elsewhere for these machines")
  7.  
  8. #+excl ;for franz common lisp
  9. (defmacro errset (&rest l)
  10.   `(multiple-value-bind
  11.     (noerr val)
  12.     (excl::errorset ,@ l)
  13.     (cond (noerr (list val))
  14.       (errset (error "error inside errset"))
  15.       (t nil))))
  16.  
  17. #+lucid
  18. (defmacro errset (&rest l)
  19.   `(multiple-value-bind
  20.      (val err)
  21.      (lucid::with-error-trapping ,(car l))
  22.      (cond ((null err) val)
  23.        ((null errset) nil)
  24.        (t (eval val)))))
  25.     
  26.  
  27. ;;here is the  desired behavior of errset
  28. ;(let ((errset t)) (errset (+ 2 'a))) ;==> signals error
  29. ;(let ((errset nil)) (errset (+ 2 'a))) ;==> nil
  30. ;(let ((errset nil)) (errset (+ 2 3))) ;==> (5)
  31.  
  32. ;;a generic one if you have no error handling 
  33. ;;at all, that caught no errors but at least
  34. ;;returned a list in the normal case would be 
  35.  
  36. #+(or cmu clisp)
  37. (defmacro errset (&rest l)
  38.    `(handler-case (list ,(car l))
  39.      (error (e) (when errset (error e)))))
  40.  
  41. #-(or excl clisp cmu lucid)
  42. (defmacro errset (&rest l) `(list ,(car l)))
  43.  
  44.  
  45.