> On 28 Nov 2017, at 16:25, Ben Coman <b...@openinworld.com> wrote: > > I just bumped into... > FFUInt64>>basicHandle: aHandle at: index > ^ aHandle signedLongLongAt: index
that’s probably a bug :) Esteban > > and I'm curious why #unsignedLongLongAt: is not used. > Seems I had the same question a year ago... > > On 1 September 2016 at 22:09, Ben Coman <b...@openinworld.com> wrote: >> I'm looking through the keyhole at something new to me, so maybe this >> is off base, but looking at the inheritance hierarchy... >> >> FFIIntegerType >> FFIUint16 >> FFIUint16 >> FFIUInt32 >> FFIInt32 >> FFIUint64 >> FFIInt64 >> FFIUint8 >> FFIInt8 >> >> I'm curious... why the all the Ints inherit from the UInts? >> >> Each of those classes has the same two methods #basicHandle:at: and >> #basicHandle:at:put. So the Int subclasses fully override the >> superclass methods. So there in no inherited behaviour on the instance >> side. >> >> On the class side, I see #externalTypeSize is inherited by the Ints, >> but evaluating... >> FFIIntegerType allSubclasses collect: [ :class | >> class externalType byteSize -> class externalTypeSize ] >> produces... >> 4->4 >> 2->2 >> 4->4 >> 8->8 >> 1->1 >> 2->2 >> 4->4 >> 8->8 >> 1->1 >> >> So naively the extra inheritance level seems unnecessary >> and perhaps having... >> FFIIntegerType class >> externalTypeSize >> ^ self externalType byteSize >> >> would allow the hierarchy to be flattened. Maybe not a great benefit, >> except to avoid the next person wondering the same thing :P > > Perhaps its significantly faster to have the method directly return > the integer rather than do a few more message sends (??) > > cheers -ben > >> >> >> Also, it is surprising that that FFUInt64 uses #signedLongLongAt: >> rather than #unsignedLongLongAt: . This seems on-purpose rather than >> accidental since its inherited by FFIInt64, so it seems there is >> something interesting to learn here that would benefit a method >> comment. >> >> cheers -ben >