[Vm-dev] Re: [Cog] reproducable crash with SmallInteger as methods

Mariano Martinez Peck marianopeck at gmail.com
Fri Dec 17 17:54:28 UTC 2010


And this change in  #primitiveIndexOf:
also fixes the #flushCache in SmallInteger.

Because if you use SmallInteger as methods, you need to implement
#flushCache because it is used in MethodDIctionary >> #at:put:
But before this change, this crashes because of the send to
#primitiveIndexOf:
But since now #primitiveIndexOf: is working, #primitiveFlushCacheByMethod
doesn't fail anymore with SmallInteger  :)


Cheers

Mariano

On Fri, Dec 17, 2010 at 11:01 AM, Mariano Martinez Peck <
marianopeck at gmail.com> wrote:

> Hi Eliot. I "fix/patch" it by chaging primitiveIndexOf:   to this:
>
> 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 |
>
>     (objectMemory isOopCompiledMethod: methodPointer)
>         ifTrue:
>             [primBits := ((self headerOf: methodPointer) >> 1) bitAnd:
> 16r100001FF.
>             ^(primBits bitAnd: 16r1FF) + (primBits >> 19)]
>         ifFalse:
>             [^ 0 ].
>
>
> at least for my case, it patches the problem. Still, I have no idea:
>
> - the implicance/side effect of this change
> - why in development was crashing but not in deployment.
>
> thanks
>
> mariano
>
>
>
> On Thu, Dec 16, 2010 at 5:27 PM, Mariano Martinez Peck <
> marianopeck at gmail.com> wrote:
>
>> Hi Eliot. Today I can reproduce a do-it that crash Cog, when using
>> SmallIntegers as compiled methods. The problem is actually that IT ONLY
>> crashes when compiling in XCode with "Development". However, if I compile
>> with "Deployment", it doesn't crash....
>>
>> The code is this:
>>
>> SmallInteger compile: 'flushCache "emtpy"'.
>> SmallInteger compile: 'run: aSelector with: arguments in: aReceiver
>>     Transcript show: ''something''.'.
>> TestCase compile: 'foo  ^ ''foo'' '.
>>
>> TestCase methodDict at: #foo put: 5.
>> TestCase new foo.
>>
>>
>> I really don't understand how this can work in "Deployment" but not in
>> "Development" since the code is the same as I know. Maybe when debugging
>> certain functions/methods are called that crash?
>>
>> Thanks for any tip.
>>
>> Mariano
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20101217/7b1fcb4c/attachment.htm


More information about the Vm-dev mailing list