[Vm-dev] [COG] primitiveIndexOf: aMethod crash in Cog when using
SmallInteger
Mariano Martinez Peck
marianopeck at gmail.com
Tue Dec 14 09:19:04 UTC 2010
Hi Eliot. I am not sure if you are interested in completly support
SmallInteger as methods. If not, please let me know and I don't bather
again.
I was trying them in Cog, and I have a crash in
primitiveFlushCacheByMethod() when it calls primitiveIndexOf:
because
primitiveIndexOf: methodPointer
"Note: We now have 10 bits of primitive index, but they are in two
places
for temporary backward compatibility. The time to unpack is negligible,
since the derived primitive function pointer is stored in the method
cache."
<api>
| primBits |
primBits := ((self headerOf: methodPointer) >> 1) bitAnd: 16r100001FF.
^(primBits bitAnd: 16r1FF) + (primBits >> 19)
But....."methodPointer" can be a Smallnteger...so headerOf: fails, because
rawHeaderOf: fails because it does a "objectMemory fetchPointer: HeaderIndex
ofObject: methodPointer"
which send ObjectMemory >> fetchPointer: fieldIndex ofObject: oop
which does the final "self longAt: oop + BaseHeaderSize + (fieldIndex <<
ShiftForWord)"
ok, you got it ;)
Now....do you consider this a bug? how could I fix it ?
Thanks
Mariano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20101214/aea97f2a/attachment-0001.htm
More information about the Vm-dev
mailing list