[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