summaryrefslogtreecommitdiff
path: root/Lisp/performance-hacks.lisp
blob: 054fe5e6ac1492781e711d52762e5912d67c2a66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(in-package #:mulk.objective-cl)

;;; This file is for hacks that we might not want to actually use in a
;;; production environment but which might be useful in determining
;;; performance bottlenecks.  These hacks may depend on specific
;;; versions of third-party libraries such as CFFI.


;;; The following hack depends on a specific CFFI snapshot.  It tries to
;;; alleviate the apparent slowness of CFFI::PARSE-TYPE in that
;;; particular snapshot.
;;;
;;; The performance improvement for method calls accomplished by this
;;; hack amounts to approximately 80 % for PRIMITIVE-INVOKE and
;;; approximately 50 % for INVOKE.
#+(or)
(progn
  (defparameter *cffi-hacked* nil)
  (eval-when (:load-toplevel)
    ;; If we do this more than once, we cache our own cached function,
    ;; which is kind of useless.
    (unless *cffi-hacked*
      (setq *cffi-hacked* t)
      (let ((original-cffi-parse-type-fn (fdefinition 'cffi::parse-type)))
        (define-cached-function cffi::parse-type (type)
            type
          (funcall original-cffi-parse-type-fn type))))))