:reference

FLI type descriptor

Summary

Passes a foreign object of a specified type by reference, and automatically dereferences the object.

Package

fli

Syntax

:reference
type
&key
allow-null
lisp-to-foreign-p
foreign-to-lisp-p

Arguments

type

The type of the object to pass by reference.

allow-null

If non-
nil
, if the input argument is
nil
a null pointer is passed instead of a reference to an object containing
nil
.

lisp-to-foreign-p

If non-
nil
, allow conversion from Lisp to the foreign language. The default value is
t
.

foreign-to-lisp-p

If non-
nil
, allow conversion from the foreign language to Lisp. The default value is
t

Description

The FLI
:reference
type is essentially the same as a :pointer type, except that
:reference
is automatically dereferenced when it is processed.

The
:reference
type is useful as a foreign function argument. When a function is called with an argument of the type
(:reference
type
)
, an object of
type
is dynamically allocated across the scope of the foreign function, and is automatically de-allocated once the foreign function terminates. The value of the argument is not copied into the temporary instance of the object if
lisp-to-foreign-p
is
nil
, and similarly, the return value is not copied back into a Lisp object if
foreign-to-lisp-p
is
nil
.

Example

In the following example an
:int
is allocated, and a pointer to the integer is bound to the Lisp variable
number
. Then a pointer to
number
, called
point1
, is defined. The pointer
point1
is set to point to
number
, itself a pointer, but to an
:int
.