I just bumped into...
    FFUInt64>>basicHandle: aHandle at: index
        ^ aHandle signedLongLongAt: index

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

Reply via email to