No need to construct a SmokeBinding per Smoke module.
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
' 8 (defstruct smoke-module
' 9 (pointer (null-pointer) :type foreign-pointer)
' 10
' 11 (classes (make-smoke-array) :type smoke-array)
' 12 (methods (make-smoke-array) :type smoke-array)
' 13 (method-maps (make-smoke-array) :type smoke-array)
' 14 (method-names (make-smoke-array) :type smoke-array)
' 15 (types (make-smoke-array) :type smoke-array)
' 16
' 17 (inheritance-list (null-pointer) :type foreign-pointer)
' 18 (argument-list (null-pointer) :type foreign-pointer)
' 19 (ambiguous-method-list (null-pointer) :type foreign-pointer))
' 20
2009-08-02 tobias 21 (defvar *smoke-modules* (make-hash-table)
10:12:41 ' 22 "All loaded Smoke modules.")
2009-06-22 tobias 23
2010-01-10 tobias 24 (eval-on-save ()
08:49:36 ' 25 (clrhash *smoke-modules*))
' 26
2009-08-27 tobias 27 (defmethod print-object ((smoke-module smoke-module) stream)
11:43:13 ' 28 (if (null-pointer-p (smoke-module-pointer smoke-module))
' 29 (call-next-method)
' 30 (print-unreadable-object (smoke-module stream :type t :identity t)
' 31 (princ (smoke-get-module-name (smoke-module-pointer smoke-module))
' 32 stream))))
' 33
2009-06-22 tobias 34 (defun init-smoke-module (module)
12:18:08 ' 35 (let ((smoke (smoke-module-pointer module)))
' 36 (setf (gethash (pointer-address smoke) *smoke-modules*)
' 37 module)
' 38 (flet ((mk-array (array)
' 39 (make-smoke-array :pointer (cl-smoke-array smoke array)
' 40 :length (cl-smoke-array-size smoke array))))
' 41 (setf (smoke-module-classes module) (mk-array :classes)
' 42 (smoke-module-methods module) (mk-array :methods)
' 43 (smoke-module-method-maps module) (mk-array :method-maps)
' 44 (smoke-module-method-names module) (mk-array :method-names)
' 45 (smoke-module-types module) (mk-array :types)
' 46
' 47 (smoke-module-inheritance-list module)
' 48 (cl-smoke-array smoke :inheritance-list)
' 49
' 50 (smoke-module-argument-list module)
' 51 (cl-smoke-array smoke :argument-list)
' 52
' 53 (smoke-module-ambiguous-method-list module)
' 54 (cl-smoke-array smoke :ambiguous-method-list)))))
' 55