Yes, they use the natural representation, so if you know from the methodReturnType call that a return type is _C_DBL, you can cast the return value directly to a double. E.g. C_flonum(&a, *(double *)rbuf); And _C_CLASS is a Class (struct objc_class *) and _C_ID is an id (struct objc_object *). And so on.
As an aside, and this is probably not news to you, the BOOL type is just an alias for signed char. However, signed char is exceedingly rare as a return or argument type, it is almost 100% BOOL. I found it beneficial to implicitly convert a return of (char)0 into #f --- other values still return the character itself --- and to convert an signed char argument of #f or #t into (char)0 or (char)1 --- though character values are still accepted. This makes Scheme predicates behave nicely. And the rare real signed char returns and args still work, with the caveat that a #f return would mean #\x0. On 11/26/05, felix winkelmann <[EMAIL PROTECTED]> wrote: > > Yes, this looks fine. Can one assume the buffer for arguments/return values > uses a "natural" representation? On 11/25/05, Thomas Chust <[EMAIL PROTECTED]> wrote: > > [inv setArgument:convertArgumentFromScheme(i-2, [sig > > getArgumentTypeAtIndex:i]) > > atIndex:i]; > > [inv invoke]; > > void *rbuf = alloca([sig methodReturnLength]); > > [inv getReturnValue:rbuf]; > > convertReturnValueToScheme([sig methodReturnType], rbuf); _______________________________________________ Chicken-users mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/chicken-users
