| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |
Arguments: name arglist &rest body
This macro is obsolete and has been replaced by defun-foreign-callable. Please use that macro in all new code. This macro is maintained for backward compatibility only.
This macro defines a function in Lisp that can be called from foreign (traditionally C) code.
The argument list can be restated as:
lisp-function-name ({arg | (arg type)}*) body-form+
Thus arglist (the second argument in the argument
list) is a list of arguments each of which is either a symbol (as in
the usual function definition), or it is a list of length two, a
symbol and its type. If a symbol only is present, then it has the
default type (:signed-natural
). Each is an argument
which C passes to Lisp. This macro does not allow &rest or
&optional arguments in the argument list. The type corresponds to
a memref type (see memref
and memref-int) and is
limited to be one of the following:
:signed-byte 8 bits :unsigned-byte 8 bits :signed-word 16 bits :unsigned-word 16 bits :fixnum 30 bits :signed-long 32 bits :unsigned-long 32 bits :signed-natural (the default) :unsigned-natural :single-float, single-float 32 bits :double-float, double-float 64 bits :lisp (Assumes that C passes an actual Lisp value)
Warning for users of 64-bit Lisps:
:signed-long
and :unsigned-long
are treated as 32-bit values, even on a 64-bit port. Contrast this to
defun-foreign-callable, where
:long
and :unsigned-long
match
the precise meaning in C on the architecture in question. But note
further that that does not mean they follow the 32/64-bit nature of
the Lisp; for example, a :long
foreign type on
Compaq Alphas is always 64-bits, even for a 32-bit lisp. But this is
consistent with C.
Warning about backward compatibility with release 5.0.1 and
earlier: The default argument type is changed from
:signed-long
to
:signed-natural
. If a user has pre-6.0 code that
explicitly specifies :signed-long
, it is likely not
to work on 64-bit ports, because :signed-long
always specifies 32 bit values. If the user instead takes the default
argument type, then the code will work in all 6.0 and pre-6.0
versions. If 32-bits is explicitly desired, however, then the
:signed-long
(or :unsigned-long
)
should be explicitly specified.
See memref and memref-int and foreign-functions.htm for general information on foreign functions in Allegro CL.
Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |