Introduce types mal-runtime-exception and mal-user-exception types
authorIqbal Ansari <iqbalansari02@yahoo.com>
Mon, 22 Aug 2016 17:19:11 +0000 (22:49 +0530)
committerIqbal Ansari <iqbalansari02@yahoo.com>
Sat, 27 Aug 2016 12:43:33 +0000 (18:13 +0530)
All the exceptions generated by runtime inherit from mal-user-exception
while user exceptions inherit from mal-user-exception

common_lisp/core.lisp
common_lisp/env.lisp
common_lisp/types.lisp

index 8659aed..f86c1af 100644 (file)
@@ -8,7 +8,7 @@
 
 (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))
index 59aa3f2..bf59ba4 100644 (file)
@@ -9,14 +9,14 @@
 
 (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)
index 9a4a83b..d8a3988 100644 (file)
            :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)