(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))))