summaryrefslogtreecommitdiff
path: root/alien.lisp
blob: 3451dc974d97aa97e386417683d6f2831b125c2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
(in-package #:alien)

(defmacro call (fname rtype &rest types-n-values)
  (let ((tlist (queue:new))
        (vlist (queue:new)))
    (dolist (item types-n-values)
      (queue:add tlist (first item))
      (queue:add vlist (second item)))
    `(alien-funcall (extern-alien ,fname
                                  (function ,rtype
                                            ,@(queue:to-list tlist)))
                    ,@(queue:to-list vlist))))