diff options
Diffstat (limited to 'Lisp')
-rw-r--r-- | Lisp/class-definition.lisp | 8 | ||||
-rw-r--r-- | Lisp/libobjcl.lisp | 1 | ||||
-rw-r--r-- | Lisp/method-invocation.lisp | 25 | ||||
-rw-r--r-- | Lisp/post-init.lisp | 23 | ||||
-rw-r--r-- | Lisp/type-conversion.lisp | 43 |
5 files changed, 74 insertions, 26 deletions
diff --git a/Lisp/class-definition.lisp b/Lisp/class-definition.lisp index 938cf50..51bb12d 100644 --- a/Lisp/class-definition.lisp +++ b/Lisp/class-definition.lisp @@ -341,6 +341,14 @@ class) +(defcallback collect-class :void ((class :pointer)) + (find-objc-class (%objcl-class-name class))) + + +(defun collect-classes () + (%objcl-for-each-class-do (callback collect-class))) + + ;;;; (@* "Quick tests") #+(or) (make-instance 'objective-c-class :wrapped-foreign-class "NSString") diff --git a/Lisp/libobjcl.lisp b/Lisp/libobjcl.lisp index a42300e..e6b1b9a 100644 --- a/Lisp/libobjcl.lisp +++ b/Lisp/libobjcl.lisp @@ -351,7 +351,6 @@ conventional case for namespace identifiers in Objective-C." (find-objc-meta-class class-name-string)) :pointer class-ptr - :wrapped-foreign-class class-name-string ;; FIXME: It might be desirable to do ;; set the list of direct superclasses ;; to something like the following: diff --git a/Lisp/method-invocation.lisp b/Lisp/method-invocation.lisp index d1412bf..03e2ab7 100644 --- a/Lisp/method-invocation.lisp +++ b/Lisp/method-invocation.lisp @@ -453,31 +453,6 @@ easier to use with __apply__. selector))))))) -(defun convert-from-foreign-value (foreign-value-cell typespec - skip-retaining-p char-is-bool-p) - (let ((c-type (typespec->c-type typespec))) - (case (or (typespec-nominal-type typespec) - (typespec-primary-type typespec)) - ((id objective-c-class exception selector) - (let ((*skip-retaining* - skip-retaining-p)) - (intern-pointer-wrapper (car typespec) - :pointer (cffi:mem-ref foreign-value-cell - c-type)))) - ((:char :unsigned-char) - ;; FIXME? This is non-trivial. See policy.lisp for - ;; details. - (objc-char->lisp-value (cffi:mem-ref foreign-value-cell c-type) - char-is-bool-p)) - ((struct union) - ;; The caller is responsible for preventing the return - ;; value from being garbage-collected by setting - ;; FOREIGN-VALUE-LISP-MANAGED-P to false. - (make-struct-wrapper foreign-value-cell typespec t)) - ((:void) (values)) - (otherwise (cffi:mem-ref foreign-value-cell c-type))))) - - ;;; (@* "Helper functions") (defun constructor-name-p (method-name) (flet ((method-name-starts-with (prefix) diff --git a/Lisp/post-init.lisp b/Lisp/post-init.lisp new file mode 100644 index 0000000..6585bb9 --- /dev/null +++ b/Lisp/post-init.lisp @@ -0,0 +1,23 @@ +;;;; Objective-CL, an Objective-C bridge for Common Lisp. +;;;; Copyright (C) 2007 Matthias Andreas Benkard. +;;;; +;;;; This program is free software: you can redistribute it and/or +;;;; modify it under the terms of the GNU Lesser General Public License +;;;; as published by the Free Software Foundation, either version 3 of +;;;; the License, or (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, but +;;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;;; Lesser General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU Lesser General Public +;;;; License along with this program. If not, see +;;;; <http://www.gnu.org/licenses/>. + +(in-package #:mulk.objective-cl) + +(eval-when (:load-toplevel) + (format t "~&Collecting Objective-C classes.") + (collect-classes) + (format t "~&All Objective-C classes collected.")) diff --git a/Lisp/type-conversion.lisp b/Lisp/type-conversion.lisp new file mode 100644 index 0000000..6eca43b --- /dev/null +++ b/Lisp/type-conversion.lisp @@ -0,0 +1,43 @@ +;;;; Objective-CL, an Objective-C bridge for Common Lisp. +;;;; Copyright (C) 2007, 2008 Matthias Andreas Benkard. +;;;; +;;;; This program is free software: you can redistribute it and/or +;;;; modify it under the terms of the GNU Lesser General Public License +;;;; as published by the Free Software Foundation, either version 3 of +;;;; the License, or (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, but +;;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;;; Lesser General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU Lesser General Public +;;;; License along with this program. If not, see +;;;; <http://www.gnu.org/licenses/>. + +(in-package #:mulk.objective-cl) + + +(defun convert-from-foreign-value (foreign-value-cell typespec + skip-retaining-p char-is-bool-p) + (let ((c-type (typespec->c-type typespec))) + (case (or (typespec-nominal-type typespec) + (typespec-primary-type typespec)) + ((id objective-c-class exception selector) + (let ((*skip-retaining* + skip-retaining-p)) + (intern-pointer-wrapper (car typespec) + :pointer (cffi:mem-ref foreign-value-cell + c-type)))) + ((:char :unsigned-char) + ;; FIXME? This is non-trivial. See policy.lisp for + ;; details. + (objc-char->lisp-value (cffi:mem-ref foreign-value-cell c-type) + char-is-bool-p)) + ((struct union) + ;; The caller is responsible for preventing the return + ;; value from being garbage-collected by setting + ;; FOREIGN-VALUE-LISP-MANAGED-P to false. + (make-struct-wrapper foreign-value-cell typespec t)) + ((:void) (values)) + (otherwise (cffi:mem-ref foreign-value-cell c-type)))))
\ No newline at end of file |