summaryrefslogtreecommitdiff
path: root/Lisp/performance-hacks.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'Lisp/performance-hacks.lisp')
-rw-r--r--Lisp/performance-hacks.lisp27
1 files changed, 27 insertions, 0 deletions
diff --git a/Lisp/performance-hacks.lisp b/Lisp/performance-hacks.lisp
new file mode 100644
index 0000000..054fe5e
--- /dev/null
+++ b/Lisp/performance-hacks.lisp
@@ -0,0 +1,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))))))