[Ecls-list] Re: floats and uffi

Goffioul Michael goffioul at imec.be
Thu Sep 15 00:51:17 UTC 2005


> "Goffioul Michael" <goffioul at imec.be> wrote:
> > To be clearer, what you will see in the generated C code 
> (you can see it by
> > adding :c-file t as flags to the compile-file function) is 
> something like:
> > 
> > 	test(object_to_float(V1));
> > 
> > As this test function is not declared in some header, the 
> compiler will
> > automatically guess its signature, and maybe the guess is 
> wrong (at least
> > in the return type, the compiler assuming int return by 
> default, I think).
> > This might be the problem.
> 
> I don't think that's the problem, object_to_float() is declared in
> one of ecl's header files.

I was not talking about "object_to_float", but about "test". This function
is not declared anywhere, hence the compiler guesses its signature from
the code itself.

> Now I looked at the c source and there's no object_to_float at all:
> 
>    test(object_to_double(V1));
> 
> Why double? Maybe that explains the data loss.

Indeed, without declaration for "test", the compiler probably assumes
that the signature for "test" is: int test(double). As the actual "test"
argument should be float, the function gets called with an incorrectly
setup stack.

I also confirm that when declaring an argument as :float in a foreign call,
the generated code uses object_to_double instead of object_to_float. But
I don't know why as the coercion code seems to be able to handle both
(in cmpffi.lsp). Juanjo?

Michael.




More information about the ecl-devel mailing list