Oh, to clarify---unsigned char is always a character. So uchar return / arg types do not accept or convert to predicate values, i.e. an unsigned char always returns C_make_character(*(unsigned char *)obj);
On 11/26/05, Zbigniew <[EMAIL PROTECTED]> wrote: > 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
