2014-01-31 Eliot Miranda eliot.miranda@gmail.com:
Hi All,
I'd be grateful for a second set of eyes to review my changes in
plugin land. The idea here was to eliminate as many isIntegerObject: sends where the intent is to fail if interpreterProxy isImmediate:. There are other cleanups too; some places where it is assumed the start of an object is object + 4 (instead of object + BaseHeaderSize, which hopefully will fix some Spur bugs, where BaseHeaderSize is 8). But there are a fair few fixes and I could have made a mistake.
TIA
Hi Eliot, I'm afraid that so many changes at once has a quite selective effect... That means significant time and effort to review. Next time, I suggest distillating bugs on purpose just to check how attentive the list is ;)
I don't know if I where careful enough, but there is only one thing I noticed in #ffiIntegerValueOf:
We now either return a positive32BitValueOf: or a signedMachineIntegerValueOf: If sizeof(long)==4, then behavior is unchanged, otherwise there is some sort of strange dyssymetry... Shouldn't it then be positveMachineIntegerValueOf: (does not exist yet ?)
The sender #ffiArgByValue:in: will either pushByte short int or long long (signed or not), but not long so there is an apparent mismatch... Oh but wait, ffiPushSignedInt:in: calls longAt:put:... Oh but wait, longAtPut: takes a sqInt... ...which is either an int or a long... It is very disturbing to follow...
OK, OK, there is no ThreadedFFIIA64Plugin yet, but that's going to be difficult to implement correctly... Especially if sizeof(int) != sizeof(long), we are going to lack a pushInt pushLong distinction.