[gambit-list] Converting uint32 to scheme object

Adam adam.mlmb at gmail.com
Wed Jan 6 09:48:20 EST 2016


2016-01-06 22:37 GMT+08:00 Marc Feeley <feeley at iro.umontreal.ca>:

> Of course one way would be to return a double (which has 53 bits of
> precision) and use NaN to encode “missing tag”.  I’m not kidding!
>
> If you don’t like this approach, and I can understand why you wouldn’t,
> then you have to do the conversion to ___SCMOBJ by directly calling the
> conversion macros.  Something like this:
>
> (define uint32_tag
>   (c-lambda
>    (TIFF* ttag_t)
>    scheme-object
>    "
>     ___U32 val;
>     if (TIFFGetField(___arg1, ___arg2, &val) == 1) {
>       if ((___err = ___U32_to_SCMOBJ (___PSTATE, val, &___result,
> ___RETURN_POS)) == ___FIX(___NO_ERR)) {
>         ___release_scmobj (___result);
>       }
>     } else {
>       ___result = ___FAL;
>     }
>    "))
>

Neat! What is the risk involved with this one - I mean, the Scheme object
allocation on the Gambit heap could fail under certain circumstances. But
would that only be on malloc() failure?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20160106/4341640d/attachment.htm>


More information about the Gambit-list mailing list