5 (pointer (null-pointer) :type foreign-pointer)
6 (length 0 :type (smoke-index 0)))
8 (defstruct smoke-module
9 (pointer (null-pointer) :type foreign-pointer)
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)
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))
21 (defvar *smoke-modules* (make-hash-table)
22 "All loaded Smoke modules.")
25 (clrhash *smoke-modules*))
27 (defmethod print-object ((smoke-module smoke-module) stream)
28 (if (null-pointer-p (smoke-module-pointer smoke-module))
30 (print-unreadable-object (smoke-module stream :type t :identity t)
31 (princ (smoke-get-module-name (smoke-module-pointer smoke-module))
34 (defun init-smoke-module (module)
35 (let ((smoke (smoke-module-pointer module)))
36 (setf (gethash (pointer-address smoke) *smoke-modules*)
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)
47 (smoke-module-inheritance-list module)
48 (cl-smoke-array smoke :inheritance-list)
50 (smoke-module-argument-list module)
51 (cl-smoke-array smoke :argument-list)
53 (smoke-module-ambiguous-method-list module)
54 (cl-smoke-array smoke :ambiguous-method-list)))))