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