removed fasls
[objcffi.git] / objc-include-utils.lisp
blob376d6f40512deb9aa7e0adfcdf20018cce0c3799
1 (in-package :objcffi)
3 ;; Low level (dangerous utils at the level of objc-include)
5 (defun %instancep (objc-class)
6 ;; parameter -must- be a pointer to either an objc_class or an objc_object
7 ;; or this function will almost def. crash
8 ;;
9 ;; Is this an instance or a class?
10 ;; pass in either an instance, or an object
11 (assert (cffi:pointerp objc-class))
12 (cls-get-info (cffi:foreign-slot-value
13 (cffi:foreign-slot-value objc-class 'objc_object 'isa)
14 'objc_class 'info)
15 CLS_CLASS))
17 (defun %list-ivars (objc-class)
18 ;; returns an alist like ((id "ivarName") (:float "anotherIvar") ...)
19 (assert (cffi:pointerp objc-class))
20 (let* ((ivars (cffi:foreign-slot-value objc-class 'objc_class 'ivars)))
21 (if (cffi:null-pointer-p ivars) nil
22 (let* ((ivar-count (cffi:foreign-slot-value ivars 'objc_ivar_list 'ivar_count))
23 (ivar (cffi:inc-pointer ivars (cffi:foreign-slot-offset 'objc_ivar_list 'ivar_list))))
24 (loop
25 repeat ivar-count
26 collect (list (decode-type (cffi:foreign-slot-value ivar 'objc_ivar 'ivar_type))
27 (cffi:foreign-slot-value ivar 'objc_ivar 'ivar_name))
28 do (cffi:incf-pointer ivar (cffi:foreign-type-size 'objc_ivar)))))))
30 ;;; (%list-ivars (%objc_getClass "NSApplication"))