Next: 4.3.3 El fichero lelisp.h
Up: 4.3 Enlaces dinámicos
Previous: 4.3.1 Funciones de interfaz
En una llamada (defextern símbolo ltipo tipo), la
lista ltipo puede contener los siguientes tipos:

El tipo tipo devuelto debe ser alguno de los siguientes:

A continuación se examina cada uno de estos tipos más detalladamente:
- El tipo t se corresponde con cualquier puntero LE-LISP que
es pasado sin alteraciones. De la experiencia práctica se deduce
que es el modo más seguro de pasar punteros hacia y desde funciones C.
- El tipo external corresponde a los punteros externos al espacio de
memoria de LE-LISP. Está representado por una dirección LE-LISP.
Generalmente, un puntero de este tipo es el resultado de una llamada
a un procedimiento externo. El resultado de dicha llamada suele ser
almacenado y pasado
a otro procedimiento externo.
- El tipo fix se corresponde con un valor de tipo numérico entero.
- El tipo float se corresponde con un valor numérico de punto
flotante. Este tipo trabaja bien tanto en el modo LE-LISP de punto
flotante de 32 bits como en el de 64 bits.
- Un valor de tipo string se refiere a la dirección del primer
carácter de una cadena de caracteres. No se puede pasar una cadena
de caracteres por valor.
- Un valor de tipo fixvector indica la posición del primer elemento
de un vector de números enteros. Los vectores de enteros siempre se pasan
por referencia. Debido al modo en que LE-LISP representa los enteros, un vector
de enteros es diferente de un vector de S-expresiones que contenga sólo enteros.
- El tipo floatvector es como el fixvector sólo que referido
a vectores numéricos de punto flotante en 32 bits. No permite la
utilización de números de punto flotante de 64 bits. Un vector de floats
es diferente de un vector de S-expresiones conteniendo sólo floats.
En la tabla 4.1 se muestran las conversiones que tienen lugar cuando se
pasan argumentos a funciones C (columna `Argumento') y cuando éstas devuelven sus
resultados (columna `Resultado'). La
columna etiquetada como `Tipo LE-LISP' muestra el tipo definido en defextern
mientras que la columna etiquetada `Tipo C' muestra el tipo de los
argumentos recibidos por la función C conectada a LE-LISP
.

Table 4.1: Conversiones de tipos entre LE-LISP y C.
Los punteros LE-LISP son, o bien punteros a la zona de datos de LE-LISP, o bien
enteros cortos de 16 bits. El fichero lelisp.h contiene las declaraciones
del tipo de estructura C a las cuales apuntan los punteros LE-LISP. Respecto
al tipo external decir que no es cierto que pueda manipular sin más cualquier
puntero del sistema LE-LISP, sino que primero debe ser convertido en un cons
de dos enteros que representen las mitades más significativas y menos significativas de
la dirección.
Next: 4.3.3 El fichero lelisp.h
Up: 4.3 Enlaces dinámicos
Previous: 4.3.1 Funciones de interfaz
Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997