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


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