diff options
author | Matthias Benkard <code@mail.matthias.benkard.de> | 2007-09-18 00:50:47 +0200 |
---|---|---|
committer | Matthias Benkard <code@mail.matthias.benkard.de> | 2007-09-18 00:50:47 +0200 |
commit | c93a74f1befea75be769fb47968e67568139954d (patch) | |
tree | 3774752500b8e615f98c10e6245544a7247aeaf2 /Lisp/libobjcl.lisp | |
parent | f98c79811e81eff07f967f28c108b76a4a7d1343 (diff) |
Objective-C layer: Add functions for dealing with classes and metaclasses.
darcs-hash:9ce15bb5fff3fb127cf4f6b72e70fa58c1cc2345
Diffstat (limited to 'Lisp/libobjcl.lisp')
-rw-r--r-- | Lisp/libobjcl.lisp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Lisp/libobjcl.lisp b/Lisp/libobjcl.lisp index ffe166f..fd7caca 100644 --- a/Lisp/libobjcl.lisp +++ b/Lisp/libobjcl.lisp @@ -57,6 +57,20 @@ (object obj-data) (selector obj-data)) +(defcfun ("objcl_object_is_class" %objcl-object-is-class) :boolean + (obj :pointer)) + +(defcfun ("objcl_object_is_meta_class" %objcl-object-is-meta-class) + :boolean + (obj :pointer)) + +(defcfun ("objcl_object_get_class" %objcl-object-get-class) :pointer + (obj :pointer)) + +(defcfun ("objcl_object_get_meta_class" %objcl-object-get-meta-class) + :pointer + (obj :pointer)) + (defun initialise-runtime () "Initialise the Objective C runtime. @@ -284,6 +298,27 @@ by which __invoke__ converts its arguments into a *message name*. selector-name))))) +(defun object-is-class-p (obj) + (%objcl-object-is-class (pointer-to obj))) + +(defun object-is-meta-class-p (obj) + (%objcl-object-is-meta-class (pointer-to obj))) + +(defun object-get-class (obj) + (make-instance 'objc-class + :pointer (%objcl-object-get-class (pointer-to obj)))) + +(defun object-get-meta-class (obj) + (make-instance 'objc-meta-class + :pointer (%objcl-object-get-meta-class (pointer-to obj)) + :meta-class-for-class (object-get-class obj))) + +(defun objc-class-of (obj) + (cond ((object-is-meta-class-p obj) + (error "Tried to get the class of meta class ~S." obj)) + ((object-is-class-p obj) (object-get-meta-class obj)) + (t (object-get-class obj)))) + ;;; (@* "Low-level Data Conversion") (eval-when (:compile-toplevel :load-toplevel) ;; In order to be able to dispatch over pointer types, we need to |