From a9e8e67fbfce2a60318e9b946200833ef242c24c Mon Sep 17 00:00:00 2001
From: Matthias Benkard <code@mail.matthias.benkard.de>
Date: Wed, 5 Mar 2008 16:43:17 +0100
Subject: Add function OBJECTIVE-C-CLASS-REGISTERED-P.

darcs-hash:3e89853d61732a8fc928a1c3318dfaa648191e8c
---
 Lisp/data-types.lisp | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 Lisp/defpackage.lisp |  1 +
 2 files changed, 48 insertions(+)

(limited to 'Lisp')

diff --git a/Lisp/data-types.lisp b/Lisp/data-types.lisp
index 8cff29a..c305d99 100644
--- a/Lisp/data-types.lisp
+++ b/Lisp/data-types.lisp
@@ -183,6 +183,53 @@ a suitable class method instead as you would in Objective-C.
   __invoke__, __invoke-by-name__, __exception__"))
 
 
+(defgeneric objective-c-class-registered-p (class)
+  (:documentation "Determine whether a class has been registered with the Objective-C runtime.
+
+## Arguments and Values:
+
+*class* --- an **object** of **type** __objective-c-class__.
+
+Returns: a **boolean**.
+
+
+## Description:
+
+_objective-c-class-registered-p_ determines whether **class** has been
+registered with the Objective-C runtime.  It is the only public API
+provided by the class __objective-c-class__.
+
+A class is registered automatically when an instance is first seen by
+Objective-CL or when an attempt is made to send a message to it or its
+metaclass.
+
+The effect of attempting to add methods to registered classes is
+undefined.  Portable programs should therefore avoid it, even though it
+may work reliably on some systems (where it can be useful for debugging
+and development for portable programs as well).
+
+
+## Examples:
+
+    (define-objective-c-class mlk-my-class ()
+        ((foos :initargs :foos)
+         (foo-count :foreign-type :int)))  ;\"fooCount\" on the foreign side
+      => #<NS:+MLK-MY-CLASS NS:MLK-MY-CLASS {8080BF8}>
+
+    (objective-c-class-registered-p (find-objc-class 'mlk-my-class))
+      => NIL
+
+    (invoke (find-objc-class 'mlk-my-class) 'new)
+      => #<NS:MLK-MY-CLASS `<MLKMyClass: 0x81de1f8>' {81DE1F8}>
+
+    (objective-c-class-registered-p (find-objc-class 'mlk-my-class))
+      => T"))
+
+
+(defmethod objective-c-class-registered-p ((class objective-c-class))
+  (foreign-class-registered-p class))
+
+
 (defclass objective-c-class (standard-class c-pointer-wrapper)
   ((registered-p :type boolean
                  :accessor foreign-class-registered-p
diff --git a/Lisp/defpackage.lisp b/Lisp/defpackage.lisp
index 7fd6d0c..c14fca9 100644
--- a/Lisp/defpackage.lisp
+++ b/Lisp/defpackage.lisp
@@ -46,6 +46,7 @@
            #:objc-equal
            #:foreign-value-lisp-managed-p
            #:foreign-value-pointer
+           #:objective-c-class-registered-p
 
            ;; Macros
            #+(or) #:define-objc-struct
-- 
cgit v1.2.3