[Vm-dev] Bug in #instVarAt:put: for read-only objects

Eliot Miranda eliot.miranda at gmail.com
Fri Jan 5 17:20:22 UTC 2018


Hi Clément,

> On Jan 5, 2018, at 5:50 AM, Clément Bera <bera.clement at gmail.com> wrote:
> 
> 
> 
>> On Fri, Jan 5, 2018 at 2:34 PM, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>>  
>> Hi Clément,
>> 
>>     is it too late to take a look at the VisualWorks code and use the same class names and selectors they use?  IIRC it is NoMidificationError.  It may make e.g. Gemstone's job easier if there is some consistency.
>> 
> 
> That was discussed on the Pharo mailing list. 
> 
> I used the same name and it was changed by other contributors.

Those contributors made an assertion nine and arrogant decision.  I encourage you too override them and maintaining n should me kind of compatibility for the benefit of Gemstone.  Working well with Gemstone could benefit greatly the Pharo community.  This refusal to learn or follow the experience of others will not serve the country mum it's well in the long term.  It is arrogant and exclusionary.

> 
>  
>> _,,,^..^,,,_ (phone)
>> 
>>> On Jan 5, 2018, at 5:22 AM, Clément Bera <bera.clement at gmail.com> wrote:
>>> 
>>> Hi,
>>> 
>>> No this is not a bug.
>>> 
>>> This needs to be handled in the primitive failure code in the image, the method should be something like that :
>>> 
>>> Object>>instVarAt: index put: anObject
>>> 	<primitive: 174 error: ec>
>>>         self isReadOnlyObject ifTrue: [(ModificationForbidden for: self atInstVar: index with: anObject) signal]
>>> 	self primitiveFailed
>>> 
>>> All primitive fall-back code triggering object mutation should be rewritten this way, especially primitives such as #at:put:, #instVarAt:put:, etc.
>>> 
>>> Cheers
>>> 
>>>> On Fri, Jan 5, 2018 at 1:42 PM, Norbert Hartl <norbert at hartl.name> wrote:
>>>>  
>>>> If I do 
>>>> 
>>>> (#foo -> #bar)
>>>> 	beReadOnlyObject;
>>>> 	value: #baz
>>>> 
>>>> it throws
>>>> 
>>>> ModificationForbidden:  #foo->#bar is read-only, hence its field 2 cannot be modified with #baz
>>>> 
>>>>  which is as expected. But if I do
>>>> 
>>>> (#foo -> #bar)
>>>> 	beReadOnlyObject;
>>>> 	instVarNamed: #value put: #baz
>>>> 
>>>> I get
>>>> 
>>>> PrimitiveFailed: primitive #instVarAt:put: in Association failed
>>>> 
>>>> I think this a bug, no?
>>>> 
>>>> Norbert
>>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Clément Béra
>>> Pharo consortium engineer
>>> https://clementbera.wordpress.com/
>>> Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
>> 
> 
> 
> 
> -- 
> Clément Béra
> Pharo consortium engineer
> https://clementbera.wordpress.com/
> Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20180105/414548a9/attachment.html>


More information about the Vm-dev mailing list