(in-package :core)
-(define-condition index-error (types:mal-error)
+(define-condition index-error (types:mal-runtime-exception)
((size :initarg :size :reader size)
(index :initarg :index :reader index)
(sequence :initarg :sequence :reader sequence))
(in-package :env)
-(define-condition undefined-symbol (types:mal-error)
+(define-condition undefined-symbol (types:mal-runtime-exception)
((symbol :initarg :symbol :reader symbol))
(:report (lambda (condition stream)
(format stream
- "Symbol ~a is undefined"
+ "'~a' not found"
(symbol condition)))))
-(define-condition arity-mismatch (types:mal-error)
+(define-condition arity-mismatch (types:mal-runtime-exception)
((required :initarg :required :reader required)
(provided :initarg :provided :reader provided))
(:report (lambda (condition stream)
:fn
:builtin-fn
:any
+ :mal-exception
+ ;; User exceptions
+ :mal-user-exception
+ ;; Exceptions raised by the runtime itself
+ :mal-runtime-exception
;; Error
:mal-error
;; Helpers
(define-condition mal-error (error)
nil)
+(define-condition mal-exception (error)
+ nil)
+
+(define-condition mal-runtime-exception (mal-exception)
+ nil)
+
+(define-condition mal-user-exception (mal-exception)
+ ((data :accessor mal-exception-data :initarg :data)))
+
(defclass mal-type ()
((value :accessor mal-value :initarg :value)
(meta :accessor mal-meta :initarg :meta :initform nil)