X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Firrat.lisp;h=1b28a3a295a074271984cde6c3ed19289408adb8;hb=fb24d88c8f97f1b344addab398fc54f62d8aa4ce;hp=71619ee03b61e4124a50e587bb2e13a96ab5b77e;hpb=b5696612c774dac57abff3b5abe3f04ebe0ce2c7;p=sbcl.git diff --git a/src/code/irrat.lisp b/src/code/irrat.lisp index 71619ee..1b28a3a 100644 --- a/src/code/irrat.lisp +++ b/src/code/irrat.lisp @@ -23,15 +23,18 @@ (eval-when (:compile-toplevel :execute) (sb!xc:defmacro def-math-rtn (name num-args) - (let ((function (symbolicate "%" (string-upcase name)))) + (let ((function (symbolicate "%" (string-upcase name))) + (args (let ((sb!impl::*gentemp-counter* 0)) + (loop repeat num-args collect (gentemp "ARG"))))) `(progn (declaim (inline ,function)) - (sb!alien:define-alien-routine (,name ,function) double-float - ,@(let ((results nil)) - (dotimes (i num-args (nreverse results)) - (push (list (intern (format nil "ARG-~D" i)) - 'double-float) - results))))))) + (defun ,function ,args + (alien-funcall + (extern-alien ,name + (function double-float + ,@(loop repeat num-args + collect 'double-float))) + ,@args))))) (defun handle-reals (function var) `((((foreach fixnum single-float bignum ratio))