Support modular smoke & cleanup.
Annotate for file src/bindings.lisp
2009-04-05 tobias 1 (in-package :smoke)
15:36:29 ' 2
2009-06-22 tobias 3 (defstruct smoke-array
2009-08-02 tobias 4 "A C array."
2009-06-22 tobias 5 (pointer (null-pointer) :type foreign-pointer)
12:18:08 ' 6 (length 0 :type (smoke-index 0)))
' 7
2010-02-19 tobias 8
2009-06-22 tobias 9 (defstruct smoke-module
12:18:08 ' 10 (pointer (null-pointer) :type foreign-pointer)
2010-02-19 tobias 11 (binding (null-pointer) :type foreign-pointer)
2009-06-22 tobias 12
12:18:08 ' 13 (classes (make-smoke-array) :type smoke-array)
' 14 (methods (make-smoke-array) :type smoke-array)
' 15 (method-maps (make-smoke-array) :type smoke-array)
' 16 (method-names (make-smoke-array) :type smoke-array)
' 17 (types (make-smoke-array) :type smoke-array)
' 18
' 19 (inheritance-list (null-pointer) :type foreign-pointer)
' 20 (argument-list (null-pointer) :type foreign-pointer)
' 21 (ambiguous-method-list (null-pointer) :type foreign-pointer))
' 22
2009-08-02 tobias 23 (defvar *smoke-modules* (make-hash-table)
10:12:41 ' 24 "All loaded Smoke modules.")
2009-06-22 tobias 25
2010-01-10 tobias 26 (eval-on-save ()
08:49:36 ' 27 (clrhash *smoke-modules*))
' 28
2009-08-27 tobias 29 (defmethod print-object ((smoke-module smoke-module) stream)
11:43:13 ' 30 (if (null-pointer-p (smoke-module-pointer smoke-module))
' 31 (call-next-method)
' 32 (print-unreadable-object (smoke-module stream :type t :identity t)
' 33 (princ (smoke-get-module-name (smoke-module-pointer smoke-module))
' 34 stream))))
' 35
2009-06-22 tobias 36 (defun init-smoke-module (module)
12:18:08 ' 37 (let ((smoke (smoke-module-pointer module)))
' 38 (setf (gethash (pointer-address smoke) *smoke-modules*)
' 39 module)
' 40 (flet ((mk-array (array)
' 41 (make-smoke-array :pointer (cl-smoke-array smoke array)
' 42 :length (cl-smoke-array-size smoke array))))
' 43 (setf (smoke-module-classes module) (mk-array :classes)
' 44 (smoke-module-methods module) (mk-array :methods)
' 45 (smoke-module-method-maps module) (mk-array :method-maps)
' 46 (smoke-module-method-names module) (mk-array :method-names)
' 47 (smoke-module-types module) (mk-array :types)
' 48
' 49 (smoke-module-inheritance-list module)
' 50 (cl-smoke-array smoke :inheritance-list)
' 51
' 52 (smoke-module-argument-list module)
' 53 (cl-smoke-array smoke :argument-list)
' 54
' 55 (smoke-module-ambiguous-method-list module)
' 56 (cl-smoke-array smoke :ambiguous-method-list)))))
' 57